函数补充:动态参数,函数嵌套,global与nonlocal关键
一丶动态参数
1.*args 位置参数,动态传参
- def func(*food):
- print(food)
- print(func("米饭","馒头","福建人","犹太人"))
将所有的位置参数都赋给*food
2.**kwargs 关键字参数,动态传参
- # 关键字的动态传参
- def eat(**food):
- print(food)
- print(eat(广东人= "福建人",goodeat = "饼干",我的天="飞天"))
将关键字参数,以字典的形式赋给**food
3.默认参数与动态参数的关系
如果以位置参数,关键字参数,默认参数排列会报错,我们改一下默认参数的位置,发现只有在位置参数后面,关键字参数前面,默认参数才不会报错
- def func(*name,gender="男",**hobby):
- print(name,hobby,gender)
- print(func("周杰伦","谢霆锋","吴京",hobby1="看电影",hobby2="唱歌"))
总结一下顺序:
位置参数>*args>默认值参数>**kwargs
如果想接收所有参数,可以用*arge 和 **kwargs组合
- def trans_para(*args,**kwargs):
- print(args)
- print(kwargs)
- trans_para("jinxin",12,[1,2,3,4],[3,4,],(1,4,7),{"a":"","c":456},country="china")
二丶命名空间
在python解释器开始执行之后,就会在内存中开辟一个空间,每当遇到一个变量的时候,就把变量名和值之间的关系记录下来,但是当遇到函数定义的时候,解释器只是把函数名读入内存,表示这个函数存在了,至于函数内部的变量和逻辑,解释器是不关心的,也就是说一开始的时候函数只是加载进来,仅此而已,只有当函数被调用和访问的时候,解释器才会根据函数内部声明的变量来进行开辟变量的内部空间,随着函数执行完毕,这些函数内部变量占用的空间也会随着函数的执行完毕而被清空.
- a = 10
- def func():
- a = 20 #当函数运行完毕,函数里面的a=20所占空间自动释放,不存在了
- func()
- print(a) #输出的是10
我们给存放名字和值的关系的空间起一个名字叫:命名空间,我们的变量在存储的时候就是存储在这片空间中的.
命名空间分类:
1.全局命名空间:--->我们直接在py文件中,函数外声明的变量都属于全局命名空间
2.局部命名空间---->在函数中声明的变量会放在局部命名空间
3.内置命名空间:---->存放在python解释器为我们提供的名字,list,tuple,str,int这些都是内置命名空间
加载顺序:
1.内置命名空间
2.全局命名空间
3.局部命名空间(函数被执行的时候)
取值顺序:
1.局部命名空间
2.全局命名空间
3.内置命名空间
- a = 10
- def func():
- a = 20
- print(a) #输出的是20
- func()
- print(a) #输出的是10
2.作用域
作用域:作用域就是作用范围,按照生效范围来看分为 全局作用域和局部作用域
全局作用域:包含内置命名空间和全局命名空间,在整个文件的任何位置都可以使用(遵循从上到下逐行执行)
局部作用域:在函数的内部可以使用.
作用域命名空间:
1.全局作用域:全局命名空间 + 内置命名空间
2.局部作用域:局部命名空间
我们可以通过globals()函数来查看全局作用域中的内容,也可以通过locals()来查看局部作用域中的变量和函数信息
- a = 10
- def func():
- a = 20
- b = 10
- def abc():
- print("哈哈")
- print(a,b) #这里a,b都是使用的局部作用域
- print(globals()) #打印全局作用域中的内容
- print(locals()) #打印局部作用域中的内容
- func()
三丶函数的嵌套
1.只要遇见了()就是函数的调用,如果没有()就不是函数的调用
2.函数的执行顺序
- #函数的嵌套
- def fun2():
- print(222)
- def fun3():
- print(666)
- print(444)
- fun3()
- print(888)
- print(333)
- fun2()
- print(555)
四丶关键字 global和nonlocal
global表示不再使用局部作用域中的内容了,而改用全局作用域中的变量
- a = 10
- def func():
- global a
- a = 20
- print(a)
- func()
- print(a)
nonlocal表示在局部作用域中,调用父级命名空间中的变量
- a = 10
- def func1():
- a = 20
- def func2():
- nonlocal a
- a = 30
- print(a)
- func2()
- print(a)
- func1()
函数补充:动态参数,函数嵌套,global与nonlocal关键的更多相关文章
- Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法
Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...
- 百万年薪python之路 -- 函数的动态参数练习
1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ...
- 百万年薪python之路 -- 函数的动态参数
1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...
- Python开发基础-Day11内置函数补充、匿名函数、递归函数
内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: divmod(a, b) #a.b为数字,a为除数,b ...
- python基础之内置函数补充、匿名函数、递归函数
内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数 ...
- php匿名函数和可变参数函数
php匿名函数和可变参数函数 简介 直接上代码了: <?php $test1 = function($value) { echo $value; }; $test1('HelloWorld'); ...
- python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)
*** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...
- python day- 10 动态参数 函数的嵌套 命名空间和作用域 global和nolocal
一.动态参数: 动态参数是形参的一类 分为:动态位置参数(* + 函数名)表示 调用后返回的是元祖 动态关键字参数(** + 函数名)表示 形参的排列顺序: 位置参数 > 动态位置参 ...
- python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。
1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...
随机推荐
- BZOJ1568:[JSOI2008]Blue Mary开公司
浅谈标记永久化:https://www.cnblogs.com/AKMer/p/10137227.html 题目传送门:https://www.lydsy.com/JudgeOnline/proble ...
- linux工具————fish shell
1.说明 fish is a fully-equipped command line shell (like bash or zsh) that is smart and user-friendly. ...
- java之装箱拆箱
参考http://how2j.cn/k/number-string/number-string-wrap/22.html 封装类 所有的基本类型,都有对应的类类型 比如int对应的类是Integer ...
- C# 中的迭代器 yield关键字 提高性能和可读性
展示一个例子 IList<string> FindBobs(IEnumerable<string> names) { var bobs = new List<string ...
- Manacher's Algorithm 马拉车算法(最长回文串)
这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法,由一个叫Manacher的人在1975年发明的,这个方法的最大贡献是在于将时间复杂度提升到了线性,这 ...
- GridView ,后台修改 跟新完毕,前端 未跟新处理
//Response.Redirect(Request.Url.ToString());//重新定位 GridView_dept.DataBind(); //重新绑定都可以
- mysql由浅入深探究(三)----mysql增删改查
通过前两节的学习,目前我们已经完成了数据库的安装,用户的创建及权限操作等相关操作,但是我们似乎我们只是隐隐约约接触到了数据库的一些基本操作,对数据库表还是比较陌生.那么现在我们呢开始了解一些数据库的一 ...
- jmeter压力测试报告
XXX压力测试报告 时间:2015-08-04 测试人员:xxx 目录 XXX压力测试报告... 1 一 测试 ...
- ue4 htcvivi简单配置
1 主角视口:相机与控制器挂载 Chaperone设置,主角bp上加上SteamVRChaperone用于提示用户可用区域边界 MotionController1里面选项设置为Right右手,然后下边 ...
- cinder存储服务
一.cinder 介绍: 理解 Block Storage 操作系统获得存储空间的方式一般有两种: 1.通过某种协议(SAS,SCSI,SAN,iSCSI 等)挂接裸硬盘,然后分区.格式化.创建文件系 ...