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'}
"""
- 上一篇: Python3 的参数对象
- 下一篇: 没有了