Python 定义一个依赖于另一个变量的变量

Python 定义一个依赖于另一个变量的变量,python,python-3.x,Python,Python 3.x,我想要的是: >>> x = 2 >>> y = x+10 >>> print(y) 12 >>> x = 30 >>> print(y) #Whatever x is, y is that number x, plus 10. 40 这种“因变量”如何在Python版本x中声明?Python中的变量是不可变的,这意味着它们随着时间的推移是不变的,或者除非被告知引用其他变量,否则无法更改。换句话

我想要的是:

>>> x = 2
>>> y = x+10 
>>> print(y)
12

>>> x = 30
>>> print(y)   #Whatever x is,  y is that number x, plus 10.
40

这种“因变量”如何在Python版本x中声明?

Python中的变量是不可变的,这意味着它们随着时间的推移是不变的,或者除非被告知引用其他变量,否则无法更改。换句话说,使用可用的数据类型是不可能的。Python采用这种方式是有原因的——它提高了速度和表达能力。也许有一种方法可以在没有可变数据类型的情况下实现您想要做的事情

如果您坚持使用可变数据类型,则有一些语言允许使用这种类型,并且可能有一个可导入的模块或类定义允许使用这种类型,但它是高度非Pythonic的


请参阅:

Python中的变量是不可变的,这意味着它们随着时间的推移是不变的,或者除非被告知引用其他变量,否则无法更改。换句话说,使用可用的数据类型是不可能的。Python采用这种方式是有原因的——它提高了速度和表达能力。也许有一种方法可以在没有可变数据类型的情况下实现您想要做的事情

如果您坚持使用可变数据类型,则有一些语言允许使用这种类型,并且可能有一个可导入的模块或类定义允许使用这种类型,但它是高度非Pythonic的

请参阅:

您可以使用函数而不是变量来执行此操作

def y(x):
    return x + 10
因此,
print(y(x))
将给出当前值
x
加10的输出

但是,没有一种方法可以完全通过变量来实现这一点。只有当您明确告诉变量时,变量才会更改其值。

您可以使用函数而不是变量来执行此操作

def y(x):
    return x + 10
因此,
print(y(x))
将给出当前值
x
加10的输出


但是,没有一种方法可以完全通过变量来实现这一点。只有当您明确告诉变量时,变量才会更改其值。

我知道在标准Python库中执行此操作的唯一方法是使用属性,以便在每次访问属性时计算适当的值:

class Thing(object):

    def __init__(self, x, y_add):
        self.x = x
        self.y_add = y_add

    @property
    def y(self):
        return self.x + self.y_add
使用中:

>>> t = Thing(2, 10)
>>> t.x
2
>>> t.y
12
>>> t.x = 3
>>> t.y
13

否则,您必须进行函数调用(
y()
而不是
y
)或使用类似的方法。

我知道在标准库Python中执行此操作的唯一方法是使用属性,以便每次访问属性时都计算适当的值:

class Thing(object):

    def __init__(self, x, y_add):
        self.x = x
        self.y_add = y_add

    @property
    def y(self):
        return self.x + self.y_add
使用中:

>>> t = Thing(2, 10)
>>> t.x
2
>>> t.y
12
>>> t.x = 3
>>> t.y
13

否则,您必须进行函数调用(
y()
而不是
y
)或使用类似的方法。

这不是函数的用途吗?您希望实现什么?如果你在做数学计算,那么使用sympy,如果你试图实现一个算法,那么uye是一个函数。这不是函数的用途吗?你想实现什么?如果你在做数学计算,那么使用sympy,如果你试图实现一个算法,那么使用uye a函数。如果声明函数时
x
不在范围内,您将得到一个
namererror
。2.如果它在作用域中,无论何时在没有显式参数的情况下调用函数,都会得到原始值
x
,而不是当前值。3.分配是完全冗余的,只需
返回x+10
。4.你没有跟上。感谢你的反馈:)@jornsharpe我知道这一点。我自己还在学习最佳Python实践,目前正在阅读。如果您能够编辑答案以解决您的建议,我将非常感谢您的帮助和指导。我无法真正编辑它以使其正常工作-“这意味着每次调用函数时,默认情况下它将获得传递的
x
”根本不正确(请尝试更改
x
,看看会发生什么)。要使用函数,您必须显式传递当前值(即始终使用
y(x)
)。好的,请理解您的意思。注意:1。如果声明函数时
x
不在范围内,您将得到一个
namererror
。2.如果它在作用域中,无论何时在没有显式参数的情况下调用函数,都会得到原始值
x
,而不是当前值。3.分配是完全冗余的,只需
返回x+10
。4.你没有跟上。感谢你的反馈:)@jornsharpe我知道这一点。我自己还在学习最佳Python实践,目前正在阅读。如果您能够编辑答案以解决您的建议,我将非常感谢您的帮助和指导。我无法真正编辑它以使其正常工作-“这意味着每次调用函数时,默认情况下它将获得传递的
x
”根本不正确(请尝试更改
x
,看看会发生什么)。要使用函数,必须显式传递当前值(即始终使用
y(x)
)。好的,明白你的意思了。