Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在定义内部带有变量的lambda函数时,如何防止在更改变量时对函数进行更改?_Python - Fatal编程技术网

Python 在定义内部带有变量的lambda函数时,如何防止在更改变量时对函数进行更改?

Python 在定义内部带有变量的lambda函数时,如何防止在更改变量时对函数进行更改?,python,Python,例如:在这段代码中,当变量改变时,函数也会改变。我想学习如何在更改变量时防止函数行为的变化。有没有办法只获取变量的值而不是变量本身?还有什么渠道可以让我更多地了解像这样的问题 a = 5 adder = lambda x: x + a print(adder(5)) # prints 10 a = 50 print(adder(5)) # prints 55 就像由def语句定义的等效函数一样,您应该使用def语句,而不是将lambda表达式的结果显式指定给名称 def adder(x):

例如:在这段代码中,当变量改变时,函数也会改变。我想学习如何在更改变量时防止函数行为的变化。有没有办法只获取变量的值而不是变量本身?还有什么渠道可以让我更多地了解像这样的问题

a = 5
adder = lambda x: x + a
print(adder(5)) # prints 10

a = 50
print(adder(5)) # prints 55

就像由def语句定义的等效函数一样,您应该使用def语句,而不是将lambda表达式的结果显式指定给名称

def adder(x):
    return x + a
在调用函数之前,不会查找名称a

当定义时a==5时,使函数专门计算x+5的一种方法是使用默认参数值:

def adder(x, a=a):
    return x + a
其中,左侧a是一个新参数,不打算显式设置,右侧a是当前范围内a的值

不过,更好的办法是定义一个闭包,这样您的函数就不会有可能被滥用的隐藏参数

# This is where a lambda expression does make sense: you want
# a function, but don't need to give it a name.
def make_adder(a):
    return lambda x: x + a

adder = make_adder(5)

in-adder仍然是一个自由变量,但现在它引用了一个作用域中的变量,在make_adder返回后,您无法访问该作用域。

就像应该使用的def语句定义的等效函数一样,而不是将lambda表达式的结果显式指定给名称

def adder(x):
    return x + a
在调用函数之前,不会查找名称a

当定义时a==5时,使函数专门计算x+5的一种方法是使用默认参数值:

def adder(x, a=a):
    return x + a
其中,左侧a是一个新参数,不打算显式设置,右侧a是当前范围内a的值

不过,更好的办法是定义一个闭包,这样您的函数就不会有可能被滥用的隐藏参数

# This is where a lambda expression does make sense: you want
# a function, but don't need to give it a name.
def make_adder(a):
    return lambda x: x + a

adder = make_adder(5)

加法器中的a仍然是一个自由变量,但现在它指的是一个作用域中的变量,在make_加法器返回后,您不能在外部访问它。

adder=lambda x,a=a:x+aadder=lambda x,a=a:x+a您也可以在那里使用lambda:return lambda x:x+a.True;我在def not lambda十字军东征中过火了。你也可以在那里使用lambda:return lambda x:x+a。正确;我在def而不是lambda十字军东征中走了极端。