python 的基础 学习 12天,函数

1,   *args   动态 参数,万能参数

*args就是接受实参对应的剩余的位置参数,并将其放在元组中。在定义函数时,*args代表的是聚合。

def func(*args):
    print(args)
func(1,34,'jdai',5,56,66)#(1, 34, 'jdai', 5, 56, 66)
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,10,5,6,7,8,e='')#1
2
3
4
(5, 10, 5, 6, 7, 8)

2,**kwargs,动态传参,只接受关键字参数,将所有的关键字参数(无意义的)放到一个字典中。

最终顺序(形参角度)

def func(a,b,c,**kwargs):
    print(kwargs)
func(1,3,4,r=6,t=7,y=0)

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

def func(a,b,c,d,*args,e='',**kwargs):
    print(a)
    print(b)
    print(c)
    print(d)
    print(args)#(5, 10, 5, 6, 7, 8)
    print(e)
    print(kwargs)#{'f': '女', 'h': 48, 'g': 5}
func(1,2,3,4,5,10,5,6,7,8,f='',g=5,h=48)

3,  *号的魔法运用,在函数调用执行时,*代表打散。*加可迭代对象(list,tuple,set,str,dict的键),代表打散,将元素一一添加到args。

def func(*args):
    print(args)
li = [1,2,3,4,6]
l2 = [3,6,6,7,77,66]
tu = ('eqwj','ee','ui')
func(*li,*l2,*tu)

(1, 2, 3, 4, 6, 3, 6, 6, 7, 77, 66, 'eqwj', 'ee', 'ui')将元素一一添加到args中。

def func(**kwargs):
    print(kwargs)
dic = {'name':'alex','age':44}
dic1 = {'home':'taiwan','hobby':'football'}
func(**dic,**dic1)

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

def func(*args,**kwargs):
    print(args)
    print(kwargs)
dic1 = {'honnn':'shui','nugu':'dao'}
dic2 = {'name1':'两年半','age':33}
func(*[1,3,4,5],*'ahdhsdkj',**dic1,**dic2)

(1, 3, 4, 5, 'a', 'h', 'd', 'h', 's', 'd', 'k', 'j')
{'nugu': 'dao', 'name1': '两年半', 'honnn': 'shui', 'age': 33}

4,名称空间,也叫命名空间。放置变量与对应的值得关系(内存地址的关系)。当执行函数的时候,它会在内存中开辟一个临时名称空间,存放函数体内的所有变量与值得关系,随着函数的执行完毕,

临时空间自动关闭。

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

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

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

加载顺序:

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

取值顺序:

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

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

全局作用域:全局名称空间,内置名称空间。

局部作用域:局部名称空间。

5,函数的嵌套

print(111)#1
def func1():
    print(333)#2
    func2()
    print(777)#4
def func2():
    print(444)#3
def func3():
    print(555)
    func2()
func1()
print(222)#5
print(111)#1
def func1():
    print(333)#2
    func2()
    print(444)#6
def func2():
    print(222)#3
    func3()
    print(555)#5
def func3():
    print(666)#4
func1()
print(777)#7

6,globals和locals

a = 2
b = 3
def func1():
    c = 4
    d = 5
    print(globals())#将全局变量放在字典中
    return locals()#将局部变量放在字典中{'c': 4, 'd': 5}
print(func1())

{'a': 2, '__cached__': None, '__file__': 'D:/python3/day11/xuxi329.py', '__name__': '__main__', '__doc__': None, '__builtins__': <module 'builtins' (built-in)>, 'b': 3, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001EE02A95780>, 'func1': <function func1 at 0x000001EE026CA048>, '__spec__': None, '__package__': None}

a = 4
def func1():
    b = 6
    def func2():
        nonlocal b#nonlocal不能修改全局变量
        b = 666
        print(b)
    func2()
    print(b)
func1()

global:

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

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

globals,全局名称空间:所有变量。

locals,局部名称空间:所有变量。

nonlocal:

  1,不能修改全局变量。

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

原文地址:https://www.cnblogs.com/yzxing/p/8671805.html