-1

我有一个问题,我想按名称将变量带入函数中。

到目前为止,我已经尝试过:

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

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

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

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

4

5 回答 5

0

默认函数值是在函数创建期间计算的,因此即使您更改它的值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
于 2013-11-02T14:55:43.987 回答
0

只需直接引用全局变量,而不是将其用作参数的默认值。

def func():
    return x ** 2
于 2013-11-02T14:56:49.900 回答
0

y 的默认值是在函数定义期间设置的,而不是在运行时设置的。因此,默认值y设置为x在线值def

这应该有效:

def func(y=None):
    if y is None:
        y = x
    return y ** 2
于 2013-11-02T14:57:33.607 回答
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()
于 2013-11-02T15:07:17.987 回答
0

这是执行此操作的正确方法

x=5
def foo():
    global x
    return x**2

或者你可以简单地这样做

x=5
def foo():
    return x**2

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

于 2013-11-02T15:15:14.037 回答