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 list使用示例 list中找连续的数字
Jan 27 Python
python实现数通设备端口监控示例
Apr 02 Python
Python中获取网页状态码的两个方法
Nov 03 Python
Python如何实现守护进程的方法示例
Feb 08 Python
Python之py2exe打包工具详解
Jun 14 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
在python中安装basemap的教程
Sep 20 Python
Python 内置函数globals()和locals()对比详解
Dec 23 Python
浅谈tensorflow 中的图片读取和裁剪方式
Jun 30 Python
Python 解析xml文件的示例
Sep 29 Python
linux mint中搜狗输入法导致pycharm卡死的问题
Oct 28 Python
Django多个app urls配置代码实例
Nov 26 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
聊天室php&mysql(一)
2006/10/09 PHP
PHP zip扩展Linux下安装过程分享
2014/05/05 PHP
PHP生成器简单实例
2015/05/13 PHP
php实现的简单中文验证码功能示例
2017/01/03 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
Dom 是什么的详细说明
2010/10/25 Javascript
JS维吉尼亚密码算法实现代码
2010/11/09 Javascript
Jquery进度条插件 Progress Bar小问题解决
2011/07/12 Javascript
IE6/7 and IE8/9/10(IE7模式)依次隐藏具有absolute或relative的父元素和子元素后再显示父元素
2011/07/31 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
Node.js复制文件的方法示例
2016/12/29 Javascript
Vue form表单动态添加组件实战案例
2019/09/02 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
Python中用于计算对数的log()方法
2015/05/15 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
SQLite3中文编码 Python的实现
2017/01/11 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
django 类视图的使用方法详解
2019/07/24 Python
使用Django清空数据库并重新生成
2020/04/03 Python
您的网上新华书店:文轩网
2016/08/24 全球购物
鲜果饮品店创业计划书
2014/01/21 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
四查四看整改措施
2014/09/19 职场文书
房屋租赁合同协议书范本
2014/10/19 职场文书
竞聘报告优秀范文
2014/11/06 职场文书
接收函格式
2015/01/30 职场文书
2015年卫生局工作总结
2015/07/24 职场文书
公司出差管理制度范本
2015/08/05 职场文书
2016年国庆节67周年活动总结
2016/04/01 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python