全局变量和局部变量

局部变量和全局变量重名,在局部函数定义域中局部变量生效

1)如果想在局部函数中修改赋值同名的全局变量(不可变类型),在局部函数中加global 变量名

2)对于可变类型,如列表,不用加Global, 也可以对其内部元素进行操作,对全局变量也不能赋值(=操作)

3)在函数体内写global一定要在最开始写,防止冲突报错

4)为了防止出现冲突报错,全局变量大写,局部变量小写

telma = "Chris"

def f1():
    telma = "John"
    print("~~~~局部变量和全局变量同名,局部变量生效~~~~")
    print(telma)

def f2():
    print("~~~~没有定义局部变量,全局变量生效~~~~")
    print(telma)

def f3():
    global telma
    telma = "Tom"
    print("~~~~在局部函数中更改全局变量~~~~")
    print(telma)

f1()
f2()
f3()
f2()

  

~~~~局部变量和全局变量同名,局部变量生效~~~~
John
~~~~没有定义局部变量,全局变量生效~~~~
Chris
~~~~在局部函数中更改全局变量~~~~
Tom
~~~~没有定义局部变量,全局变量生效~~~~
Tom

 

telmaList = ["John","Jack","Tom"]

def f1():
    telmaList = ["Happy","Moon"]

def f2():
    telmaList.append("Chris")

print("~~~~~~没有global无法通过=对全局变量赋值~~~~~~~~~~")
f1()
print(telmaList)
print("~~~~~没有global,对于可变类型可以改变内部元素~~~~~")
f2()
print(telmaList)

  

~~~~~~没有global无法通过=对全局变量赋值~~~~~~~~~~
['John', 'Jack', 'Tom']
~~~~~没有global,对于可变类型可以改变内部元素~~~~~
['John', 'Jack', 'Tom', 'Chris']

 

telma = "Jack"
def f1():
    telma = "Mike"
    print(telma)
    def f2():
        nonlocal telma
        telma = "Chris"
    f2()
    print("~~~~~~~nonlocal对上一级变量生效~~~~~~")
    print(telma)

f1()
print("~~~~~nonlocal对global变量不生效~~~~~~~")
print(telma)

  

Mike
~~~~~~~nonlocal对上一级变量生效~~~~~~
Chris
~~~~~nonlocal对global变量不生效~~~~~~~
Jack

 

posted on 2019-03-09 10:53  telma  阅读(146)  评论(0)    收藏  举报

导航