博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数---名称空间和作用域
阅读量:5228 次
发布时间:2019-06-14

本文共 1662 字,大约阅读时间需要 5 分钟。

今日新名词:1)globals()函数 查看全局作用域的内容;2)locals()函数 查看局部作用域的内容;3)global 方法 调用全局作用域的变量并获得修改权限;4)nonlocal 方法 调用局部作用域的变量并获得修改权限.

 

一.命名空间.

命名空间: 用来存放名字和值的关系的空间叫命名空间,我们的变量存储的时候就是存储再这片空间中

 

命名空间的分类: 1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...) 名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰 取值顺序:
1.局部命名空间  →→  2.全局命名空间  →→  3.内置命名空间

 

 

二.作用域.

作用域命名空间: 

作用域就是作用的范围.分为两类:1.全局作用域:  包含内置和全局命名间,在整个文件的任何位置都可以使用(遵循从上到下的顺序)2.局部作用域: 在函数内部可以使用

就是说,一个变量名如果是全局变量,那么它就是全局作用域; 

      如果是局部变量名(函数内),它就是局部作用域.

1)查看全局命名空间内容的方法:globals()

print(globals())  #打印全局作用域中的内容  包括(内置名称空间+全局名称空间)

2)查看局部命名空间(变量名和函数信息)的方法:locals()

print(locals())  #打印局部作用域中的内容

全局不允许查看调用局部的内容;但局部允许查看调用全局的内容

3)修改全局变量的方法

修改方法: global()    #修改后的变量,其他人再调用就是修改后的值

flag = Falsedef login(): #创建个函数    global flag   #获取修改这个变量的权限    uname = input("用户名:") #用户登陆    upwd = input("密码:")    if uname == "alex" and upwd == "123":        flag = True   #如果登陆成功就修改全局的变量    else:        flag = False  #如果不成功,保持原样
def fatie():   #发帖需求    if flag == True:   #只有上面登陆成功了,才会修改全局变量,才可以发帖        print("可以发帖")    else:   #查看到没有被修改就提示它,去登陆        print("滚去登录")login()  fatie()fatie()

4)修改局部变量的方法:

nonlocal()  #在局部作用域范围内,调用父级命名空间的变量,并获得修改的权限,从哪调就改哪的.局部找不到就报错

a= 50def funcl():    a = 10    def funce2():        nonlocal a  #永不找全局        a+=20        print("最里面的",a)    funce2()funcl() 输出结果为:最里面的 30

 

三、函数的嵌套

5)函数的嵌套:

就记住一点就行,def name() 只是创建了个函数,没有被调用就是空,摆设;只有name()才是调用函数,这个函数才会启动起来

 

6)函数的调用

1.如果指定了函数的调用者,那么函数的返回值就会给调用者;  如果没有指定调用者,那么就只会执行函数体里面的内容

2.函数名就相当于一个变量名,只有函数名加(),函数体才会执行.

3.函数调用变量值的顺序:先查看本域  →→ 父级域 →→ 全局作用域. 

转载于:https://www.cnblogs.com/lgw1171435560/p/10084376.html

你可能感兴趣的文章
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>
SpringAop与AspectJ
查看>>
Leetcode 226: Invert Binary Tree
查看>>
http站点转https站点教程
查看>>
解决miner.start() 返回null
查看>>
bzoj 2007: [Noi2010]海拔【最小割+dijskstra】
查看>>
BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
查看>>
定制jackson的自定义序列化(null值的处理)
查看>>
auth模块
查看>>
javascript keycode大全
查看>>
前台freemark获取后台的值
查看>>
log4j.properties的作用
查看>>
游戏偶感
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>