Python-在函数调用中,星号运算符是什么意思?

发布于 2021-02-02 23:23:16

*运算符在Python中是什么意思,例如like zip(*x)或代码f(**k)

  1. 在解释器内部如何处理?
  2. 它会影响性能吗?是快还是慢?
  3. 什么时候有用,什么时候没有?
  4. 应该在函数声明中还是在调用中使用它?
关注者
0
被浏览
112
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    单颗星*将序列/集合解压缩为位置参数,因此你可以执行以下操作:

    def sum(a, b):
        return a + b
    
    values = (1, 2)
    
    s = sum(*values)
    

    这将打开元组的包装,使其实际执行为:

    s = sum(1, 2)
    

    双星 **只使用字典并因此命名参数来做同样的事情:

    values = { 'a': 1, 'b': 2 }
    s = sum(**values)
    

    你还可以结合:

    def sum(a, b, c, d):
        return a + b + c + d
    
    values1 = (1, 2)
    values2 = { 'c': 10, 'd': 15 }
    s = sum(*values1, **values2)
    将执行为:
    
    s = sum(1, 2, c=10, d=15)
    

    另请参见Python文档的4.7.4-解包参数列表。

    另外,你可以定义要接受的函数*x**y参数,这使函数可以接受声明中未专门命名的任何数量的位置和/或命名参数。

    例:

    def sum(*values):
        s = 0
        for v in values:
            s = s + v
        return s
    
    s = sum(1, 2, 3, 4, 5)
    

    或搭配 **

    def get_a(**values):
        return values['a']
    
    s = get_a(a=1, b=2)      # returns 1
    

    这可以使你无需声明它们即可指定大量可选参数。

    再一次,你可以结合:

    def sum(*values, **options):
        s = 0
        for i in values:
            s = s + i
        if "neg" in options:
            if options["neg"]:
                s = -s
        return s
    
    s = sum(1, 2, 3, 4, 5)            # returns 15
    s = sum(1, 2, 3, 4, 5, neg=True)  # returns -15
    s = sum(1, 2, 3, 4, 5, neg=False) # returns 15
    


知识点
面圈网VIP题库

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

去下载看看