一丶动态参数

  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关键的更多相关文章

  1. Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法

    Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global以及nolocal的用法 目录 Python函数02/函数的动态参数/函数的注释/名称空间/函数的嵌套/global ...

  2. 百万年薪python之路 -- 函数的动态参数练习

    1.继续整理函数相关知识点. 2.写函数,接收n个数字,求这些参数数字的和.(动态传参) def func(*args,**kwargs): num_sum = 0 num_dic = [] num ...

  3. 百万年薪python之路 -- 函数的动态参数

    1.函数的动态参数 1.1 动态接收位置参数 在参数位置用*表示接受任意参数 def eat(*args): print('我想吃',args) eat('蒸羊羔','蒸熊掌','蒸鹿尾儿','烧花鸭 ...

  4. Python开发基础-Day11内置函数补充、匿名函数、递归函数

    内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: divmod(a, b) #a.b为数字,a为除数,b ...

  5. python基础之内置函数补充、匿名函数、递归函数

    内置函数补充 python divmod()函数:把除数和余数运算结果结合起来,返回一个包含商和余数的元组(a // b, a % b) 语法: 1 divmod(a, b) #a.b为数字,a为除数 ...

  6. php匿名函数和可变参数函数

    php匿名函数和可变参数函数 简介 直接上代码了: <?php $test1 = function($value) { echo $value; }; $test1('HelloWorld'); ...

  7. python 函数的动态参数 命名空间,作用域以及函数嵌套,global和nonlocal (重点)

    *** 坚持坚持,即使你不太强*** 1.函数的动态传参 2.函数的命名空间及作用域 3.函数嵌套 4.global和nonlocal关键字 一.函数的动态传参 1. *args: 位置参数动态传参, ...

  8. python day- 10 动态参数 函数的嵌套 命名空间和作用域 global和nolocal

    一.动态参数: 动态参数是形参的一类 分为:动态位置参数(* + 函数名)表示 调用后返回的是元祖 动态关键字参数(** + 函数名)表示 形参的排列顺序: 位置参数     >   动态位置参 ...

  9. python27期day10:函数的动态参数、函数的注释、函数的名称空间、函数的嵌套、global(修改全局的)、nonlocal(修改局部的)、函数名的第一类对象及使用、作业题。

    1.动态参数的作用: 能够接收不固定长度参数 位置参数过多时可以使用动态参数 * args是程序员之间约定俗称(可以更换但是不建议更换) * args获取的是一个元组 ** kwargs获取的是一个字 ...

随机推荐

  1. HAOI2006受欢迎的牛——缩点

    题目:http://poj.org/problem?id=2186 本题是缩点模板题,将强连通分量缩成一个点,从而形成一个有向无环图,当仅有一个出度为0的点时答案即此点的大小,否则无解. 代码如下: ...

  2. C++常见错误总结

    1.  error C2871: 'std' : does not exist or is not a namespace 原来 C++有两个不同版本的头文件.引入名字空间这个概念以前编译器用的是#i ...

  3. 百度地图API的第一次接触——右键菜单

    1.初始化地图 var map = new BMap.Map("container"); var point = new BMap.Point(116.404, 39.915); ...

  4. C# Unit Test 备注

    1. UT工程的编译一定要让依赖的dll在同一目录,即和测试目标dll运行的环境一样. 比如 Demo-UT测试Demo工程, 则Demo工程依赖的所有dll必须和Demo输出的可执行环境Demo.d ...

  5. js 元素的各种宽度高度

    一.属性 1.只读属性 所谓的只读属性指的是DOM节点的固有属性,该属性只能通过js去获取而不能通过js去设置,而且获取的值是只有数字并不带单位的(px,em等),如下: 1)clientWidth和 ...

  6. tp框架下,数据库和编辑器都是utf-8, 输出中文却还是乱码

    输出: array(2) { [0]=> array(4) { ["id"]=> string(1) "1" ["user"]= ...

  7. Gym - 101142J Java2016 (构造)

    题意:给定一个数字,让你构造成一些表达式,最后结果是该数字的概率要大于50%. 析:我们可以把一个数分解是2的多少次幂,然后加起来就好. 代码如下: #pragma comment(linker, & ...

  8. GridView ,后台修改 跟新完毕,前端 未跟新处理

    //Response.Redirect(Request.Url.ToString());//重新定位 GridView_dept.DataBind(); //重新绑定都可以

  9. Working Experience - WPF XAML 报错 - 命名空间中不存在该名称

    问题 编辑 xaml 时,VS 提示一个存在的类不存在(如:命名空间"xxx"中不存在"xxx"名称). 运行环境 Windows 版本:Window 10 V ...

  10. IE浏览器弹出窗口

    //弹出一个对话框 参数的顺序: url, iWidth, iHeight, vArguments function openDialog() { var url, len = arguments.l ...