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中的字典详细介绍
Sep 18 Python
Python实现Linux命令xxd -i功能
Mar 06 Python
Python探索之修改Python搜索路径
Oct 25 Python
Python实现识别手写数字 简易图片存储管理系统
Jan 29 Python
Python3导入自定义模块的三种方法详解
Apr 13 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
python3实现名片管理系统
Nov 29 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
详解python中的time和datetime的常用方法
Jul 08 Python
python tornado修改log输出方式
Nov 18 Python
基于python实现操作redis及消息队列
Aug 27 Python
Python实现粒子群算法的示例
Feb 14 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
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
PHP中文件缓存转内存缓存的方法
2011/12/06 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
PHP 读取文本文件内容并分页显示
2016/01/02 PHP
PHP实现批量删除(封装)
2017/04/28 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
用javascript将数据库中的TEXT类型数据动态赋值到TEXTAREA中
2007/04/20 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
jQuery登陆判断简单实现代码
2013/04/21 Javascript
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
js文本框输入内容智能提示效果
2015/12/02 Javascript
Java遍历集合方法分析(实现原理、算法性能、适用场合)
2016/04/25 Javascript
BootStrap使用file-input插件上传图片的方法
2016/09/05 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
如何理解Vue的v-model指令的使用方法
2018/07/19 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
python多线程编程中的join函数使用心得
2014/09/02 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
软件测试企业面试试卷
2016/07/13 面试题
教师求职推荐信范文
2013/11/20 职场文书
大学生专科学习生活的自我评价
2013/12/07 职场文书
自行车租赁公司创业计划书
2014/01/28 职场文书
网络工程师职业规划
2014/02/10 职场文书
大学学风建设方案
2014/05/04 职场文书
服务明星事迹材料
2014/12/29 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
支行行长岗位职责
2015/02/15 职场文书
2015年服务员工作总结
2015/04/08 职场文书
表彰大会新闻稿
2015/07/17 职场文书
Java常用工具类汇总 附示例代码
2021/06/26 Java/Android
python识别围棋定位棋盘位置
2021/07/26 Python