冰镇可乐 发表于 2018-8-13 10:15:54

第十一次课:Python函数(二)

  在上节课中我们学到了函数的定义、如何调用函数以及参数传递,接下来的这节课我们将学习Python函数的高级版本,也就是高阶函数和匿名函数。
  高阶函数
  高阶函数是指把函数作为参数传入,或者把函数作为返回值返回的函数。上节课中我们学到的函数都是参数传入的普通函数,为了更容易理解这个高阶函数,我们用Python内置函数map()、reduce()、filter()、sorted()来举例。
  map函数有两个参数,一个是函数,另一个是列表,返回值为对传入的列表每一个元素执行传入的函数操作得到的列表;
  例子:计算1-10的平方
print '**********普通解法**********'  for i inrange(1,11):
  i*=i
  print str(i) +' ',
  print '\n**********函数解法**********'
  def x2(a):
  return a*a
  for a in range(1, 11):
  print x2(a),
  print '\n**********map函数解法**********'
  print map(x2,range(1,11))
  运行结果:
  **********普通解法**********
  149162536496481100
  **********函数解法**********
  1 4 9 16 25 36 49 64 81 100
  **********map函数解法**********
  
  从例子中可以很清楚的看出在调用map()函数,第一个传入的就是刚刚定义的求平方函数x2,调用函数就是把x2作用在list的每一个元素并把结果生成一个新的list,即函数把运算规则抽象化了,如此一来该函数的作用就不容小觑了,可以用来计算各种复杂的函数。
  reduce函数也有两个参数,一个是函数,另一个是列表,返回值为对list的每一个元素反复调用函数f,得到最终结果;
  例子:求1-100之和
print '**********普通解法**********'  x=0
  s1=0
  for i in range(1,101):
  s1+=i
  print s1
  print '**********函数解法**********'
  def su(a, s1=0):
  for i in a:
  s1+=i
  return s1
  print su(range(1,101))
  print '**********reduce函数解法**********'
  def su(x,y):
  return x+y
  print reduce(su,range(1,101))
  运行结果:
  **********普通解法**********
  5050
  **********函数解法**********
  5050
  **********reduce函数解法**********
  5050
  filter函数接受函数参数f和列表参数lst,f对lst元素进行判断,返回lst的元素中调用f函数结果为true的元素组成的列表(将不满足f函数条件的元素过滤掉);
  例子:取1-100中的奇数
print '**********普通解法**********'  for i in range(1,101):
  if i%2==1:
  print i,
  print '\n**********filter函数解法**********'
  def ss(li):
  return li%2==1
  print filter(ss,range(1,101))
  运行结果:
  **********普通解法**********
  1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 61 63 65 67 69 71 73 75 77 79 81 83 85 87 89 91 93 95 97 99
  **********filter函数解法**********
  
  sorted():sorted函数接受一个列表lst和一个函数参数f,f为自定义的比较lst元素大小的函数,返回值为lst中元素按f函数排列的列表;sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较,如需要统一大小写可以指定key;
  例子:对指定列表进行按大小排序,对字符忽略大小写进行排序
L1=  L2=['Name','age','Dream','Weight','height']
  print sorted(L1)
  print sorted(L2)
  print sorted(L2,key=str.lower)
  运行结果:
  
  ['Dream', 'Name', 'Weight', 'age', 'height']
  ['age', 'Dream', 'height', 'Name', 'Weight']
  匿名函数
  当我们在使用高阶函数传入函数时,有些时候,不需要显式地定义函数,这时使用匿名函数更方便,可以用lambda x:statement,x为参数,statement为对参数执行的语句;
  例子:使用匿名函数来计算1-10的乘积
map(lambda x:x*x,range(1,11))  从例子中可以看出通过匿名函数省去了我们定义函数的麻烦
lambda x:x*x相当于   def ss(x):  return x*x
  但匿名函数也有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
  用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数。如下例子 计算两数的和:
a=lambda x,y:x+y  print a(5,6)
  11
  同样,也可以把匿名函数作为返回值返回,如下例子:
def ss(a):  return lambda b:b+a
页: [1]
查看完整版本: 第十一次课:Python函数(二)