一、函数的全局变量

1、什么是全局变量

顶着头开始写,没有任何缩进,在py文件的任何位置都能调用

#!/usr/bin/env  python
# _*_ coding:utf8 _*_
name="gouguoqi"name="gouguoqi"
def change_name():print ("111",(name))  #这里的name就是调用的全局变量
change_name()C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py111 gouguoqi

2、全局变量与局部变量的区别

name="gouguoqi"
def change_name():name="miaoye"   #局部变量print ("111",(name)) #这打印的是局部变量
change_name() #这里函数调用的是局部变量的name
print (name) #这里是是调用的函数外面的全局变量

C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py111 miaoyegouguoqi

3、global  关键字。想要在函数里面修改全局变量应该如何做

global name,就代表调用全局的变量name

专业的说法是global 后面的name是一个指针,一个内存地址,直接调用的那个内存地址

调用之后在子程序(局部程序)里面再次给name赋值的话就修改了全局变量name了

name="gouguoqi"
def change_name():global namename="miaoye"print ("111",(name))
change_name()
print (name)C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py111 miaoyemiaoye

全局作用域是全局

局部作用于是局部

变量调用的顺序是先找局部作用域,如果找不到,再往外层找,然后在找全局作用域

4、人性化的描述全局变量和局部变量

我们把全局变量当做是一个盒子,局部变量是这个盒子里面的小盒子。这些小盒子是同一个级别的,当程序运行的时候,是从上到下的运行方式,碰到函数之后,先不运行,继续往下走,直到调用函数的时候,才打开函数的子程序进行赋值运行然后出结果

当自己的盒子里面没有要寻找的变量的时候,就去盒子外面找,外面没有,再去全局找

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

如果函数中有golobe关键字,变量本质上就是全局的那个变量,可读取,可重新赋值

(4).1  如果函数中无global关键字,优先读取局部变量,能读取全局变量,无法对全局变

量重新赋值,但是对于可变类型,可以对内部元素进行操作,可以append remove clear

如果声明了局部变量,就调用局部变量

如果没有声明局部变量,就会调用全局变量

name="苍老师"  #这是真正的苍老师肉体
def gou():name = "娃娃"print ("我要搞",name)
def miao():name = "基"print ("我要搞",name)def bei():print ("我要搞",name)
gou()
miao()bei()C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py我要搞 娃娃我要搞 基我要搞 苍老师

如果变量是一个可变的类型,可以用方法来进行apped  remove  clear

name=["苍老师","波多野吉衣"]
def gou():name.append("基")print ("我要搞",name)
gou()print (name)C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py我要搞 ['苍老师', '波多野吉衣', '基']['苍老师', '波多野吉衣', '基']

(4).2如果函数中有global关键字,变量本质上就是全局的那个变量(指针),可读取,可赋值

在局部子程序调用全局变量(如果只是调用的话相当于做蜡像)

name="苍老师"  #这是真正的苍老师肉体def gou():global name #相当于做了一个苍老师的蜡像,跟本人一模一样print ("我要搞",name)
def miao():name = "基"print ("我要搞",name)
gou()
miao()C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py我要搞 苍老师我要搞 基

(4).3在局部变量中修改全局变量(修改的话相当于玩过了,感觉不过瘾,就换人了)

name="苍老师"  #这是真正的苍老师肉体
def gou():global name  #相当于玩了苍老师的肉体name = "波多野吉衣"  #感觉不是很好,把苍老师换成了波多野吉衣print ("我要搞",name)
def miao():print ("我要搞",name)#因为上面已经换人了,所以下面这人玩的也是波多野吉衣
gou()
miao()C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py我要搞 波多野吉衣我要搞 波多野吉衣

(4.)4  错误示例,局部变量也有name,全局变量也有name,并且全局变量在局部变量下面的位置

代码过程是,首先定义了一个全局变量,在局部子程序首先设置了相同名字的局部变量,再引用了全局变量,然后在去打印的时候,就不知道打印的到底是全局变量还是局部变量了,这样写是不行了,所以以后要养成一个习惯就是global一定要放到上面,再工作中我们定义全局变量最好用大写,局部变量小写,这样下面函数一调用 我们一看是大写的就知道是全局变量了

name="gouguoqi"
def change_name():name = "阿猫"global nameprint ("111",(name))
change_name()C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py111 阿猫D:/pyproject/day14函数/全局变量和局部变量.py:19: SyntaxWarning: name 'name' is assigned to before global declarationglobal name

(4).5函数中嵌套函数

函数的执行过程

name="北爷"   #1 第一步 定义全局变量name
def huangwei():  #2 第二步 定义一个函数,到49行第二步结束,把这些都放到内存里面加载上,并没有执行name = "黄伟" #4.1  定义局部变量nameprint (name) #4.2 打印局部变量name的值  "黄伟"def liuyang(): #4.3 定义一个函数,然后把这段到47行的代码又放入了内存,等待下次调用name = "刘洋" #4.4.1定义局部变量nameprint (name) #4.4.2打印出局部变量name "刘洋"def nulige():#4.4.3  又遇到def了。又把这一部分到45行的代码放入了内存,没有执行。等待下次调用name = "喵爷"#4.4.5.1定义了一个局部变量nameprint (name)#4.4.5.2打印局部变量name的值"喵爷"print (name)#4.4.4 打印name 刘洋nulige()#4.4.5 调用nulige这个函数,开始向上找liuyang()#4.4 调用liuyang这个函数,开始向上找print(name) #4.5 第五步 打印name 这时候的name的值是"黄伟"
print(name) #3 第三步  打印name 这时候name="北爷"
huangwei() #4 第四步 执行huangwei这个函数,开始向上找他
print(name)#5第五步 打印全局变量name

def gou():#1name = "狗"#2.1print (name)#2.2def mao():#2.3name = "猫"#2.4.1print (name)#2.4.2def zhu():#2.4.3name = "猪"#2.5.1.1print (name)#2.5.1.2zhu()#2.5.1print(name)#2.5.2mao()#2.4print (name)#2.5
gou()#2

C:\python35\python3.exe D:/pyproject/day14函数/hanshu.py狗猫猪猫狗

Name = "beiye"  #1  定义一个全局变量
def weihou(): #2 把从函数到143行的放入内存中,等待被调用name = "沉着"#4.1 定义一个局部变量name = 沉着def weiweihou(): #4.2 又遇到def  把到141行的代码再次放入内存,等待被调用global Name#4.3.1Name = "冷静"#4.3.2 把全局变量修改为 "冷静"weiweihou()#4.3 调用weiweihou ,开始向上找这个函数print(name)#4.4 打印下这个级别的name 是 沉着
print(Name)#3 打印一下全局变量 Name 等于 beiye
weihou()#4 调用函数 weihou,开始网上找 weihou这个函数
print(Name) #5 打印下全局变量  这时候全局变量是冷静了

C:\python35\python3.exe D:/pyproject/day14函数/hanshu.pybeiye沉着冷静

那我要是想修改我上一级的name呢,而不是修改全局的name呢该怎么做呢

nonloca 这个关键字就是修改上一级的变量的,我们来测试下,还是上面的例子,改变下

nonlocal  修改上一级的变量

Name = "beiye"  #1  定义一个全局变量
def weihou(): #2 把从函数到143行的放入内存中,等待被调用name = "沉着"#4.1 定义一个局部变量name = 沉着def weiweihou(): #4.2 又遇到def  把到141行的代码再次放入内存,等待被调用nonlocal name#4.3.1name = "冷静"#4.3.2 把上一级的name变量修改为 "冷静"weiweihou()#4.3 调用weiweihou ,开始向上找这个函数print(name)#4.4 打印下这个级别的name 是 沉着
print(Name)#3 打印一下全局变量 Name 等于 beiye
weihou()#4 调用函数 weihou,开始网上找 weihou这个函数
print(Name) #5 打印下全局变量  这时候全局变量是冷静了

C:\python35\python3.exe D:/pyproject/day14函数/hanshu.pybeiye冷静beiye

转载于:https://www.cnblogs.com/gouguoqilinux/p/9153381.html

python函数的 全局变量与局部变量相关推荐

  1. 对于局部变量_浅谈Shell函数中全局变量和局部变量

    Shell中函数的两种变量 这里的两种变量是针对于函数来讲的,非脚本. (1) 全局变量 在函数内部定义的变量 特点: 脚本中主代码可以获取. 注意!!!: 脚本中(函数外部)定义的变量,在本脚本的函 ...

  2. 在python中、关于全局变量和局部变量_在Python中,关于全局变量和局部变量,以下选项中描述不正确的是...

    [单选题]Python文本处理方向的第三方库是 [单选题]哪个选项的描述是正确的? [单选题]以下选项中属于Python语言中合法的二进制整数是 [单选题]以下说法错误的是: [单选题]下面属于B2B ...

  3. python 函数递归一次增加一次变量_python3--函数(函数,全局变量和局部变量,递归函数)...

    1.1函数 1.1.1什么是函数 函数就是程序实现模块化的基本单元,一般实现某一功能的集合. 函数名:就相当于是程序代码集合的名称 参数:就是函数运算时需要参与运算的值被称作为参数 函数体:程序的某个 ...

  4. python 函数递归一次增加一次变量_python3 --函数(函数,全局变量和局部变量,递归函数’)...

    1.1函数 1.1.1什么是函数 函数就是程序实现模块化的基本单元,一般实现某一功能的集合. 函数名:就相当于是程序代码集合的名称 参数:就是函数运算时需要参与运算的值被称作为参数 函数体:程序的某个 ...

  5. python中的全局变量与局部变量

    全局变量与局部变量两者的本质区别就是在于作用域,全局变量即在整个程序中,任何地方都可以访问.而局部变量,试着在函数内部声明的变量,当函数运行结束时,局部变量就会被内存释放. 例子: 1 name='z ...

  6. python_06 函数、全局变量与局部变量、函数递归

    函数 1.函数的定义: def 函数名(参数): #解释函数的功能 代码块 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行 ...

  7. Python中的全局变量与局部变量2

    from math import * import pandas as pd import numpy as np import matplotlib.pyplot as plt########### ...

  8. python中的全局变量和局部变量

    加上  global : 表示声明要修改全局变量的内存地址.

  9. [转载] python中全局变量和局部变量解析

    参考链接: Python中的全局变量和局部变量 python函数中可以访问全局变量但是不能给全局变量赋值,除非进行显式声明global a 比如定义了全局变量 a  在函数my_fun()中可以直接访 ...

最新文章

  1. C语言结构体-大小,对齐,填充,使用及其他
  2. 银角大王 python_小猿圈python学习-细讲数据类型-列表
  3. 自动化测试工具selenium python_Selenium自动化测试工具使用方法汇总
  4. pandas日常数据处理
  5. java获取元素创建时间,java – 动态顺序统计:在恒定时间内获取第k个元素?
  6. 特别推荐:开发者的10个最佳代码游乐场
  7. @程序员,你真得了解每天打交道的字节吗?
  8. git 入门操作指令
  9. GoogleCpp风格指南 8)格式 _part1
  10. [AutoCAD.Net][事件] AUTOCAD 选择对象后触发事件
  11. JavaScript学习总结
  12. 也许尘埃落地,我们才能心平气和谈谈抖音多闪和聊天宝
  13. 崩坏3服务器维护2月8号,崩坏3V3.4版本8月29日版本更新维护通知
  14. 统计奇偶个数c语言程序,C语言编程给定N个正整数,统计奇数和偶数的个数
  15. 加州大学伯克利分校计算机科学硕士,加州大学伯克利分校计算机硕士申请条件是什么?...
  16. 飞利浦e570有JAVA吗_飞利浦E570不仅仅是手机还是一款可通话的移动电源
  17. 智能家居系统中网关与服务器如何连接?
  18. 数学之美—细数 傅里叶变换 原理
  19. 【线性代数】一、行列式和矩阵
  20. Synology NAS群晖DS218play 运行内存测试

热门文章

  1. 人类一败涂地邀请好友一直显示连接服务器,人类一败涂地怎么邀请好友 局域网创建房间方法图文教学-游侠网...
  2. linux mac地址文件夹,android4.4.2系统的mac地址文件在哪个文件里面
  3. python 40位的数减个位数_Python——进制表示与转换
  4. 我的世界java无法安装包_手把手教你搭建java环境
  5. 关东升python从小白到大牛_《Python从小白到大牛》第3章 第一个Python程序
  6. 数据结构设计_合并多种疾病,如何设计数据结构?
  7. docker java mysql_Docker 搭建 MySQL 服务
  8. python数据获取手段包括哪些_python开发应用-本地数据获取方法
  9. 苹果几最好用_深度解析安卓手机和苹果手机到底有哪些区别,哪种手机最好用...
  10. delphi image 编辑器_照片拼图编辑器app下载-照片拼图编辑器下载 v1.0.0 安卓版