第十二篇 Python函数之全局变量&局部变量&递归函数

全局变量:在定义的时候,顶头写的,没有任何缩进的变量就是全局变量。

全局变量的特点:在当前文件里的任何地方都可以进行调用

局部变量:在子程序里定义的变量,就是局部变量。

子程序:比如.py文件里,写的函数就是个子程序。而这个函数里定义的变量就是局部变量

示例:全局变量

# 全局变量
name='alex'  

def change_name():
    print('change_name',name)  # 调用了全局变量

change_name()
# 结果
change_name alex

print(name)    #调的是全局变量
# 结果
alex

示例:函数体内定义局部变量

# 全局变量:全局作用域
name='alex'

def change_name():
    name='帅呆了'  # 局部变量:局部作用域
    print('change_name',name)  # 先在自己的子程序里找,调用了局部变量

# 举个生活中的例子,刚起床找手机,肯定现在自己卧室(函数)找,自己卧室找不到,才可能会到卧室(函数之外)之外去找。
# 所以,很好的理解,就是优先内部,然后外部;局部变量只能该函数自己使用(私心重),全局变量就比较大方,谁需要就可以拿去用

change_name()       
# 结果
change_name 帅呆了

print(name)    #调的是全局变量
# 结果
alex

示例:函数体内声明全局变量

# 全局变量
name='alex'

def change_name():
    global name     # 函数体内声明了全局变量
    name='帅呆了'    # 函数体内修改了全局变量的值
    print('change_name',name)  # 调用了全局变量

change_name()
# 结果
change_name 帅呆了

print(name)    #调的是全局变量,但是全局变量的值已经被修改
# 结果
帅呆了

更好的示例

如果函数的内容无global关键字,优先读取局部变量;如果没有局部变量,只能读取全局变量,无法对全局变量重新赋值,但于可变类型,是可以对内部元素进行操作

如果函数的内容有global关键字,函数内的变量就是全面局变量,可以读取,可以赋值

name = "桃花李"

def yangjian():
    global name # 已经声明,NAME就是全局的的那个变量
    print('我要', name)
    name = "小东北"  # 修改 全局的变量
    print('我要', name)

def qupengfei():
    name = ""
    print('我要搞', name)

yangjian()
qupengfei()

#结果
我要 桃花李
我要 小东北
我要搞 基

总结

扫描二维码关注公众号,回复: 1415015 查看本文章
全局变量变量名大写
局部变量变量名小写
下面的示例为了说明全局变量和局部变量的关系,都用的是大写。

# 如果函数的内容无global关键字:
# - 有声明局部变量
NAME = ["产品经理","廖波湿"] def qupengfei(): NAME = "自己" print('我要搞', NAME) qupengfei() # - 无声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): NAME.append('XXOO') print('我要搞', NAME) qupengfei() # 如果函数的内容有global关键字 # - 有声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): global NAME NAME = "自己" print('我要搞', NAME) qupengfei() # 错误示例, 全部变量放在了局部变量的下面,是不行的;所以,如果要什么全局变量,就尽量往前放。 NAME = ["产品经理","廖波湿"] def qupengfei(): NAME = "自己" global NAME print('我要搞', NAME) qupengfei() # - 无声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): global NAME NAME = ["阿毛"] NAME.append('XXOO') print('我要搞', NAME) qupengfei()

函数里也可以嵌套函数,执行顺序如下图所示

  

name='海风'
def huangwei():
    name = "黄伟"
    print(name)
    def liuyang():
        name = "刘洋"
        print(name)
        def nulige():
            name = '炉指花'
            print(name)
        print(name)
        nulige()
    liuyang()
    print(name)

huangwei()
# 结果
黄伟
刘洋
刘洋
炉指花
黄伟

name = "刚娘"

def weihou():
    name = "陈卓"
    def weiweihou():
        global name   # global,声明的是全局变量,
        name = "冷静"  # 此处修改的是最外层的全局变量,而不是它上一级同名变量
    weiweihou()
    print(name)
print(name)
weihou()
print(name)

#结果
刚娘
陈卓
冷静

name = "刚娘"

def weihou():
    name = "陈卓"
    def weiweihou():
        nonlocal name   # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
        name = "冷静"
    weiweihou()
    print(name)

print(name)
weihou()
print(name)

# 结果
刚娘
冷静
刚娘

猜你喜欢

转载自www.cnblogs.com/victorm/p/9126380.html