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

[经验分享] python5

[复制链接]

尚未签到

发表于 2018-8-10 10:57:49 | 显示全部楼层 |阅读模式
  高阶函数——————sorted
  排序也是在程序中经常用到的算法。 无论使用冒泡排序还是快速
  排序,排序的核心是比较两个元素的大小。通常规定如下:
  x < y, return -1
  x == y, return 0
  x > y, return 1
  先进入ipython模式,进行以下操作
  1.对元组进行排序
  In [1]: t=(1,2,5,3,43,35,34)
  In [2]: sorted(t)      ##对元组内的元素进行正序排序
  Out[2]: [1, 2, 3, 5, 34, 35, 43]
  In [3]: def reversed_cmp(x,y):
  ...:     if x>y:
  ...:         return -1
  ...:     elif x<y:
  ...:         return 1         ##对元组内的元素进行倒序
  ...:     else:
  ...:         return 0
  ...:
  In [4]: sorted(t,reversed_cmp)
  Out[4]: [43, 35, 34, 5, 3, 2, 1]
  2.对字符串进行排序,按照第一个字符ASCLL码进行排序
  In [5]: li=['zhangxuemeng','westos','wangying','redhat','Redhat']
  In [6]: sorted(li)      ##如果有大写,大写在前,并且大写小于小写
  Out[6]: ['Redhat', 'redhat', 'wangying', 'westos', 'zhangxuemeng']
  In [7]: 'westos'<'zhangxuemeng'
  Out[7]: True
  In [9]: def ignore_case_cmp(x,y):
  ...:     lower1=x.lower()
  ...:     lower2=y.lower()
  ...:     if lower1<lower2:
  ...:         return -1           ##统一按照小写排序
  ...:     elif lower1>lower2:
  ...:         return 1
  ...:     else:
  ...:         return 0
  ...:     sorted(li,ignore_case_cmp)
  ...:
  In [10]: sorted(li,ignore_case_cmp)
  Out[10]: ['redhat', 'Redhat', 'wangying', 'westos', 'zhangxuemeng']
  3.函数作为返回值
  高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回
  (1)def wrap_sum(*args):
  def my_sum():
  sum_num=0
  for i in  args:
  if not isinstance(i,(int,float)):
  print 'error type'
  sum_num=sum_num +i
  return sum_num
  return my_sum
  f=wrap_sum(1,2,3,6)
  print f()
  ##调用 warp_sum() 时,返回的并不是求和结果,而是求和函数f()
  ##调用f(),运行my_sum函数进行计算求和
  测试:
DSC0000.png

  (2)def wrap_sum(*args):
  def my_sum():
  sum_num=0
  for i in  args:
  if not isinstance(i,(int,float)):
  print 'error type'
  sum_num=sum_num +i
  return sum_num
  return my_sum
  f1=wrap_sum(1,2,3,6)
  print f1()
  f2=wrap_sum(1,2,3,6)
  print f2()
  if f1==f2:
  print "true"
  else:
  print "fluse"
  测试:
DSC0001.png

  4.匿名函数
  (1)当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。
  (2)关键字 lambda 表示匿名函数,冒号前面的 x 表示函数参数
  (3)匿名函数有只能有一个表达式,不用写 return ,返回值就是该表达式的结果。
  (4) 因为匿名函数没有名字,不必担心函数名冲突。 此外,匿名函数也是一个函数对
  象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数
  def pow1(x):
  return x*x
  print map(pow1,range(1,11))
  print map(lambda x:x*x,range(1,11))
  #匿名函数可以赋值给一个变量,需要变量运行时,变量名()
  #f=lambda:1
  #print f()
DSC0002.png

  #匿名函数传递必选参数和默认参数
  #f=lambda x,y=2:x**y
  #print f(2,3)
  #print f(2)
DSC0003.png

  #匿名函数传递可变参数
  #f=lambda *x:map(lambda x:x+x,x)
  #print f(1,2,3,4)
DSC0004.png

  #匿名函数传递关键字参数
  f= lambda **kwargs:kwargs.items()
  print f(name="fentiao",age=5)
DSC0005.png

  练习:利用匿名函数和字典重新编辑计算器的代码
  oper=raw_input("oper:")
  d={
  "+": lambda x,y:x+y,
  "-": lambda x,y:x-y,
  "*": lambda x,y:x*y,
  "/": lambda x,y:x/y
  }
  if oper not in d.keys():
  print 'input +,-,*,/'
  print d[oper](3,2)
  测试:
DSC0006.png

DSC0007.png

DSC0008.png

DSC0009.png

  ##########装饰器###########
  装饰器就是用来装饰函数。
  想要增强原有函数的功能;
  但不希望修改now()函数的定义;
  在代码运行期间动态增加功能的方式;
  定义的装饰器实质是返回函数的高阶函数
  import time
  def timmer(func):
  def dec():
  start_time=time.time()
  func()
  stop_time=time.time()
  return "%s run %f s"%(func.__name__,stop_time-start_time)
  return dec
  @timmer     ###hello1=timmer(hello1),语法糖
  def hello1():
  print 'hello1.....'
  time.sleep(2)
  print hello1()
  测试:
DSC00010.png

运维网声明 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-549587-1-1.html 上篇帖子: python学习一 下篇帖子: python日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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