一、函数的全局变量

1、什么是全局变量

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

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

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

name="gouguoqi"
def change_name():
name="miaoye" #局部变量
print ("",(name)) #这打印的是局部变量
change_name() #这里函数调用的是局部变量的name
print (name) #这里是是调用的函数外面的全局变量 C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py 111 miaoye gouguoqi

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

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

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

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

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

全局作用域是全局

局部作用于是局部

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

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 name
print ("",(name))
change_name() C:\python35\python3.exe D:/pyproject/day14函数/全局变量和局部变量.py 111 阿猫 D:/pyproject/day14函数/全局变量和局部变量.py:19: SyntaxWarning: name 'name' is assigned to before global declaration global name

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

函数的执行过程

name="北爷"   #1 第一步 定义全局变量name
def huangwei(): #2 第二步 定义一个函数,到49行第二步结束,把这些都放到内存里面加载上,并没有执行
name = "黄伟" #4.1 定义局部变量name
print (name) #4.2 打印局部变量name的值 "黄伟"
def liuyang(): #4.3 定义一个函数,然后把这段到47行的代码又放入了内存,等待下次调用
name = "刘洋" #4.4.1定义局部变量name
print (name) #4.4.2打印出局部变量name "刘洋"
def nulige():#4.4.3 又遇到def了。又把这一部分到45行的代码放入了内存,没有执行。等待下次调用
name = "喵爷"#4.4.5.1定义了一个局部变量name
print (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():#
name = "狗"#2.1
print (name)#2.2
def mao():#2.3
name = "猫"#2.4.1
print (name)#2.4.2
def zhu():#2.4.3
name = "猪"#2.5.1.1
print (name)#2.5.1.2
zhu()#2.5.1
print(name)#2.5.2
mao()#2.4
print (name)#2.5
gou()# 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.1
Name = "冷静"#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.py beiye 沉着 冷静

那我要是想修改我上一级的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.1
name = "冷静"#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.py beiye 冷静 beiye

python函数的 全局变量与局部变量的更多相关文章

  1. JavaScript 引入方式 语言规范 语言基础 数据类型 常用方法 数组 if_else 比较运算符 for while 函数 函数的全局变量和局部变量 {Javascript学习}

    Javascript学习 JavaScript概述 ECMAScript和JavaScript的关系 1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript ...

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

    全局变量:在定义的时候,顶头写的,没有任何缩进的变量就是全局变量. 全局变量的特点:在当前文件里的任何地方都可以进行调用 局部变量:在子程序里定义的变量,就是局部变量. 子程序:比如.py文件里,写的 ...

  3. Python学习日记(五)——初识函数(set、深浅拷贝、三目运算、函数、全局变量和局部变量)

    基本数据类型补充 set set集合,是一个无序且不重复的元素集合 #创建 s = {11,22,33,44}#类似字典 s = set() #转换 l = (11,22,33,44) s1 = se ...

  4. Python学习(六)—— 函数、全局变量与局部变量

    函数 函数的定义 def test(x): "The function definition" x += 1 return x def:定义函数的关键字 test:函数名 ():内 ...

  5. python基础五(函数、全局变量和局部变量)

    一.全局变量和局部变量 全局变量,即可以在当前文件所有地方都可使用的变量,一次修改,整个文件都影响.如果函数体内部使用全局变量,要先声明global 局部变量,只能在函数体内部使用,除了函数体就不可使 ...

  6. python3--函数(函数,全局变量和局部变量,递归函数)

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

  7. Python中的全局变量与局部变量的区别

    全局变量与局部变量两者的本质区别就是在于作用域 用通俗的话来理解的话, 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地 ...

  8. JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用

    “JavaScript设计得最出色的就是它的函数的实现.” -- <JavaScript语言精粹> 函数包含一组语句,它们是JS的基础模块单元,用于指定对象的行为.一般来说,所谓编程,就是 ...

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

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

随机推荐

  1. Daily Scrum (2015/10/26)

    今晚由于我们组成员就团队Week5作业的个人贡献分开会协商,所以把今天的编码工作往后延迟了.考虑到有些成员代码还没理解够,正好TFS的代码阅读分配的工作时间还没进行完,所以在会议之后我们让成员回寝自由 ...

  2. Daily Scrumming 2015.10.22(Day 3)

    今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 学习rails ActiveRecord 购买.注册域名 继续学习rails ActiveRecord 数 ...

  3. 《Spring2之站立会议2》

    <Spring2之站立会议2> 昨天,模仿着资料把客户端和服务器端的代码写了一下: 今天,继续找本机的端口号和逐步深入理解代码含义: 遇到的问题,在理解时,对一些知识理解还是比较朦胧,一知 ...

  4. 《Spring1之第四次站立会议》

    <第四次站立会议> 昨天:我把小组成员找到的写关于登录界面的代码加到了我的项目工程里,并对它有了一定的了解,已经能够编译运行了,得到了登陆的界面: 今天:试着做了一下主框架里的在线人数的显 ...

  5. Android Toast的多功能封装——Android开发之路1

    Android封装实现各种功能的Toast GitHub地址:https://github.com/SibreiaDante/ToastUtils 效果图: 方法封装如下: showSingleton ...

  6. 网页访问过程(基于CDN)

    1. 全局负载均衡(基于DNS) 如果有多台 WEB 服务器同时为一个域名提供服务时,即一条 URL 对应多个 IP 地址,那么该 URL 的权威域名服务器可能会根据该 URL 解析出多个 IP 地址 ...

  7. 【转】SQL SERVER 中 sp_rename 用法

    因需求变更要改表的列名,平常都是跑到Enterprise manager中选取服务器->数据库->表,然后修改表,这样太麻烦了,查了一下,可以用script搞定,代码如下: EXEC sp ...

  8. SEO优化之HTML代码优化最重要的5个标签

    众所周知,HTML代码一直是搜索引擎抓取的重点.搜索引擎会将HTML中的某些元素标签作为影响网页排名的重要依据 在我们之前的文章中也或多或少地向大家介绍了有关HTML代码的优化技巧,接下来将系统地讲解 ...

  9. RPM 安装oracle18c 修改字符集的方法

    1. 安装完preinstall 和 oracle 的rpm版本之后 到这个界面 rpm -ivh oracle-database-preinstall-18c-.el7.x86_64.rpm war ...

  10. [转帖] Oracle 关闭自动收集统计信息

    --关闭自动统计信息 https://blog.csdn.net/royzhang7/article/details/51172556 明天再仔细看一下. select client_name,sta ...