• 全局变量与局部变量


    无缩进的是全局作用域,有缩进的是局部作用域。 

    例如:

    name = "hello"===========>全局变量

    def change_name():
    name = "alisa"
    print(name)
    change_name()=========>结果是:alisa 因为系统会自动调用函数里的name,所以结果是alisa
    print(name)===========>结果是: hello

    修改全局name
    name = "hello"

    def change_name():
    global name===========>此处代表全局修改name
    name = "alisa"
    print(name)
    change_name()=============>运行函数,结果alisa
    print(name)==========>结果是alisa

    练习

    name = "lhf"

    def change_name():
    print("我的名字",name)

    change_name()======>运行函数结果是:我的名字 lhf


    def change_name():
    name = "很帅"
    print("我的名字",name)
    change_name()=========>运行函数结果是:我的名字 很帅

    print(name)============>结果是:lhf


    def change_name():
    global name
    name = "很帅"
    print("我的名字",name)
    change_name()========>运行函数,结果是:我的名字 很帅
    print(name)==========>结果是:很帅

    如果函数内部没有global关键字,优先读取局部变量,如果局部变量中没有,就会读取全局变量,局部变量能读取全局变量,无法给全局变量重新赋值。但是对于可变对象可以对内部元素进行操作。
    如果函数中有global关键字,本质是此变量是全局变量,可以对全局变量进行赋值,读取
    全局变量变量名都大写,局部变量变量名都小写


    -不可变对象:字符串,数字,元祖
    name = "苹果"====>'苹果'是字符串类型,字符串不可修改

    def alisa():
    global name======>此处实际是全局变量
    name = "香蕉"=======>给全局变量重新赋值
    print("我要",name)======>结果是:我要 香蕉

    def tom():
    print("我要",name)

    tom()====>先运行tom(),此时全局变量name 还是苹果所以结果是:我要 苹果
    alisa()===>结果是:我要 香蕉
    ****************************************************
    name = "苹果"

    def alisa():
    global name
    name = "香蕉"
    print("我要",name)=====》结果是我要 香蕉

    def tom():
    print("我要",name)


    alisa()=====》先运行alisa(),结果是:我要香蕉,并且此时已经对全局变量name重新赋值为香蕉
    tom()======》全局变量已重新赋值为香蕉,所以结果是:我要 香蕉

    -可变对象:列表,字典等

    name = ["苹果","香蕉"]

    def alisa():
    name.append("橘子")======>由于局部变量中无变量name,所以读取全局变量,并对全局变量的name进行修改
    print("我要",name)

    def tom():
    print("我要",name)


    tom()======>规律同上,结果是:我要 ["苹果","香蕉"]
    alisa()=====>结果是:我要 ["苹果","香蕉",“橘子”]

    ************************************************

    name = ["苹果","香蕉"]

    def alisa():
    name.append("橘子")
    print("我要",name)

    def tom():
    print("我要",name)

    alisa()=======》结果是:我要 ["苹果","香蕉",“橘子”]
    tom()=========》结果是:我要 ["苹果","香蕉",“橘子”]

    全局变量大写,局部变量小写,例如:

    NAME = ["苹果","香蕉"]

    def alisa():
    name = "橘子"
    global NAME
    print("我要",NAME)
    alisa()==========>NAME代表全局变量,所以结果是:我要 我要 ['苹果', '香蕉']
    ************************************
    NAME = ["苹果","香蕉"]

    def alisa():
    name = "橘子"
    global NAME
    print("我要",name)
    alisa()=========>name代表局部变量,所以结果是:我要 橘子
    NAME = "海风" 第1步

    def huangwei():第3步
    name = "黄伟"第4步
    print(name)第5步
    def liuyang():第7步
    name = "刘洋"第8步
    print(name)第9步
    def nulige():第11步
    name = "努力哥"第12步
    print(name)
    nulige()第10步=====》努力哥
    liuyang()第6步=========》刘洋
    print(name)第13步======》黄伟 因为局部变量只负责自己的局部变量,其他局部变量不变
    huangwei()第2步===========》黄伟
    name = "刚娘"

    def weihou():
    name = "沉着"
    def weiweihou():
    global name======获取全局变量
    name = "冷静"======只有全局变量重新赋值为冷静,上一级变量不变还是沉着
    weiweihou()
    print(name)

    print(name)======刚娘
    weihou()=========沉着
    print(name)======冷静

    *****************************************************************

    name = "刚娘"

    def weihou():
    name = "沉着"
    def weiweihou():
    nonlocal name======>是指上一级变量
    name = "冷静"=======>上一级变量重新赋值为冷静
    weiweihou()
    print(name)

    print(name)=====刚娘
    weihou()========冷静
    print(name)======刚娘

     nonlocal 是指上一级变量

     **************************************

    count = 10
    def num():
    print(count)========》首先函数会先加载在内存中,运行函数时,查找不到定义的count
    count = 5/count +=1======>count赋值在后。应该移到print() 之前一行。
    num()==========>此函数运行会报错。原因如上

    修改上述代码:

    1)直接删除 count = 5/count +=1

    count = 10
    def num():
    print(count)
    num()======》10

    2)添加global name 即声明是全局变量,然后可修改

    count = 10
    def num():
    global count
    print(count)=====》全局变量,结果是10
    count = 5
    print(count)=====》此处将全局变量重新赋值为5,所以结果是5
    num()
    
    
  • 相关阅读:
    ESM CORR
    格式化用jad反编译混淆过的代码,能去大部分错误 (zhuanzai)
    Simple Event Correlation installation and configuration
    linux系统时间和硬件时钟问题(date和hwclock)
    float:center???
    [Android]Volley源代码分析(二)Cache
    iTOP-4412 开发板的 GPIO 是怎么操作的?
    Android手掌抑制功能的实现
    第十二周项目3-摩托车继承自行车和电动车
    面对苦难请勇敢
  • 原文地址:https://www.cnblogs.com/wode110/p/14426384.html
Copyright © 2020-2023  润新知