当前位置:   article > 正文

python两个乘号_Python-01 星号*和双星号**的使用

python **符号

ae9d3a5e1f7911e41b29926df5f9a1db.png

1、数学运算符号

在作为数学运算符号时,*表示乘号,**表示乘方

  1. a = 2
  2. b = 3
  3. >>> a * b
  4. 6
  5. >>> a ** b
  6. 8

2、函数形参可以接收多个参数

(1)Python允许在函数的形参前面添加一个(*)号,这样就意味着这个形参可以接收多个参数值,而这多个参数值被当作元组传给该形参。同时python只允许一个函数中只能有一个带(*)号的形参,同时这个形参可以在形参列表中的任意位置,不一定非得要在最后一个位置。但处于该形参前面的形参必须使用位置参数,处于该形参后面的形参必须使用关键字参数。

  1. def function(x, *y, z):
  2. print('x = ', x)
  3. print('y = ', y)
  4. print('z = ', z)
  5. >>> function(1, 2, 3, 4, z=5)
  6. x = 1
  7. y = (2, 3, 4)
  8. z = 5
  9. >>> function(x=1, 2, 3, 4, z=5)
  10. 报错!
  11. >>> function(1, 2, 3, 4, 5)
  12. 报错!
  13. #如果某形参前面加了*号,那么该形参就不能再使用关键字参数进行传值
  14. >>> function(1, y=2, z=3)
  15. 报错!

(2)函数形参前使用了两个星号(**)表示该形参可以收集多个关键字参数,这些关键字参数作为一个字典传给该形参。

  1. def function(x, *y, m, **z):
  2. print('x = ', x)
  3. print('y = ', y)
  4. print('m = ', m)
  5. print('z = ', z)
  6. >>> function(1, 2, 3, 4, m=7, a=5, b=6)
  7. x = 1
  8. y = (2, 3, 4)
  9. m = 7
  10. z = {'a':5, 'b':6}
  11. >>> function(1, m=7, a=5, b=6) #没有给参数y传值
  12. x = 1
  13. y = ()
  14. m = 7
  15. z = {'a':5, 'b':6}
  16. #前面说到*号形参可以在任意位置,但**号形参只能在最后一个位置,所以*号形参必须要在**号形参之前

(3)星号分隔符,当一个函数中需要指定哪些是位置参数,哪些是关键字参数时,可以使用星号分隔符,星号分隔符前面的是位置参数,后面的是关键字参数。位置参数只能使用位置传递,关键字参数只能使用关键字传递。带星号的形参也相当于一个星号分隔符。

  1. def function(x, y, *, z):
  2. print('x = ', x)
  3. print('y = ', y)
  4. print('z = ', z)
  5. def fun(x, *y, z):
  6. print('x = ', x)
  7. print('y = ', y)
  8. print('z = ', z)
  9. >>> function(1, 2, z=3)
  10. x = 1
  11. y = 2
  12. z = 3
  13. >>> function(x=1, 2, z=3)
  14. 报错!
  15. >>> fun(1, 2, 3, z=4)
  16. x = 1
  17. y = (2, 3)
  18. z = 4
  19. >>> fun(x=1, 2, 3, z=4)
  20. 报错!

3、序列解包

在进行序列解包时,可以只解出右边变量的部分元素,其余元素依旧采用列表储存。在左边被赋值的变量前添加(*)号,那么该变量代表一个列表,可以保存多个元素。但一个表达式里面只能有一个带(*)号的变量。

  1. t = tuple(range(6))
  2. a, *b = t
  3. c, *d, e = t
  4. >>> t
  5. (0, 1, 2, 3, 4, 5)
  6. >>> a
  7. 0
  8. >>> b
  9. [1, 2, 3, 4, 5]
  10. >>> c
  11. 0
  12. >>> d
  13. [1, 2, 3, 4]
  14. >>> e
  15. 5
  16. #根据自己想解出哪些元素可任意组合:
  17. *a , b = t
  18. a, b, *c = t
  19. ....

4、函数实参解出多个元素

前面说到函数的形参可以使用带星号和双星号的,那么当函数的实参为带星号和双星号的又代表什么意思呢?

(1)星号实参,星号实参将该一个可迭代变量(如列表,元组)中的各个元素解出,以位置参数的方式分别传给函数中的各个参数,但要保证可迭代变量解出的元素与函数中的形参数目相等。如果星号实参作用于字典,则将字典中的key解出以位置参数的方式赋给函数的形参。

  1. def add(x, y):
  2. print(x + y)
  3. param1 = [1, 2]
  4. param2 = (1, 2)
  5. param3 = [1, 2, 3]
  6. >>> add(*param1) # x = 1, y = 2
  7. 3
  8. >>> add(*param2) # x = 1, y = 2
  9. 3
  10. >> add(*param3)
  11. 报错!
  12. -----------------------------------------------------------------------------------
  13. def fun(x, *y):
  14. print('x = ', x)
  15. print('y = ', y)
  16. def fun2(x, *y, z):
  17. print('x = ', x)
  18. print('y = ', y)
  19. print('z = ', z)
  20. a = list(range(6))
  21. >>> a
  22. [0, 1, 2, 3, 4, 5]
  23. >>> fun(*a)
  24. x = 0
  25. y = (1, 2, 3, 4, 5)
  26. >>> fun2(*a)
  27. 报错!
  28. # fun2中的形参z为关键字参数,不能通过*号实参传值。
  29. ----------------------------------------------------------------------------------
  30. def fun(x, y):
  31. print('x = ', x)
  32. print('y = ', y)
  33. param = {'a':1, 'b':2}
  34. >>> fun(*param) # == fun(x='a', y='b')
  35. x = a
  36. y = b

(2)双星号实参,双星号实参作用于字典,将字典中的key-value的形式转为关键字参数key=value传给函数中的形参,但要保证函数中的形参命名要与字典中的key保持一致,同时也要保持个数相等。

  1. def fun(x, y):
  2. print('x = ', x)
  3. print('y = ', y)
  4. def fun2(a, b):
  5. print('a = ', a)
  6. print('b = ', b)
  7. param = {'x':1, 'y':2}
  8. >>> fun(**param) # == fun(x=1, y=2)
  9. x = 1
  10. y = 2
  11. >>> fun2(**param) # == fun2(x=1, y=2)
  12. 报错!
  13. # 字典key与函数中的形参不对应
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/783456
推荐阅读
相关标签
  

闽ICP备14008679号