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多线程学习资料
Dec 19 Python
详解Python中DOM方法的动态性
Apr 11 Python
在Python的列表中利用remove()方法删除元素的教程
May 21 Python
Python heapq使用详解及实例代码
Jan 25 Python
python爬虫爬取快手视频多线程下载功能
Feb 28 Python
PHP实现发送和接收JSON请求
Jun 07 Python
实践Vim配置python开发环境
Jul 02 Python
Python中函数的基本定义与调用及内置函数详解
May 13 Python
浅析使用Python搭建http服务器
Oct 27 Python
Python xlrd excel文件操作代码实例
Mar 10 Python
python中怎么表示空值
Jun 19 Python
Python迭代器协议及for循环工作机制详解
Jul 14 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产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
Javascript hasOwnProperty 方法 & in 关键字
2008/11/26 Javascript
学习面向对象之面向对象的基本概念:对象和其他基本要素
2010/11/30 Javascript
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
深入领悟JavaScript中的面向对象
2013/11/18 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
2015/09/09 Javascript
jQuery实现的超酷苹果风格图标滑出菜单效果代码
2015/09/16 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
jQuery实现的简单悬浮层功能完整实例
2017/01/23 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
详解cordova打包成webapp的方法
2017/10/18 Javascript
JS面向对象编程基础篇(一) 对象和构造函数实例详解
2020/03/03 Javascript
python基础教程之python消息摘要算法使用示例
2014/02/10 Python
python多线程抓取天涯帖子内容示例
2014/04/03 Python
python实现字符串和字典的转换
2018/09/29 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
解决python xx.py文件点击完之后一闪而过的问题
2019/06/24 Python
Python的Lambda函数用法详解
2019/09/03 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
使用Python测试Ping主机IP和某端口是否开放的实例
2019/12/17 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
python上传时包含boundary时的解决方法
2020/04/08 Python
python如何实现递归转非递归
2021/02/25 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
Bally美国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/18 全球购物
3.12植树节活动总结2014
2014/03/13 职场文书
就业推荐表自我评价范文
2015/03/02 职场文书
python之基数排序的实现
2021/07/26 Python