函数

作者:追风剑情 发布于:2017-12-13 15:21 分类:Python

示例

  1. # -*- coding: cp936 -*-
  2. #函数
  3. #内建的callable函数可以用来判断函数是否可调用
  4. #callable在Python3.0中不再可用,需要使用表达式hasattr(func, __call__)代替。
  5. print '判断函数是否可调用'
  6. import math
  7. x = 1
  8. y = math.sqrt
  9. print callable(x)
  10. print callable(y)
  11.  
  12. #定义函数
  13. def hello(name):
  14. return 'Hello, ' + name + '!'
  15.  
  16. def hello_1(greeting, name):
  17. print '%s, %s!' % (greeting, name)
  18.  
  19. #参数可以有默认值
  20. def hello_3(greeting='Hello', name='world'):
  21. print '%s, %s!' % (greeting, name)
  22.  
  23. #定义收集参数,不限传参数量,参数会以元组的形式传进来
  24. #如果不传参数,params是个空元组
  25. #这里的params不能使用关键字方式传参
  26. def print_params(*params):
  27. print params
  28.  
  29. #params可以使用关键字方式传参,这里传进来的params是个字典
  30. def print_params1(**params):
  31. print params
  32.  
  33. #普通参数与收集参数混合使用
  34. def print_params2(title, *params):
  35. print title
  36. print params
  37.  
  38. #混合参数
  39. def print_params4(x, y, z=3, *pospar, **keypar):
  40. print x,y,z
  41. print pospar
  42. print keypar
  43.  
  44. def fibs(num): #生成斐波那契数列
  45. result = [0, 1]
  46. for i in range(num-2):
  47. result.append(result[-2] + result[-1])
  48. return result
  49.  
  50. def foo(x,y,z,m=0,n=0):
  51. print x,y,z,m,n
  52. #函数中调用另一个函数
  53. def call_foo(*args, **kwds):
  54. print "Calling foo!"
  55. foo(*args, **kwds)
  56.  
  57. #文档化函数
  58. #如果在函数的开头写下字符串,它就会作为函数的一部分进行存储,这称为文档字符串。
  59. def square(x):
  60. 'Calculates the square of the number x' #文档字符串
  61. return x*x
  62.  
  63. gp = 'global' #定义个全局变量
  64. def fun1(gp):
  65. #因为有个同名的局部变量gp,所以需要用globals()来引用全局变量gp
  66. #globals()返回全局作用域
  67. print gp + globals()['gp'];
  68. print locals() #locals()返回函数所在的作用域
  69.  
  70. def fun2():
  71. global gp #告诉Python解释器 gp是个全局变量
  72. gp = 'fun2-global'
  73.  
  74. #函数可以通过元组返回多个值
  75. #如果函数没有return,默认返回None
  76. #不可变数据结构(字符串、数字、元组)按值传递
  77. #可变数据结构按引用传递
  78. #函数内部也可以引用外部的变量
  79.  
  80. print '调用函数'
  81. print hello('world')
  82. print hello('Gumby')
  83. print '多个函数参数'
  84. hello_1('Hello', 'world!')
  85. #也可以这样传参数
  86. #关键字参数
  87. #如果函数的参数带默认值,调用时可只提供部分参数,或者不提供参数
  88. hello_1(name='Hello', greeting='world!')#这样可以不用关心参数顺序(参数名一定要对应)
  89. hello_3('HHello', name='wworld')#位置参数和关键字参数可以混合使用
  90. print fibs(10)
  91. print_params('p1', 'p2', 3)
  92. #也可以这样传参
  93. params = ('p1', 'p2', 3)
  94. print_params(*params)
  95.  
  96. print_params1(x=1, y=2, z=3) #关键字传参
  97. #也可以这样传参
  98. params = {'x':1, 'y':2, 'z':3}
  99. print_params1(**params)
  100.  
  101. print_params2('tt', 1, 2, 3)
  102. print_params4(1,2,3,5,6,7,foo=1,bar=2)#混合传参
  103.  
  104. print '访问文档字符串'
  105. print square.__doc__
  106.  
  107. print 'help函数'
  108. print help(square)
  109.  
  110. print '作用域' #或者叫 命名空间
  111. #可以把作用域理解成一个不可见的字典
  112. #vars函数可以返回这个字典(一般来说这个字典是不能修改的)
  113. x = 1
  114. scope = vars()
  115. print scope['x']
  116. scope['x'] += 1
  117. print x
  118.  
  119. fun1('aaa-')
  120. fun2()
  121. print gp
  122.  
  123. print '嵌套函数'
  124. def foo():
  125. def bar():
  126. print "Hello, world!"
  127. bar()
  128. foo()
  129.  
  130. print '函数闭包'
  131. #内部函数存储外部函数作用域的行为叫做闭包
  132. #外部作用域的变量一般来说是不能进行重新绑定的。但在Python3.0中,
  133. #nonlocal关键字被引入。它和global关键字的使用方式类似,可以让用户
  134. #对外部作用域(但并非全局作用域)的变量进行赋值。
  135. def multiplier(factor):
  136. def multiplyByFactor(number):
  137. return number*factor #内层函数可以访问外层作用域中的factor
  138. return multiplyByFactor
  139.  
  140. print multiplier(2)(3)
  141.  
  142. print '递归'
  143. def factorial(n):#求n的阶乘
  144. if n == 1:
  145. return 1
  146. else:
  147. return n * factorial(n-1)
  148.  
  149. print factorial(5)
  150.  
  151. print 'map函数'
  152. #下面两句代码等效
  153. print map(str, range(10))
  154. print [str(i) for i in range(10)]
  155.  
  156. print 'filter函数'
  157. def func(x):#字义过滤函数
  158. return x.isalnum()
  159. seq = ["foo", "x41", "?!", "***"]
  160. print filter(func, seq)
  161. #也可以用lambda表达式创建函数
  162. print filter(lambda x: x.isalnum(), seq)
  163. #上面的代码等效于列表推导式
  164. print [x for x in seq if x.isalnum()]
  165.  
  166. print 'reduce函数'
  167. #reduce函数会将序列的前两个元素与给定的函数联合使用,
  168. #并且将它们的返回值和第3个元素继续联合使用,直到整个序列
  169. #处理完毕,并且得到一个最终的结果。
  170. numbers = [1, 5, 8, 10, 13]
  171. print reduce(lambda x,y: x+y, numbers)#计算列表中数字之和
  172. #等效于内建函数sum的功能
  173. print sum(numbers)
  174.  
  175. print 'apply函数' #用来调用函数的函数
  176. #apply(函数名, 元组参数(可选), 字典参数(可选))
  177. print apply(sum, (numbers,))

运行测试

11111.png

标签: Python

« | 循环语句»
Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号