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

[经验分享] python 高阶函数详解。

[复制链接]

尚未签到

发表于 2018-8-11 08:37:19 | 显示全部楼层 |阅读模式
  1,概念: Iterable 和 Iterator
  Iterable 表示该变量可以被 for in 进行迭代。
  Iterator 表示该变量可以被  next(o)进行迭代
  (上一个表示有限迭代,下一个表示一个惰性的迭代概念,可以无限迭代。)
  一般的Iterable 的变量有:
  L=[{},[],(1,),{3:4},{3,4}]
  for x in L:
  print(isinstance(x,Iterable))
  print(isinstance(x,Iterator))
  true
  false
  可见,基础变量
  List,tuple,set,dict 都是Iterable,但是 非Iterator.
  Iterator 变量的产生方法有:
  1,使用Iter(Iterable)的方式将Iterable->Iterator
  2,使用生成器:
  L=(x for x in L) 生成Iterator.
  3,使用yield 将函数变成一个Iterator.
  4, 使用map(f(x),Iterable)将其变为Iterator。
  使用list(Iterator)可以将其变为列表。
  高阶函数:
  map:形式 map(f(x),Iterable) return a Iterator.f(x)需要返回值。
  reduce:形式 reduce(f(x,y),Iterable. 进行不断的变量减少,返回所需值。
  reduce 的函数需要在接收两个参数时能正确运行(即只允许两个位置参数)
  filter:形式filter(f(x),Iterable)return a Iterator,f(x)返回true,false。
  sorted(Iterable,key=func,reverse=false 返回Iterable.
  对于Iterator ,其内部被转换为了list.
  Iterator 生成器,是一个工具。其通过方法next(o)进行不断迭代产生数据。
  也可以使用 for,list,....隐式调用next(o)来生成一个list...
  函数的闭包:
  def func()
  def in_func()
  

      return xx  return in_func
  

  对于闭包函数首先:
  1,[]类型变量直接全局有效。
  2,对于int...非全局有效,需要加上nonlocal int ,不然会有一个分配错误。
  使用闭包函数可以纪录该函数本身的信息,比如被调用次数。。等等。
  此时,最好将该函数变更为一个对象。
  例子:
  

  def sumManager():
  count=0
  def thisCount():
  nonlocal count
  count=count+1
  return count
  def thissum(*L):
  s=0
  for x in L:
  s=s+x
  return s
  return [thisCount,thissum]
  sumCount,thissum=sumManager()
  print(thissum(1,2,3),sumCount())
  其中,1,使用nonlocal or []指定母函数中的变量可以被子函数访问。
  2,两个函数需要同时返回,这样他们指向同一个函数体变量。
  匿名函数:lambda x,y: 表达式,返回值就是表达式的值。
  L=(lambda x,y:x+y)(3,4)
  L=list(map(lambda x: x*x,[1,2,3]))
  L=list(filter(lambda x:x%2==1,range(1,100)))
  Decorator:装饰器,用于修饰函数。
  1,func---本身是一个对象:所以具备对象属性:比如func.name
  2,func---全参数调用:func(*args,kw)所有函数都可以支持这个参数表。
  3,Decorator 的常见形式:
  def log(f):
  functools.wraps(f)
  def wrapper(*args,*kw):
  act1
  t=f(args,kw)
  act2
  return t
  return wrapper
  

    4,带参数类型:  def log(para):
  def decorator(fun):
  functools.wraps(fun)
  def wrapper(*args,**kw):
  act1
  t=fun(*args,**kw)
  act2
  return t
  return wrapper
  return decorator
  def log(para):
  

  if isinstance(para,str):
  def decorator(f):@functools.wraps(f)br/>else:
  @functools.wraps(para)
def wrapper(k,kw):
  print('begin')
  sv=para(*k,**kw)
  print('end')
  return sv
  return wrapper
  

         也可以使用如下的办法:  def log(para):
  def decorator(func):
  def warpper(*args,**kw):
  sv=func(*args,**kw)
  return sv
  return warpper
  if isinstance(para,str):
  return decorator
  else:
  return decorator(para)
  

  ---------------------相当简洁有效。
  

  偏函数
  import functools
  

  >> int2 = functools.partial(int, base=2)


运维网声明 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-549908-1-1.html 上篇帖子: debian 系统python+uwsgi+nginx实现web环境 下篇帖子: python多进程编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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