Python 我可以把这两个assign语句放在助手函数中吗?

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

我在做一个关于战舰的棋盘游戏。因为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):
    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