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 相关文章推荐
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
详细解析Python中的变量的数据类型
May 13 Python
Python 登录网站详解及实例
Apr 11 Python
Python 多进程和数据传递的理解
Oct 09 Python
tornado 多进程模式解析
Jan 15 Python
酷! 程序员用Python带你玩转冲顶大会
Jan 17 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
用Python编写一个高效的端口扫描器的方法
Dec 20 Python
Django之模板层的实现代码
Sep 09 Python
python将字母转化为数字实例方法
Oct 04 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
NumPy统计函数的实现方法
Jan 21 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
PHP5常用函数列表(分享)
2013/06/07 PHP
PHP 微信支付类 demo
2015/11/30 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
firefox下input type="file"的size是多大
2011/10/24 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
vue自定义一个v-model的实现代码
2018/06/21 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
微信分享invalid signature签名错误踩过的坑
2020/04/11 Javascript
Vue2.x和Vue3.x的双向绑定原理详解
2020/11/05 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
深入解析Python中的__builtins__内建对象
2016/06/21 Python
Python实现好友全头像的拼接实例(推荐)
2017/06/24 Python
Python构建网页爬虫原理分析
2017/12/19 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
python中bytes和str类型的区别
2019/10/21 Python
浅谈Python协程
2020/06/17 Python
Python实现疫情地图可视化
2021/02/05 Python
北京银河万佳Java面试题
2012/03/21 面试题
运动会100米解说词
2014/01/23 职场文书
公务员更新知识培训实施方案
2014/03/31 职场文书
《去年的树》教学反思
2014/04/11 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
安全资料员岗位职责范本
2014/06/28 职场文书
新店开张活动方案
2014/08/24 职场文书
女生抽烟检讨书
2014/10/05 职场文书
2016党员干部政治学习心得体会
2016/01/23 职场文书
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python