Python3 中的单*和双**

Python3编程中会碰到单*和双**的情况,咋一看,会以为是C语言中的指针和二级指针,其实则不然。
以下我们示例介绍单*和双**的使用场景

常规单*和双**

单*,用于乘法或者倍数,如:

print(2*3)          # 数学乘法运算,值为 6
print("="*3)        # 重复,返回 3个"=", 即 "==="

""" 返回结果: 
6
===
"""

双**,用于数学的N次方计算,如:

print(2**3)         # 数学次方运算(2的3次方,即pow(2,3)),值为 8

""" 返回结果:
8
"""

定义变量时,用于收集变量,并转换为list

单*,用于收集变量,并转换为list

x,y,*z = ("a","b","c","d","e")
print(z)                        # 收集x,y之后的元素,并转换为list 
print(*z)                       # 解包list,输出各个值
print(z[1])

""" 返回结果:
['c', 'd', 'e']
c d e
d
"""

在函数定义中使用,用于收集参数

单*,扩展参数,并将参数各元素转化为tuple

# *param,扩展参数并转换为tuple
def func01(*param) :
    print(f"param is {param}")

# *param,扩展剩余参数并转换为tuple
def func02(str, *param):
    print(f"param is {param}")
    print(f"str is {str}")

if __name__ == "__main__" :
    # 收集参数
    func01("a","b","c","d")     # 预期 ('a', 'b', 'c', 'd')
    func02("a","b","c","d")     # 预期 ('b', 'c', 'd')

""" 返回结果:
param is ('a', 'b', 'c', 'd')
param is ('b', 'c', 'd')
str is a
"""

双**,扩展参数,并将参数各元素转化为dict

# **param,扩展参数并转换为dict
def func11(**param) :
    print(f"param is {param}")

"""
 **param,扩展剩余参数并转换为dict,
          需要注意的是传入的参数中必须包含 x
"""
def func12(x, **param) :
    print(f"param is {param}")

if __name__ == "__main__" :
    # 收集参数
    func11(x="a",y="b",z="c")   # 预期 { "x":"a", "y":"b", "z":"c" }
    func12(x="a",y="b",z="c")   # 预期 { "y":"b", "z":"c" }

""" 返回结果:
param is {'x': 'a', 'y': 'b', 'z': 'c'}
param is {'y': 'b', 'z': 'c'}
"""

在函数调用时使用,用于分配参数

单*, 对tuple分配参数,按顺序分配参数

### 调用函数时分配参数
# 定义普通参数函数
def func21(x,y) :
    print(f"x is {x}, y is {y}")

if __name__ == "__main__" :
    param=("a","b")
    # 调用函数时,分配参数
    # 单*对tuple分配参数,按顺序分配参数
    # 需要注意的是参数个数需与tuple元素个数相同,否则报错
    func21(*param)              # 预期 "a" 分配给 x, "b" 分配给 y
    print(param)

""" 返回结果:
x is a, y is b
('a', 'b')
"""

双**,对dict分配参数,dict则不关心顺序,按key->value对应

### 调用函数时分配参数
# 定义普通参数函数
def func21(x,y) :
    print(f"x is {x}, y is {y}")

if __name__ == "__main__" :
    # 双*对dict分配参数,dict则不关心顺序,按key->value对应
    # 同样的dict的key需与参数匹配,否则报错
    param={"y":"b","x":"a"}
    func21(**param)             # 预期 key "x"的值分配给 x, key "y"的值分配给 y
    print(param)

""" 返回结果:
x is a, y is b
{'y': 'b', 'x': 'a'}
"""

标签: python, 单星, 双星, 函数

添加新评论