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同时兼容python2和python3的8个技巧分享
Jul 11 Python
Python单链表的简单实现方法
Sep 23 Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 Python
带你了解python装饰器
Jun 15 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
Python基于pycrypto实现的AES加密和解密算法示例
Apr 10 Python
Python解析并读取PDF文件内容的方法
May 08 Python
pyqt5 tablewidget 利用线程动态刷新数据的方法
Jun 17 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 Python
python实现将中文日期转换为数字日期
Jul 14 Python
python爬虫使用正则爬取网站的实现
Aug 03 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
DOMXML函数笔记
2006/10/09 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
提高php运行速度的一些小技巧分享
2012/07/03 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP实现十进制、二进制、八进制和十六进制转换相关函数用法分析
2017/04/25 PHP
srcElement表格样式
2006/09/03 Javascript
jQuery中add实现同时选择两个id对象
2010/10/22 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
JSON取值前判断
2014/12/23 Javascript
谈谈JavaScript异步函数发展历程
2015/09/29 Javascript
用瀑布流的方式在网页上插入图片的简单实现方法
2016/09/23 Javascript
AngularJS通过ng-Img-Crop实现头像截取的示例
2017/08/17 Javascript
Vue页面跳转动画效果的实现方法
2018/09/23 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
element中的$confirm的使用
2020/04/26 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
python冒泡排序算法的实现代码
2013/11/21 Python
python基础教程之Filter使用方法
2017/01/17 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
2017/06/01 Python
python中import reload __import__的区别详解
2017/10/16 Python
Python实现绘制双柱状图并显示数值功能示例
2018/06/23 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
Python猴子补丁Monkey Patch用法实例解析
2020/03/23 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
会计专业的自荐信
2013/12/12 职场文书
社区服务活动总结
2014/05/07 职场文书
保护环境倡议书100字
2014/05/19 职场文书
计生专干事迹
2014/05/28 职场文书
活动总结新闻稿
2014/08/30 职场文书
教学改革问题查摆整改措施
2014/09/27 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
建议书的格式及范文
2015/09/14 职场文书
(开源)微信小程序+mqtt,esp8266温湿度读取
2021/04/02 Javascript
php实现自动生成验证码的实例讲解
2021/11/17 PHP