python 3中的全局变量声明

时间:2018-06-05 16:17:03

标签: python python-3.x

我试图了解全局变量如何影响。考虑以下代码作为示例

person = "Dave"
def display(person):
    global i 
    i = "Jack"
    print("here is ",person) 
display(person) 
display(i)

这导致:
戴夫是 这是杰克

我需要了解“这里是杰克”的打印方式

以下代码会导致错误,即我未定义。

person = "Dave"
def display(person):
    global i 
    i = "Jack"
    print("here is ",person) 
display(i)

我也不明白这一点。

请支持。

2 个答案:

答案 0 :(得分:1)

在第二个示例中,当您调用display时,i尚未定义,但在第一个示例中,正如之前调用的显示,i已定义并具有值。如果您在第一个示例中更改了顺序,它也将无效。

i仅在调用显示后定义。

答案 1 :(得分:1)

@Gayathri ,第一件事是全局关键字用于引用程序中声明的全局变量或将任何变量声明为全局变量内部功能块(如您的情况)。

请您理解以下2个代码示例之间的区别。

»使用全球关键字:

i = 10;

def func():
    global i;
    i = 20; # Modifying global i
    print(i); # 20

print(i); # 10
func();
print(i); # 20

»不使用全球关键字:

i = 10;
def func():
    i = 20; # It won't modify global i, here i is local to func()
    print(i); # 20

print(i); # 10
func(); 
print(i); # 10

现在,让我们关注主要问题。

✓在第一种情况下,def display(person):中的本地的值为“Dave”,并且正在打印here is Dave&之后,它正在创建全局 i 并将其值设置为“Jack”。在第二次通话中,即display(i)正在传递 i 的设定值Jack,该值已分配给def display(person):中可用的本地变量,因此它打印here is Jack并且没有错误。

enter image description here

✓在第二种情况下,在函数调用display(i)之前没有明确的赋值或函数调用来设置 i 的值,因此出现了错误。