博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Day10
阅读量:4960 次
发布时间:2019-06-12

本文共 2082 字,大约阅读时间需要 6 分钟。

1、动态参数

*args 动态参数,万能参数

args接受的就是实参对应的所有位置参数,并将其放在元祖中

形参对应顺序

位置参数,*args,默认参数

def func(a,b,c,d,*args,e='男'):    print(a)    print(b)    print(c)    print(d)    print(args)    print(e)func(1,2,3,4,5,6,7,e='女')

#**kwargs:动态传参,将所有的关键字参数(无意义的)放到一个字典中

def func(a,b,c,**kwargs):    print(kwargs)func(1,2,r=4,b1=5,c1=6,c=7)
def func(a,b,c,d,*args,e='男',**kwargs):    print(a)    print(b)    print(c)    print(d)    print(args)    print(e)    print(kwargs)func(1,2,3,4,5,6,7,v=3,m=7,h=9,e='女')

最终顺序:位置参数,*args,默认参数,**kwargs

*魔法运用

def func(*args):    print(args)l1=[1,2,30]l2=[1,2,33,21,45,66]func(*l1,*l2)
def func(**kwargs):    print(kwargs)dic1={
'name1':'alex','age1':33}dic2={
'name':'老男孩','age':56}func(**dic1,**dic2)

在函数的调用执行时,

  *可迭代对象,代表打散(list,tuple,str,dict(键))将元素一一添加到args

  **字典,代表打散,将所有键值对放到一个kwargs字典中

在函数定义时,*args,**kwargs代表的是聚合

2、名称空间,临时名称空间

名称空间(命名空间),临时名称空间,内置名称空间

全局名称空间,名称空间,命名空间,全局命名空间

局部命名空间,临时名称空间,临时命名空间,局部名称空间

内置名称空间,所有的内置函数等存储的空间

input(),print(),len内置函数

加载顺序:

  内置名称空间--->全局名称空间--->(函数执行时)局部名称空间

取值顺序:

  函数执行时:局部名称空间--->全局名称空间--->内置名称空间

当执行函数的时候,他会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值的关系

随着函数的执行完毕,临时空间自动关闭

3、函数的嵌套

函数被调用的时候执行,代码从上至下依次执行,调用函数:函数里面从上至下依次执行

def func1():     print(333)     func2()     print(666)def func2():     print(444)     func3()def func3():     print(555)func1()print(222)  #111 333 444 555 666 222

globals(),locals()

a = 2b = 3def func1():    c = 5    d = 6    print(globals())  # 全局变量放在一个字典中    return locals()  # {'c': 5, 'd': 6}print(func1())# print(globals())  # 全局名称空间:所有变量# print(locals())  # 局部名称空间:所有变量

4、关键字global,nonlocal

global

1、在局部空间内,声明一个全局变量

def func1():    global name    name='老男孩'    print(name)func1()print(name)

2、在局部空间内改变一个全局变量

a=4def func1():    global a    a=5func1()print(a)

nonlocal

1、不能修改全局变量

a=4def func1():    nonlocal a    a=5func1()print(a)   #SyntaxError: no binding for nonlocal 'a' found

在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变

a=4def func1():    b=6    def func2():        b=666        print(b)   #666    func2()    print(b) #6func1()

 

 

 

转载于:https://www.cnblogs.com/a352735549/p/8671229.html

你可能感兴趣的文章
冒泡排序逐步详解相关笔记(一)
查看>>
sql server split 分割 两种方法
查看>>
spring学习之@ModelAttribute运用详解
查看>>
语义分析应用——美通社
查看>>
数据类型及操作
查看>>
提高前端开发效率的N种方法
查看>>
第一个Vus.js
查看>>
10款最好的Python IDE
查看>>
js如何获取样式?
查看>>
保护视力最佳电脑窗口颜色配置Win7、Vista和XP适用!转
查看>>
一道题的分析
查看>>
JS身份证验证
查看>>
1039 到底买不买 (20 分)
查看>>
关于CentOS下 yum包下载下的rpm包放置路径
查看>>
centos下添加epel源
查看>>
在SQLServer 2005附加SQLServer 2008数据库异常处理
查看>>
网易新闻侧滑抽屉效果(利用父子控制器实现)
查看>>
Ceph:pg peering过程分析
查看>>
4.高级特性(1)
查看>>
[leedcode 55] Jump Game
查看>>