python之路 Day15(函数的全局变量和局部变量)

时间:2022-11-01 19:17:55
#!/usr/bin/env python
#-*- coding:utf-8 -*-
###########################函数的全局变量和局部变量##################################
#1.全局变量
#2.局部变量
# name = "zjm" #全局变量
# def change_name():
# name = "zjz" #局部变量
# print("change_name",name) #优先找局部域内的局部变量,找不到再找全局变量
#
# change_name() #调用函数,打印的name为函数内的局部变量
# print(name) #打印全局变量

#打印结果是: change_name zjz
# zjm
#3.如果要在函数内部改变全局变量的值,就要使用global关键字
# name = "zjm" #全局变量
# def change_name():
# global name #可在函数内部修改全局变量
# name = "zjz" #修改全局变量为 "zjz"
# print("change_name",name)
#
# change_name()
# print(name)
#结果:
# change_name zjz
# zjz
#4.关于全局变量和局部变量的一些规则
#4.1 二者的关系口语化理解:假设有一个大箱子,丢个苹果1(全局变量)进去,然后在大箱子里面再放置一个小箱子,小箱子(函数)
# 中有苹果2(局部变量),注意苹果1处于大箱子里面、小箱子的外面。此时,小箱子里有个老鼠,老鼠要吃苹果,那么优先吃自己小
#箱子里已有的苹果2,如果小箱子里没有苹果二,那么老鼠再咬破小箱子,去吃大箱子里的苹果一。
#即:在变量名相同的情况下,在执行调用函数时,优先使用函数内部的局部变量,如果函数内部没有局部变量,则调用全局变量。
# name = ["zzw","zjm"]
# def beautiful():
# name = "jzj"
# print("beautiful",name) #变量名相同,优先调用局部变量
#
# beautiful()
#结果:beautiful jzj
# name = ["zzw","zjm"]
# def beautiful():
# name.append("ykz")# #没找到局部变量,则调用全局变量,调用可对全局变量执行操作
# print("beautiful",name) #没有找到局部变量,则调用全局变量
#
# beautiful()
# 结果:beautiful ['zzw', 'zjm', 'ykz']
#4.2 例题分析
# NAME = "杠娘"
# def yangjian():
# global NAME #调用全局变量
# NAME = "小东北"#对全局变量在函数内部做修改 ”无任何讽刺意义,应用老师例题“
# print('我要搞', NAME)#打印的是修改后的全局变量
#
# def qupengfei():
# print('我要搞', NAME) #此刻,需要看接下来函数的调用顺序
#
# yangjian() #打印 我要搞 小东北
# qupengfei() #打印 我要搞 小东北 注意 根据程序从上到下执行,此时已经执行万第一个函数yangjian(),对全局变量做了修改,此刻
# #执行函数qupengfei,调用的变量实是以及修改后的全局变量"小东北"
# 结果:
# 我要搞 小东北
# 我要搞 小东北
# NAME = "杠娘"
# def yangjian():
# global NAME #调用全局变量
# NAME = "小东北"#对全局变量在函数内部做修改
# print('我要搞', NAME)#打印的是修改后的全局变量
#
# def qupengfei():
# print('我要搞', NAME) #此刻,需要看接下来函数的调用顺序
#
# qupengfei() #先调用函数qupengfei(),在函数中无局部变量,直接调用全局变量”杠娘“
# yangjian() #调用函数yangjian(),打印修改后的全局变量小东北
# 结果:
# 我要搞 杠娘
# 我要搞 小东北
#4.3 鉴于以上情况的混淆,因此:
######### 全局变量变量名大写
######## 局部变量变量名小写
# NAME = "zzw"
# def beautiful():
# name = "zjm"
# print("beautiful",name)
#
# beautiful()
#4.4 执行顺序例题
# NAME = '海风' # (1) 第一步
#
# def huangwei():
# name = "黄伟" #(3)
# print(name) #(4)
# def liuyang():
# name = "刘洋" #(6)
# print(name) #(7)
# def nulige():
# name = '沪指花' #(10)
# print(name) #(11)
# print(name) #(8)
# nulige() #(9)
# liuyang() #(5)
# print(name) #(12)
#
# huangwei() #(2)
#打印结果
# 黄伟
# 刘洋
# 刘洋
# 沪指花
# 黄伟
#4.5 关键字 nonlocal 指定上一级变量
# name = "刚娘" #1
#
# def weihou():
# name = "陈卓" #4
# def weiweihou():
# nonlocal name #6 # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止
# name = "冷静" #7
#
# weiweihou() #5
# print(name) #8
#
# print(name) #2
# weihou() #3
# print(name) #9
#结果:
# 刚娘
# 冷静
# 刚娘