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 相关文章推荐
记录Django开发心得
Jul 16 Python
轻松理解Python 中的 descriptor
Sep 15 Python
异步任务队列Celery在Django中的使用方法
Jun 07 Python
详解python里的命名规范
Jul 16 Python
Django组件之cookie与session的使用方法
Jan 10 Python
python字典的常用方法总结
Jul 31 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
python kafka 多线程消费者&手动提交实例
Dec 21 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
python异常处理、自定义异常、断言原理与用法分析
Mar 23 Python
Python类及获取对象属性方法解析
Jun 15 Python
python打包生成so文件的实现
Oct 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 empty() 检查一个变量是否为空
2011/11/10 PHP
php无限极分类递归排序实现方法
2014/11/11 PHP
Symfony的安装和配置方法
2016/03/17 PHP
javascript之更有效率的字符串替换
2008/08/02 Javascript
Javascript 面向对象特性
2009/12/28 Javascript
Jquery实现简单的动画效果代码
2012/03/18 Javascript
6款经典实用的jQuery小插件及源码(对话框/提示工具等等)
2013/02/04 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
js在IE与firefox的差异集锦
2014/11/11 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
javascript函数命名的三种方式及区别介绍
2016/03/22 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
浅谈angular2 组件的生命周期钩子
2017/08/12 Javascript
Nuxt.js 数据双向绑定的实现
2019/02/17 Javascript
使用apifm-wxapi快速开发小程序过程详解
2019/08/05 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
Python3 入门教程 简单但比较不错
2009/11/29 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
python写日志文件操作类与应用示例
2019/07/01 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
宿舍打麻将检讨书
2014/01/24 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
父亲节活动策划方案
2014/08/24 职场文书
财务管理专业自荐书
2014/09/02 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
计算机专业自荐信
2015/03/05 职场文书
MySQL数据库Innodb 引擎实现mvcc锁
2022/05/06 MySQL
安装harbor作为docker镜像仓库的问题
2022/06/14 Servers