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判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
python中安装Scrapy模块依赖包汇总
Jul 02 Python
Python字符串格式化的方法(两种)
Sep 19 Python
python 剪切移动文件的实现代码
Aug 02 Python
python直接获取API传递回来的参数方法
Dec 17 Python
python画图的函数用法以及技巧
Jun 28 Python
基于Django实现日志记录报错信息
Dec 17 Python
tensorflow图像裁剪进行数据增强操作
Jun 30 Python
python使用建议技巧分享(三)
Aug 18 Python
Python Matplotlib绘图基础知识代码解析
Aug 31 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
Sep 05 Python
对PyTorch中inplace字段的全面理解
May 22 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
桌面中心(三)修改数据库
2006/10/09 PHP
在MongoDB中模拟Auto Increment的php代码
2011/03/06 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
Ajax::prototype 源码解读
2007/01/22 Javascript
javascript 异步页面查询实现代码(asp.net)
2010/05/26 Javascript
使用jQuery.Validate进行客户端验证(初级篇) 不使用微软验证控件的理由
2010/06/28 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
js实现的页面加载完毕之前loading提示效果完整示例【附demo源码下载】
2016/08/02 Javascript
jQuery使用ajax_动力节点Java学院整理
2017/07/05 jQuery
详解AngularJS1.x学习directive 中‘& ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
JavaScript利用键盘码控制div移动
2020/03/19 Javascript
vuex的使用步骤
2021/01/06 Vue.js
[44:04]OG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python对url格式解析的方法
2015/05/13 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
python机器学习实战之K均值聚类
2017/12/20 Python
Python处理文本换行符实例代码
2018/02/03 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
PYTHON如何读取和写入EXCEL里面的数据
2019/10/28 Python
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
JRE、JDK、JVM之间的关系怎样
2012/05/16 面试题
《春晓》教学反思
2014/04/20 职场文书
小学生安全责任书
2014/07/25 职场文书
主婚人致辞精选
2015/07/28 职场文书
排查MySQL生产环境索引没有效果
2022/04/11 MySQL