• 函数


    函数
    # 函数定义时,*代表聚合。 他将所有的位置参数聚合成一个元组,赋值给了 args。
    # **kwargs: ** 将所有的关键字参数聚合到一个字典中,将这个字典赋值给了kwargs(kwargs可更改,但是最好用kwargs)
    # 形参的顺序:位置参数,*args,(默认参数,仅限关键字参数),**kwargs
    # 默认参数和仅限关键字参数位置可互换
    # hobby是仅限关键字参数
    
    
    def func(name, age, *args, hobby, sex='男',  **kwargs):
        print(name)
        print(age)
        print(args)
        print(hobby)
        print(sex)
        print(kwargs)
    # 实参顺序:位置参数, 关键字参数。必须和形参对应上
    print(func('路飞', 18, '索隆', '山治', sex='女', hobby='onepiece', 乌索普='狙击手', 娜美='航海士'))
    
    
    
    # 参数顺序,仅限关键字参数必须有值
    def foo(a, b, *args, c, sex=None, **kwargs):
        print(a, b)  # 12
        print(c)  # 12
        print(sex) # 女
        print(args)  # 3,4
        print(kwargs)  # {'name': '太白'}
    foo(*[1, 2, 3, 4], **{'name':'太白', 'c': 12, 'sex': '女'})
    
    # 打散 (* 函数调用时)位置参数的实参(可迭代类型)前面加上,相当于将这些实参给拆解成一个一个的组成元素当成位置参数
    # ,然后传给args,这时候这个好像取到的是打散的作用。所以在函数的执行时:,*/**起到的是打散的作用。
    s1 = 'one piece'
    l1 = [1, 2, 3, 4]
    tu1 = ('路飞', '娜美', '罗宾',)
    def func(*args):
        print(args)  # ('alex', [1, 2, 3, 4], ('武sir', '太白', '女神'))
    func(s1, l1, tu1)  # ('one piece', [1, 2, 3, 4], ('路飞', '娜美', '罗宾'))
    func(*s1, *l1, *tu1)  # ('o', 'n', 'e', ' ', 'p', 'i', 'e', 'c', 'e', 1, 2, 3, 4, '路飞', '娜美', '罗宾')
    
    
    dic1 = {'name': '太白', 'age': 18}
    dic2 = {'hobby': '喝茶', 'sex': '男'}
    def func(**kwargs):
        print(kwargs)
    func(**dic1, **dic2)  # {'name': '太白', 'age': 18, 'hobby': '喝茶', 'sex': '男'}
    
    # 名称空间
    # 全局命名空间--> 我们直接在py文件中, 函数外声明的变量都属于全局命名空间
    # 局部命名空间--> 在函数中声明的变量会放在局部命名空间
    # 内置命名空间--> 存放python解释器为我们提供的名字, list, tuple, str, int这些都是内置命名空间
    
    # 加载顺序 内置命名空间-->全局命名空间--> 局部命名空间
    # 取值顺序 就进原则 单项不可逆的: 局部命名空间--> 全局命名空间--> 内置命名空间 legb
    
    
    # 全局作用域: 全局命名空间 + 内置命名空间
    #   局部作⽤域: 局部命名空间
    # 在全局作用域下打印,则他们获取的都是全局作用域的所有的内容。
    a = 2
    b = 3
    print(globals())
    print(locals())
    '''
    {'__name__': '__main__', '__doc__': None, '__package__': None,
    '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001806E50C0B8>, 
    '__spec__': None, '__annotations__': {},
    '__builtins__': <module 'builtins' (built-in)>, 
    '__file__': 'D:/lnh.python/py project/teaching_show/day09~day15/function.py',
    '__cached__': None, 'a': 2, 'b': 3}
    '''
    
    # 在局部作用域中打印。
    a = 2
    b = 3
    def foo():
        c = 3
        print(globals())  # 和上面一样,还是全局作用域的内容
        print(locals())  # 只打印 {'c': 3}
    foo()
    
  • 相关阅读:
    Integer判等的陷阱:你知道Integer内部高速缓冲区IntegerCache吗?
    Unicode 是不是只有两个字节,为什么能表示超过 65536 个字符
    java中Char到底是什么格式的编码
    Java中char和String 的深入理解
    关于serialVersionUID的说明
    Java中的instanceof和isInstance基础讲解
    编码(1)学点编码知识又不会死:Unicode的流言终结者和编码大揭秘
    知识图谱和图卷积(贪心学院)——学习笔记
    索尼相机,索尼W35,Sony Cyber-shot DSC-w35
    高斯分布与高斯过程梳理
  • 原文地址:https://www.cnblogs.com/jnsn/p/12806977.html
Copyright © 2020-2023  润新知