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十字军东征中走了极端。