为什么这不打印无,然后7? Python的
所以我有这样的代码,并叫我白痴哈哈,但我不能让这个打印无则7.为什么这不打印无,然后7? Python的
代码:
def function(parameter):
parameter = parameter + 1
parameter = 6
print(function(parameter))
print(parameter == 7)
我需要知道如何改变具有可变与函数中的参数名称相同。
任何帮助将不胜感激,如果你不明白这个问题,我会很乐意解释更多。
定义parameter
全球和实际上并不把它作为参数:
def function():
global parameter
parameter += 1
然后将最终的打印改为'print(parameter)',而不是'print (paramater == 7)',如果你想要它实际打印'7'。 – ShadowRanger
事实上,我甚至没有注意到在他的代码 – GPhilo
它打印None
因为你function()
不返回任何东西。
它打印False
,因为parameter
(这是目前6
)不等于7
。
要改变正在由局部变量屏蔽了全局变量,使用globals()
功能:
def function(parameter):
globals()['parameter'] += 1
DRY:'globals()['parameter'] + = 1' – ShadowRanger
或者说,相同的效果。 (我试图尽可能少地改变他) – Attie
因为我真的恨全局变量,这是我会怎么做:
def function(parameter):
return parameter + 1
parameter = function(6)
print(parameter)
print(parameter == 7)
输出
7
True
基本上,通过指定一个与参数名称相同的变量并分配函数,您可以将parameter
更改为如同一个变量。请注意,事实并非如此,它实际上并不是同一个对象。但是,如果你的目标是使用它的作品相同的名称。
你可以做的是指它作为global
。什么可能会帮助你更好的是使用函数的概念,它们是:提供任何给定的输入,它们产生一些结果。
所以,你可能想使用一个return
:
def fun(val):
return val;
parameter = val(10)
print(parameter) # prints '10'
不过,如果你想参考变量,在Python中,你可以做各种疯狂的东西,比如访问模块范围作为一个对象,并改变它的值有:
def fun(val):
import sys;
sys.modules[__name__].parameter = val
parameter = 10
fun(1)
print(parameter) # prints '1'
然而,有一个原因,我把这种疯狂的,这是因为如果一个函数有副作用,你永远无法从外面出来。这就是你想避免的复杂性。因为你的代码应该尽可能地预测。原因很明显。
使用全局变量既不是线程安全的也不推荐使用。看起来最干净的解决方案是将参数参数传递给可变容器。请参阅
如果您*必须*将其用作参数,则不能,因为参数被强制为局部变量。无论如何,这听起来不是一个好主意。 –
理想情况下,您不希望使用全局变量,因为它们不如局部变量那么高效 - 为什么不简单地返回'parameter + 1'并设置'parameter = function(parameter)'或者沿着这些行? –
可能重复:https://stackoverflow.com/questions/10235973/modifying-global-variable-with-same-name-as-local-variable – Attie