Python 我可以把这两个assign语句放在助手函数中吗?
我在做一个关于战舰的棋盘游戏。因为0,1,2,3。。。是1,2,3,4。。。(我不知道该怎么称呼它),我需要变量row和column比实际值小一,即:Python 我可以把这两个assign语句放在助手函数中吗?,python,tuples,Python,Tuples,我在做一个关于战舰的棋盘游戏。因为0,1,2,3。。。是1,2,3,4。。。(我不知道该怎么称呼它),我需要变量row和column比实际值小一,即: row -= 1 column -= 1 我需要在一系列函数中使用它,所以我认为如果每次都使用一个helper函数,会更整洁。我试过这两种方法: row, column = row -= 1, column -= 1 但是,这给了我列-=1上的语法错误 我还尝试: def decimal_helper(row, column): ro
row -= 1
column -= 1
我需要在一系列函数中使用它,所以我认为如果每次都使用一个helper函数,会更整洁。我试过这两种方法:
row, column = row -= 1, column -= 1
但是,这给了我列-=1
上的语法错误
我还尝试:
def decimal_helper(row, column):
row -= 1
column -= 1
return row, column
然而,这只是返回一个元组,而我需要分别返回这两个变量
def decimal_helper(row, column):
return row - 1, column -1
# unpack the tuple back into two variables
row, column = decimal_helper(row, column)
您也可以选择更优雅的方式,使用@jornsharpe建议的一行:
row, column = row - 1, column - 1
我觉得这个更优雅。通过这种方式,您可以封装“转换”逻辑,而不需要在整个代码中复制它:
class DecimalHelper:
def __init__(self, row, column):
self.row = row
self.column = column
self.rowIndex = row - 1
self.colIndex = column - 1
row = 3
column = 4
dc = DecimalHelper(row, column)
print dc.rowIndex
print dc.colIndex
还有一种更优雅的方法,使用类属性(credits to post):
我能从中解释的唯一一件事是,我认为您正在寻求这样做:
a,b=decimal\u helper(行,列)
。如果您从方法返回多个项,则它将按预期返回。你需要相应地打开包装。除此之外,我不知道您还要求什么。您可以执行行,column=row-1,column-1
,但为什么不坚持您所拥有的?所有函数只返回一个值;尝试调用方如何访问两个返回值,而不使用看起来像元组解包的东西。在这种情况下,您最好返回行-1,列-1
class ClassPropertyDescriptor(object):
def __init__(self, fget, fset=None):
self.fget = fget
self.fset = fset
def __get__(self, obj, klass=None):
if klass is None:
klass = type(obj)
return self.fget.__get__(obj, klass)()
def __set__(self, obj, value):
if not self.fset:
raise AttributeError("can't set attribute")
type_ = type(obj)
return self.fset.__get__(obj, type_)(value)
def setter(self, func):
if not isinstance(func, (classmethod, staticmethod)):
func = classmethod(func)
self.fset = func
return self
def classproperty(func):
if not isinstance(func, (classmethod, staticmethod)):
func = classmethod(func)
return ClassPropertyDescriptor(func)
class DecimalHelper:
def __init__(self, row, column):
self.row = row
self.column = column
@classproperty
def rowIndex(cls):
return row - 1
@classproperty
def colIndex(cls):
return column - 1
row = 3
column = 4
dc = DecimalHelper(row, column)
print dc.rowIndex
print dc.colIndex