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 29 Python
Python两个整数相除得到浮点数值的方法
Mar 18 Python
Python装饰器使用实例:验证参数合法性
Jun 24 Python
使用Python导出Excel图表以及导出为图片的方法
Nov 07 Python
Python图像灰度变换及图像数组操作
Jan 27 Python
人生苦短我用python python如何快速入门?
Mar 12 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
python实现kmp算法的实例代码
Apr 03 Python
使用python爬取抖音视频列表信息
Jul 15 Python
安装docker-compose的两种最简方法
Jul 30 Python
Python统计文本词汇出现次数的实例代码
Feb 27 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
德生PL330的评价与改造
2021/03/02 无线电
PHP将回调函数作用到给定数组单元的方法
2014/08/19 PHP
常用PHP框架功能对照表
2014/10/23 PHP
JQuery 小练习(实例代码)
2009/08/07 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
详解Vue组件之间通信的七种方式
2019/04/14 Javascript
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
vue2.0 获取从http接口中获取数据,组件开发,路由配置方式
2019/11/04 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
使用Python获取Linux系统的各种信息
2014/07/10 Python
python复制与引用用法分析
2015/04/08 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
python 实现目录复制的三种小结
2019/12/04 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
梅西百货官网:Macy’s
2020/08/04 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
小学教师自我鉴定范文
2014/03/20 职场文书
新教师培训心得体会
2014/09/02 职场文书
地心历险记观后感
2015/06/15 职场文书
贫困证明怎么写
2015/06/16 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers