我有一个问题,我想按名称将变量带入函数中。
到目前为止,我已经尝试过:
x = 5
def func(y = x):
return y ** 2
>>>print func()
25
>>>x = 4
>>>print func()
25
但是,如果我在输入代码后尝试编辑该输入变量,则该函数检测到旧输入的数字,因此它仍会打印 25 与新输入平方相反。
是否有更简洁的方法将变量拉入实际有效的函数中?
默认函数值是在函数创建期间计算的,因此即使您更改它的值x
也不会在函数中更改。
来自文档:
执行函数定义时评估默认参数值。这意味着在定义函数时对表达式求值一次,并且每次调用都使用相同的“预计算”值。
阅读:使用mutable
对象作为默认值可能会导致意想不到的结果。
如果要访问全局值,只需执行以下操作:
def func():
return x**2
或者更好地明确传递它:
def func(y):
return y**2
>>> x = 10
>>> def func():
... print x
... x = 5
...
>>> func()
Traceback (most recent call last):
func()
File "<ipython-input-5-ab38e6cadf6b>", line 2, in func
print x
UnboundLocalError: local variable 'x' referenced before assignment
使用classes
:
class A:
x = 5
@staticmethod
def func():
return A.x**2
...
>>> A.func()
25
>>> A.x = 10
>>> A.func()
100
只需直接引用全局变量,而不是将其用作参数的默认值。
def func():
return x ** 2
y 的默认值是在函数定义期间设置的,而不是在运行时设置的。因此,默认值y
设置为x
在线值def
。
这应该有效:
def func(y=None):
if y is None:
y = x
return y ** 2
通常在 python 关键字参数中总是分配一个值,你不能改变这个分配的值。所以在你的代码中
x=5
def func(y = x):
return y ** 2
print func()
x=4
print func()
对于关键字参数 y,分配了 x 即 5 的值,我们无法更改该值。因此,即使您更改 x 的值,您也会得到与 25 相同的输出
为了解决这个问题,函数可能会直接访问全局变量并返回值,如下面的代码
x=5
def func():
return x ** 2
print func()
x=4
print func()
这是执行此操作的正确方法
x=5
def foo():
global x
return x**2
或者你可以简单地这样做
x=5
def foo():
return x**2
在这种情况下,如果存在,则引用相同的全局变量。