为什么这不打印无,然后7? Python的

问题描述:

所以我有这样的代码,并叫我白痴哈哈,但我不能让这个打印无则7.为什么这不打印无,然后7? Python的

代码:

def function(parameter): 
    parameter = parameter + 1 
parameter = 6 
print(function(parameter)) 
print(parameter == 7) 

我需要知道如何改变具有可变与函数中的参数名称相同。

任何帮助将不胜感激,如果你不明白这个问题,我会很乐意解释更多。

+0

如果您*必须*将其用作参数,则不能,因为参数被强制为局部变量。无论如何,这听起来不是一个好主意。 –

+0

理想情况下,您不希望使用全局变量,因为它们不如局部变量那么高效 - 为什么不简单地返回'parameter + 1'并设置'parameter = function(parameter)'或者沿着这些行? –

+0

可能重复:https://stackoverflow.com/questions/10235973/modifying-global-variable-with-same-name-as-local-variable – Attie

定义parameter全球和实际上并不把它作为参数:

def function(): 
    global parameter 
    parameter += 1 
+1

然后将最终的打印改为'print(parameter)',而不是'print (paramater == 7)',如果你想要它实际打印'7'。 – ShadowRanger

+0

事实上,我甚至没有注意到在他的代码 – GPhilo

它打印None因为你function()不返回任何东西。

它打印False,因为parameter(这是目前6)不等于7


要改变正在由局部变量屏蔽了全局变量,使用globals()功能:

def function(parameter): 
    globals()['parameter'] += 1 
+0

DRY:'globals()['parameter'] + = 1' – ShadowRanger

+0

或者说,相同的效果。 (我试图尽可能少地改变他) – 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' 

然而,有一个原因,我把这种疯狂的,这是因为如果一个函数有副作用,你永远无法从外面出来。这就是你想避免的复杂性。因为你的代码应该尽可能地预测。原因很明显。

使用全局变量既不是线程安全的也不推荐使用。看起来最干净的解决方案是将参数参数传递给可变容器。请参阅​​