python函数篇:名称空间、作用域和函数的嵌套
一、名称空间:(有3类)
(1)内置名称空间(全局作用域)
(2)全局名称空间(全局作用域)
(3)局部名称空间(局部作用域)
关于名称空间的查询:
x=1
def func():
print('from func')
x=2
a=1
b=2
print(globals())#打印全局名称空间
print(locals())#打印局部名称空间 func()
执行结果是:
from func
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000026F9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x00000000028BB8C8>}
{'b': 2, 'a': 1, 'x': 2}
x=1
def func():
print('from func')
x=2
a=1
b=2
print(globals())#在局部打印全局
print(locals())#在局部打印局部 func()
a=globals()
print(a)#在全局打印全局
b=locals()
print(b)#在全局打印局部
print(a == b)#判断在全局打印局部和全局的结果是否一致
执行结果是:(验证了:查询局部变量,只能在局部使用,在全局使用时,局部变量的查询结果和全局变量的查询结果一致)
from func
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000005B9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x0000000001EBB8C8>}
{'b': 2, 'a': 1, 'x': 2}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000005B9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x0000000001EBB8C8>, 'a': {...}}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000000005B9550>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'E:/飞秋/徐圆圆课程视频/Python fullstack s4 基础篇-day21/day21/名称空间的查询.py', '__cached__': None, 'x': 1, 'func': <function func at 0x0000000001EBB8C8>, 'a': {...}, 'b': {...}}
True
全局与局部变量
x=1 #x=1为全局作用域
def foo():
x=20 #x=20为局部作用域
print(x)
foo() #函数执行时,首先去局部找x的变量值,故打印结果为20 print(x)#输出的x是全局变量内的x,函数内的x与全局的x无关,故打印结果为1
打印结果是:
20
1
总结:
关于函数的作用域找名称的查询顺序是:
先去局部找,局部没有的话,再去全局查找,全局没有的话,再去内置找(先局部在全局最后内置)
二、函数的嵌套:(2个方面)
(1)、函数的嵌套调用:(函数内调用之前定义好的函数)
示例:
# 函数的调用:
def my_max(x,y):
res=x if x>y else y#比较x和y的大小,取较大值
return res def my_max4(a,b,c,d):
res1=my_max(a,b)#调用上面的函数,将最大值取出
res2=my_max(res1,c)#调用上面的函数,将最大值取出后和c比较取最大值
res3=my_max(res2,d)#调用上面的函数,将最大值取出后和d比较取最大值
return res3
print(my_max4(1,2,3,4))
执行结果是:
4
(2)、函数的嵌套定义:(即函数内再定义函数)
示例:
def foo1():
x=1
print("foo1",x)
def foo2():
x=2
print("foo2",x)
def foo3():
x=3
print("foo3",x)
foo3()
foo2()
foo1()
执行结果是:
foo1 1
foo2 2
foo3 3
python函数篇:名称空间、作用域和函数的嵌套的更多相关文章
- Python记录9:函数4:名称空间作用域+闭包函数+装饰器
''' 一: 名称空间namespaces 名称空间就是存放名字与值绑定关系的内存空间 二: 名称空间分为三种 内置名称空间: 1. 特点: 存放是python解释器自 ...
- Day11名称空间,作用域,闭包函数
Day11 1.函数对象: ①可以被引用 ②可以作为另一个函数的参数 ③可以作为另一个函数的返回值0 ④可以被存储到容器类型中 2.函数嵌套: ①嵌套调用:在一个函数中调用了另一个函数 ...
- python12--字符串的比较 函数的默认值的细节 三元表达式 函数对象 名称空间 作用域 列表与字典的推导式 四则运算 函数的嵌套
复习 1.字符串的比较; 2.函数的参数; ******实参与形参的分类: 3.函数的嵌套调用: # 字符串的比较# -- 按照从左往右比较每一个字符,通过字符对应的ascii进行比较 ...
- python 函数的名称空间及作用域
一:名称空间 1:什么是名称空间: 名称空间即:储存名字与值的内存地址关联关系的空间 2.名称空间的分类: 内置名称空间:存储器自带的一些名称与值的对应关系,如:print,len,max等; 生命周 ...
- 《Python》 函数进阶和名称空间作用域
函数进阶: 一.动态参数:*args **kwargs *args是元祖形式,接收除去键值对以外的所有参数 # args可以换成任意变量名,约定俗成用args **kwargs接收的只是键值对的参数 ...
- day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义
复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...
- 函数的名称空间,函数的嵌套(global, nonlocal),函数名的运用
一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部 ...
- python基础——类名称空间与对象(实例)名称空间
python基础--类名称空间与对象(实例)名称空间 1 类名称空间 创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类的良好总属性:数据属性和函数属性 其中类 ...
- Python 类的名称空间和组合
一.Python类的名称空间 class Student(object): School = '北京大学' def __init__(self): pass stu1 = Student() stu1 ...
- Python入门之函数的嵌套/名称空间/作用域/函数对象/闭包函数
本篇目录: 一.函数嵌套 二.函数名称空间与作用域 三.函数对象 四.闭包函数 ============================================================ ...
随机推荐
- svn资源库url问题
今天连接svn资源库的时候一直出现 RA layer request failedsvn: Unable to connect to a repository at URL http://... sv ...
- Navicat oracle to postgresql ERR
可能的解决思路是设好源数据和目标数据库后,先建立表结构,然后修改表结构字段数据类型 参考 https://www.cnblogs.com/stephen-liu74/archive/2012/04/3 ...
- 测试理论- the conten of test plan
1 testing objects 测试对象 2 testing scope 测试范围 3 testing the frame (?) 4 the environment 5 reason for t ...
- 数论3——gcd&&lcm
gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm ( gcd就是gcd(a, b), ( •̀∀•́ ) ...
- [整理]修改git 默认编辑器为vim
git config --global core.editor vim
- 福大软工1816:Alpha(3/10)
Alpha 冲刺 (3/10) 队名:第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬(组长) 过去两天完成了哪些任务: 文字/口头描述: 1.学习qqbot库: 2.实 ...
- Spring Boot学习(一):入门篇
目录 Spring Boot简介 Spring Boot快速搭建 1 新建项目 2 运行项目 3 设置spring boot可以热部署(修改后端代码后,自动部署,不用手动部署) 3.1:配置pom.x ...
- DDD-领域驱动设计
识别领域事件 DDD战术篇:领域模型的应用 DDD战略篇:架构设计的响应力 DDD实战篇:分层架构的代码结构
- filebeat + logstash + elasticsearch + granfa
filebeat + logstash + elasticsearch + granfa https://www.cnblogs.com/wenchengxiaopenyou/p/9034213.ht ...
- powershell入门教程-v0.3版
powershell入门教程-v0.3版 来源 https://www.itsvse.com/thread-3650-1-1.html 参考 http://www.cnblogs.com/piapia ...