zoukankan      html  css  js  c++  java
  • 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,在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。

  • 相关阅读:
    给出字符串
    Closest
    最短路计数(spfa)
    Cleaning Shifts
    Mr. Young's Picture Permutations
    Georgia and Bob
    GCD
    Cutting Game
    SP4191 MSKYCODE
    [CQOI2013]新Nim游戏
  • 原文地址:https://www.cnblogs.com/yzxing/p/8671805.html
Copyright © 2011-2022 走看看