设为首页 收藏本站
查看: 1002|回复: 0

[经验分享] 第十一次课:Python函数(二)

[复制链接]

尚未签到

发表于 2018-8-13 10:15:54 | 显示全部楼层 |阅读模式
  在上节课中我们学到了函数的定义、如何调用函数以及参数传递,接下来的这节课我们将学习Python函数的高级版本,也就是高阶函数和匿名函数。
  高阶函数
  高阶函数是指把函数作为参数传入,或者把函数作为返回值返回的函数。上节课中我们学到的函数都是参数传入的普通函数,为了更容易理解这个高阶函数,我们用Python内置函数map()、reduce()、filter()、sorted()来举例。
  map函数有两个参数,一个是函数,另一个是列表,返回值为对传入的列表每一个元素执行传入的函数操作得到的列表;
  例子:计算1-10的平方
print '**********普通解法**********'  for i in  range(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))
  运行结果:
  **********普通解法**********
  1  4  9  16  25  36  49  64  81  100
  **********函数解法**********
  1 4 9 16 25 36 49 64 81 100
  **********map函数解法**********
  [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
  从例子中可以很清楚的看出在调用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函数解法**********
  [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]
  sorted():sorted函数接受一个列表lst和一个函数参数f,f为自定义的比较lst元素大小的函数,返回值为lst中元素按f函数排列的列表;sorted()也可以对字符串进行排序,字符串默认按照ASCII大小来比较,如需要统一大小写可以指定key;
  例子:对指定列表进行按大小排序,对字符忽略大小写进行排序
L1=[2,8,30,5,87,7]  L2=['Name','age','Dream','Weight','height']
  print sorted(L1)
  print sorted(L2)
  print sorted(L2,key=str.lower)
  运行结果:
  [2, 5, 7, 8, 30, 87]
  ['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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-551037-1-1.html 上篇帖子: python Queue模块 下篇帖子: Linux下编译安装python3
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表