如何将变量引入函数 - Python

时间:2013-11-02 14:54:11

标签: python function variables

我遇到了一个问题,我希望通过名称将变量引入函数。

到目前为止我已尝试过这个:

x = 5
def func(y = x):
    return y ** 2

>>>print func()
25
>>>x = 4
>>>print func()
25

但是,如果我在输入代码后尝试编辑该输入变量,则该函数会检测旧输入的数字,因此它仍然会打印25,与新输入的平方相反。

是否有更简洁的方法将变量拉入实际有效的函数中?

5 个答案:

答案 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的默认值设置为xdef的值。

这应该有效:

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

在这种情况下,如果存在相同的全局变量,则引用它。