**(double star/asterisk)和*(star/asterisk)对参数有什么作用?

发布于 2021-02-02 23:25:00

在以下方法定义中,*做param2什么?

def foo(param1, param2):
def bar(param1,
*param2):

关注者
0
被浏览
507
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    *args**kwargs是一种常见的成语,以允许参数,以作为部分所述功能的任意数量的多个上定义函数 Python文档英寸

    *args给你的所有函数参数为一个元组:

    def foo(*args):
        for a in args:
            print(a)        
    
    foo(1)
    # 1
    
    foo(1,2,3)
    # 1
    # 2
    # 3
    

    **kwargs会给你所有的 关键字参数除了那些与作为字典的形式参数。

    def bar(**kwargs):
        for a in kwargs:
            print(a, kwargs[a])  
    
    bar(name='one', age=27)
    # age 27
    # name one
    

    这两个习惯用法都可以与普通参数混合使用,以允许使用一组固定参数和一些可变参数:

    def foo(kind, *args, **kwargs):
       pass
    

    也可以以其他方式使用此方法:

    def foo(a, b, c):
        print(a, b, c)
    
    obj = {'b':10, 'c':'lee'}
    
    foo(100,**obj)
    # 100 10 lee
    

    *l习惯用法的另一种用法是在调用函数时解压缩参数列表。

    def foo(bar, lee):
        print(bar, lee)
    
    l = [1,2]
    
    foo(*l)
    # 1 2
    

    在Python 3中,可以*l在分配的左侧使用(Extended Iterable Unpacking),尽管在这种情况下它提供的是列表而不是元组:

    first, *rest = [1,2,3,4]
    first, *l, last = [1,2,3,4]
    

    Python 3还添加了新的语义):

    def func(arg1, arg2, arg3, *, kwarg1, kwarg2):
        pass
    

    该函数仅接受3个位置参数,之后的所有内容*只能作为关键字参数传递。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看