Python动态参数/命名空间/函数嵌套/global和nonlocal


Posted in Python onMay 29, 2019

1. 函数的动态参数

 

1.1 *args 位置参数动态传参

def chi(*food):
 print("我要吃", food)
chi("大米饭", "小米饭")
结果:我要吃 ('大米饭', '小米饭') # 多个参数传递进去. 收到的内容是元组tuple

1.2 **kwargs 关键字参数动态传参

def func(**kwargs):
 print(kwargs)
func(a=1, b=2, c=3)
func(a=1, b=2)

结果:

{'a': 1, 'b': 2, 'c': 3}
{'a': 1, 'b': 2}

顺序:位置参数, *args, 默认值, **kwarg

 def func(*args, **kwargs):

pass

形参的位置*,**: 聚合

 

实参的位置*,**: 打散

def fun(*args):
 print(args)
lst = [1, 4, 7]
fun(lst[0], lst[1], lst[2])
fun(*lst) # 可以使用*把一个列表按顺序打散
s = "小短腿鲁班七号"
fun(*s) # 字符串也可以打散, (可迭代对象)

2. 命名空间

在python解释器开始执行之后, 就会在内存中开辟一个空间, 每当遇到一个变量的时候, 就把变量名和值之间的关系记录下来, 但是当遇到函数定义的时候, 解释器只是把函数名读入内存, 表示这个函数存在了, 至于函数内部的变量和逻辑, 解释器是不关心的. 也就是说一开始的时候函数只是加载进来, 仅此而已, 只有当函数被调用和访问的时候, 解释器才会根据函数内部声明的变量来进行开辟变量的内部空间. 随着函数执行完毕, 这些函数内部变量占用的空间也会随着函数执行完毕而被清空.

2.1 内置名称空间 -- 存放python解释器为我们提供的名字, list, tuple, str, int 等这些都是内置命名空间

 

2.2 全局名称空间 -- 我们直接在py文件中, 函数外声明的变量都属于全局命名空间

 

2.3 局部名称空间 -- 在函数中声明的变量会放在局部命名空间

加载顺序:内置命名空间 >>> 全局命名空间 >>> 局部命名空间(函数被执行的时候)

取值顺序: 局部命名空间 >>> 全局命名空间 >>> 内置命名空间

作用域:

作用域: 作用域就是作用范围, 按照生效范围来看分为 全局作用域和局部作用域

全局作用域: 包含内置命名空间和全局命名空间. 在整个文件的任何位置都可以使用(遵循从上到下逐行执行).

局部作用域: 在函数内部可以使用.

1. 全局作用域: 内置+全局
 

2. 局部作用域: 局部(函数被调用)

3. globals() 查看全局中的内容
 

4. locals() 查看当前作用域中的内容

a = 10
def func():
 a = 40
 b = 20
def abc():
 print("哈哈")
 print(a, b) # 这里使用的是局部作用域
 print(globals()) # 打印全局作用域中的内容
 print(locals()) # 打印局部作用域中的内容
func()

3. 函数嵌套

 

函数可以互相的嵌套

def fun1():
 print(111)
def fun2():
 print(222)
 fun1()
fun2()
print(111)
# 函数的嵌套
def fun2():
 print(222)
 def fun3():
  print(666)
 print(444)
 fun3()
 print(888)
print(33)
fun2()
print(555)

 4. global和nonlocal关键

 

global: 在局部访问全局中的内容

a = 100
def func():
 global a # 加了个global表示不再局部创建这个变量了. 而是直接使用全局的a
 a = 28
 print(a)
func()
print(a)

nonlocal: 在局部寻找外层函数中离他最近的那个变量

a = 10
def func1():
 a = 20
 def func2():
 nonlocal a
 a = 30
 print(a)
 func2()
 print(a)
func1()
# 结果:
# 加了nonlocal
# 30
# 30
# 不加nonlocal
# 30
# 20

总结

以上所述是小编给大家介绍的Python动态参数/命名空间/函数嵌套/global和nonlocal,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
python简单的函数定义和用法实例
May 07 Python
python邮件发送smtplib使用详解
Jun 16 Python
Python函数参数操作详解
Aug 03 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
pandas实现将日期转换成timestamp
Dec 07 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
python numpy数组复制使用实例解析
Jan 10 Python
Pycharm如何运行.py文件的方法步骤
Mar 03 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 Python
python2和python3在处理字符串上的区别详解
May 29 #Python
python TF-IDF算法实现文本关键词提取
May 29 #Python
详解Python odoo中嵌入html简单的分页功能
May 29 #Python
Python 3.8中实现functools.cached_property功能
May 29 #Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 #Python
Python安装与基本数据类型教程详解
May 29 #Python
python登录WeChat 实现自动回复实例详解
May 28 #Python
You might like
论建造顺序的重要性
2020/03/04 星际争霸
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
JavaScript DOM 学习第七章 表单的扩展
2010/02/19 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
Node.js 的异步 IO 性能探讨
2014/10/08 Javascript
jQuery显示和隐藏 常用的状态判断方法
2015/01/29 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
基于jquery编写的放大镜插件
2016/03/23 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
Vue+Node服务器查询Mongo数据库及页面数据传递操作实例分析
2019/12/20 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
[01:02]DOTA2上海特锦赛SHOWOPEN
2016/03/25 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
Python在图片中添加文字的两种方法
2017/04/29 Python
解决pandas 作图无法显示中文的问题
2018/05/24 Python
Tensorflow 查看变量的值方法
2018/06/14 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python getattr()函数使用方法代码实例
2020/08/10 Python
python中使用np.delete()的实例方法
2021/02/01 Python
Python之Sklearn使用入门教程
2021/02/19 Python
python线程优先级队列知识点总结
2021/02/28 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
心理健康教育制度
2014/01/27 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
创业计划书之密室逃脱
2019/11/08 职场文书
一篇文章带你搞懂Python类的相关知识
2021/05/20 Python
Python 阶乘详解
2021/10/05 Python
Python学习之迭代器详解
2022/04/01 Python