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中声明只包含一个元素的元组数据方法
Aug 25 Python
Python中规范定义命名空间的一些建议
Jun 04 Python
一文带你了解Python中的字符串是什么
Nov 20 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
画pytorch模型图,以及参数计算的方法
Aug 17 Python
解决springboot yml配置 logging.level 报错问题
Feb 21 Python
Python Selenium安装及环境配置的实现
Mar 17 Python
基于Python下载网络图片方法汇总代码实例
Jun 24 Python
python中绕过反爬虫的方法总结
Nov 25 Python
使用BeautifulSoup4解析XML的方法小结
Dec 07 Python
Python音乐爬虫完美绕过反爬
Aug 30 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
php输入流php://input使用示例(php发送图片流到服务器)
2013/12/25 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
2016/09/30 PHP
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
2010/06/19 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
actionscript与javascript的区别
2011/05/25 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
jquery中的 $("#jb51")与document.getElementById("jb51") 的区别
2011/07/26 Javascript
2014 HTML5/CSS3热门动画特效TOP10
2014/12/07 Javascript
JS中处理时间之setUTCMinutes()方法的使用
2015/06/12 Javascript
JavaScript+html5 canvas实现图片破碎重组动画特效
2016/02/22 Javascript
JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法
2016/04/18 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
基于node打包可执行文件工具_Pkg使用心得分享
2018/01/24 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
浅谈nuxtjs校验登录中间件和混入(mixin)
2020/11/06 Javascript
Python的ORM框架中SQLAlchemy库的查询操作的教程
2015/04/25 Python
Python采用Django开发自己的博客系统
2020/09/29 Python
解决Python 中英文混输格式对齐的问题
2018/07/16 Python
opencv3/C++ 平面对象识别&透视变换方式
2019/12/11 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
python爬取youtube视频的示例代码
2021/03/03 Python
CSS3关于z-index不生效问题的解决
2020/02/19 HTML / CSS
使用HTML5在网页中嵌入音频和视频播放的基本方法
2016/02/22 HTML / CSS
英国顶级家庭折扣店:The Works
2017/09/06 全球购物
标签和贴纸印刷:Lightning Labels
2018/03/22 全球购物
会计职业生涯规划范文
2014/01/04 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
宿舍标语大全
2014/06/19 职场文书
小学班主任事迹材料
2014/12/17 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
2019年大学生暑期社会实践调查报告模板
2019/11/07 职场文书