我遇到了一个问题,我希望通过名称将变量引入函数。
到目前为止我已尝试过这个:
x = 5
def func(y = x):
return y ** 2
>>>print func()
25
>>>x = 4
>>>print func()
25
但是,如果我在输入代码后尝试编辑该输入变量,则该函数会检测旧输入的数字,因此它仍然会打印25,与新输入的平方相反。
是否有更简洁的方法将变量拉入实际有效的函数中?
答案 0 :(得分:0)
默认函数值是在函数创建期间计算的,因此即使您更改x
的值,也不会在函数中更改它。
来自docs:
在函数定义时计算默认参数值 执行即可。这意味着表达式被评估一次,当时 定义函数,并使用相同的“预先计算”值 每次通话。
阅读:使用mutable
个对象作为默认值lead to unexpected results.
如果您想访问全局值,只需执行以下操作:
def func():
return x**2
或者更好地明确传递它:
def func(y):
return y**2
Another reason why not to use global variables inside function:
>>> 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
答案 1 :(得分:0)
直接引用全局变量,而不是将其用作参数的默认值。
def func():
return x ** 2
答案 2 :(得分:0)
y的默认值在函数定义期间设置,而不是在运行时设置。因此y
的默认值设置为x
行def
的值。
这应该有效:
def func(y=None):
if y is None:
y = x
return y ** 2
答案 3 :(得分:0)
通常在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()
答案 4 :(得分:0)
这是正确的方法
x=5
def foo():
global x
return x**2
或者你可以像这样做
x=5
def foo():
return x**2
在这种情况下,如果存在相同的全局变量,则引用它。