functions-函数

╰半橙微兮° 2021-09-29 03:12 395阅读 0赞
  1. python functions
  2. 函数分类:
  3. 内建函数 max() reversed()
  4. 库函数 math.ceil()
  5. 定义:
  6. def 函数名 (参数列表):
  7. 函数体(代码块)
  8. [return 返回值]
  9. 1) 函数名就是标识符,命名要求一样
  10. 2) 语句块必须缩进,约定4个空格
  11. 3) 若没有return语句,隐式会返回一个None
  12. 4) 定义中的参数列表,形参
  13. 调用:
  14. 调用时写的参数是实际参数,实实在在传入的值,实参
  15. callable() 是否可调用 True/False
  16. 函数参数:
  17. 位置参数:
  18. def f(x,y,z) 调用使用f(1,3,5)
  19. 按照顺序传入实参
  20. 关键字参数:
  21. def f(x,y,z) 调用使用f(x=1,y=3,z=5)
  22. 使用形参的名字,传入实参的方式,顺序可以改变
  23. f(y=5,z=6,2) #位置参数必须在关键字参数之前传入。
  24. 参数默认值:
  25. def add(x = 4, y = 5):
  26. return x+y
  27. 调用:
  28. -----------------------------------------------------------------
  29. add(6,10): 6+10 = 16
  30. add(6, y=7): 6+7 = 13
  31. add(x=5): 5+5 = 10
  32. add() : 4+5 = 9
  33. add(y = 7): 4+7 = 11
  34. add(x = 5, 6) #Error (positional argument follows keyword argument:位置参数遵循关键字参数) 位置参数必须在关键字参数之前传入
  35. add(y = 8, 4) #Error (positional argument follows keyword argument:位置参数遵循关键字参数) 位置参数必须在关键字参数之前传入
  36. add(x = 5, y = 6) 5+6 = 11
  37. add(y = 6, x = 5) 5+5 = 10
  38. -----------------------------------------------------------------
  39. 作用:
  40. 参数的默认值在未传入足够的实参时,对没有给定的参数赋值默认值
  41. 参数多,不需要用户每次都输入所有的参数,简化调用
  42. 例:
  43. 定义一个函数login,参数名为:host port username password
  44. def login(host = '127.0.0.1', port='80', username='test', password='test'):
  45. print('{}:{}@{}/{}'.format(host, port, username, password))
  46. 1)login()
  47. 127.0.0.1:80@test/test 默认 主机名:端口@用户名/密码
  48. 2)login('127.0.0.1',80,'tom','tom')
  49. 127.0.0.1:80@tom/tom 位置参数传入
  50. 3)login('127.0.0.1',username='root')
  51. 127.0.0.1:80@root/test 指定一个位置参数和关键字参数
  52. 4)login(port=80, password='test',host='www')
  53. www:80@test/test 使用关键字参数传入,没有传入的使用默认值
  54. 可变参数:
  55. 1)位置可变
  56. def add(*nums):
  57. sum = 0
  58. for x in nums:
  59. sum+=x
  60. return sum
  61. 传入一个可迭代对象
  62. add([1,3,5]) 12
  63. add((1,3,5)) 12
  64. 一个形参可以匹配任意个实参
  65. 在形参前使用* 表示该形参是可变参数,可以接收多个实参
  66. 生成一个tuple
  67. 2)关键字可变
  68. def showconfig(**kwargs):
  69. for k,v in kwargs.items():
  70. print('{}={}'.format(k,v))
  71. showconfig(host='localhost', port='80', username='test', password='test')
  72. ----------------------------
  73. password=test
  74. host=localhost
  75. username=test
  76. port=80
  77. ----------------------------
  78. 形参前使用**,表示可接收多个关键字参数
  79. 生成一个dict
  80. 3)可变参数的混合使用:
  81. 1. def showconfig(username,password,**kwargs)
  82. for k ,v in kwargs.items():
  83. print('{}={}'.format(k,v))
  84. >>>showconfig('test','test')
  85. >>>test
  86. >>>test
  87. >>>showconfig('test','test',x=1,y=2)
  88. >>>test
  89. >>>test
  90. >>>x=1
  91. >>>y=2
  92. 2. def showconfig(username,*args,**kwargs):
  93. print(username)
  94. print(args)
  95. for k, v in kwargs.items():
  96. print('{}={}'.format(k,v))
  97. >>>showconfig('test','test','zzz',x=2)
  98. >>>test
  99. >>>('test','zzz')
  100. >>>x=2
  101. -----------------------------------------------------------------------------------
  102. 上例中,*args和*kwargs是可变参数,*args表示多个无名参数(位置参数),它是一个tuple
  103. **kwargs表示关键字参数,它是一个dict。同时使用*args和**kwargs时,必须将*args写在
  104. **kwargs前面,否则会出错
  105. def showconfig (username,**kwargs,*args)
  106. 这是错误的。这样调用 提示语法错误:
  107. SyntaxError: non-keyword arg after keyword arg
  108. -----------------------------------------------------------------------------------
  109. 可变参数分为:位置可变参数和关键字可变参数
  110. 位置可变参数要在形参前加*
  111. 关键字可变参数要在形参前加**
  112. 位置可变参数生成的是tuple,关键字可变参数生成的是dict
  113. 位置可变参数要放在关键字可变参数前
  114. keyword-only 参数
  115. 如果在一个星号参数后,或者一个位置可变参数后,出现的普通参数变成了keyword-only参数
  116. keyword-only 后常跟默认值
  117. def fn(*args,x):
  118. print(x)
  119. print(args)
  120. fn(3,5) args已经截断了所有的位置参数,如果x不使用关键字参数就拿不到实参 所以这里error
  121. >>>can't assign to function call 不能分配函数调用
  122. fn(3,6,x=1)
  123. >>>1
  124. >>>3,6
  125. def fn(**kwargs,x) kwargs截断所有的关键字参数,x永远也获取不到值
  126. keyword-only 第二种形式:
  127. def fn(*,x,y):
  128. print(x,y)
  129. fn(x=1,y=2)
  130. >>>1 2
  131. *后面,形参都变成了keyword-only参数 必须指定关键字传参
  132. 可变参数和参数默认值:
  133. 1.
  134. def fn(*args,x=5):
  135. print(x)
  136. print(args)
  137. fn()
  138. >>> 5
  139. >>> ()
  140. fn(6)
  141. >>>5
  142. >>>(6,)
  143. fn(x=9)
  144. >>>9
  145. >>>()
  146. fn(1,2,5,x=10)
  147. >>>10
  148. >>>(1,2,3)
  149. 不指定关键字参数,x使用默认值 位置参数就赋值args
  150. 2.
  151. def fn(y,*args,x=5):
  152. print('x={},y={}'.format(x,y))
  153. print(args)
  154. fn()
  155. >>>missing 1 required positional argument: 'y' 缺少y参数传值
  156. fn(6)
  157. >>> x=5,y=6
  158. >>>()
  159. fn(x=6)
  160. >>>missing 1 required positional argument: 'y' 缺少y参数传值
  161. fn(1,2,3,x=10)
  162. >>>x=10,y=1
  163. >>>(2,3)
  164. fn(y=10,2,3,x=10)
  165. >>>positional argument follows keyword argument 位置参数要放在关键字参数前面
  166. fn(1,2,y=3,x=10)
  167. >>>fn() got multiple values for argument 'y' y被赋值2次
  168. 3.
  169. def fn(x=5,*kwargs):
  170. print('x={}'.format(x))
  171. print(kwargs)
  172. fn()
  173. >>>x=5
  174. >>>{}
  175. fn(6)
  176. >>>x = 6
  177. >>>{}
  178. fn(x=9)
  179. >>>x=9
  180. >>>{}
  181. fn(y=3,x=10)
  182. >>>x=10
  183. >>>{'y':3}
  184. fn(3,y=10)
  185. >>>x=3
  186. >>>{'y':10}
  187. 函数参数一般顺序:
  188. 普通参数 -> 缺省参数 -> 可变位置参数 -> keyword-only参数(可带缺省值) -> 可变关键字参数
  189. def fn(x, y, z=3, *args, m=4, n, **kwargs)
  190. x,y 普通参数
  191. z=3 缺省参数
  192. *args 可变位置参数
  193. m,n keyword-only参数
  194. **kwargs 可变关键字参数

  

转载于:https://www.cnblogs.com/hkcs/p/7646646.html

发表评论

表情:
评论列表 (有 0 条评论,395人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Function类型(函数

    Function类型 1、函数实际上是对象,函数名是指向函数对象的指针,因此函数名与其他指向该函数的变量没有什么不同。 比如: function func (

    相关 javaScript函数Function类型

    总结一下java Script的function类型的有关主要属性 我把主要的东西浓缩为几句话,方便自己的记忆,又需要的朋友也可以帮忙指证一下。 “函数是对象,函数名是