Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!

Python的三大神器:装饰器.迭代器与生成器!这就是Python的三大神器,好了废话不多说。直接来上干货吧! 2018-06-08 10:18:22 Python装饰器迭代器 Java之枚举,程序员应该掌握的开发技巧「简洁易懂又安全的代码」 JDK1.5引入了新的类型——枚举,枚举类型提高了代码的简洁性、安全性以及便捷性。枚举的设计真的非常优雅,软件工程师们的最爱。 2018-06-08 09:50:07 程序员开发技巧Java 百亿级日访问量的应用如何做缓存架构设计? 微博日活跃用户 1.6 亿+,每日访问量达百亿级,面对庞大用户群的海量访问,良好的架构且不断改进的缓存体系具有非常重要的支撑作用。 2018-06-08 09:48:52 缓存架构设计 微软将如何处理 GitHub 上有争议的代码? 随着微软对知名代码托管网站 GitHub 的收购成功, 之后所带来的各种问题仍需要努力解决。 2018-06-08 09:12:48 微软 芯片人才紧缺 微电子或成今年爆款专业? 高考结束后,下一道考题就是该如何选择专业。2018年最新公布的年度专业备案和审批结果显示,大数据和人工智能成为增长最多的热门专业,集成电路产业相关的专业也稍有增加。 2018-06-08 09:01:17 芯片半导体技术 开发软件时让不同团队并肩作战的10个要点 译文 说到开发软件,人们通常立即想到程序员这个群体。然而,将一款软件投放市场需要的不仅仅是程序员。实际上,营销团队是这个过程的重要部分。然而,营销团队常常蒙在鼓里,或者介入太晚。幸好有办法可以解决这个问题。 2018-06-08 09:00:00 开发软件程序员 带你了解一些常见的并发编程错误 Go 是一个内置支持并发编程的语言。借助使用 go 关键字去创建协程goroutine(轻量级线程)和在 Go 中提供的 使用 信道 和 其它的并发 同步方法,使得并发编程变得很容易、很灵活和很有趣。 2018-06-08 08:50:35 编程语言并发编程 写了100万行代码的程序员是什么样的程序员 今天在社群上闲逛,突然发现一个十分有趣的帖子,《写了100W行的代码是啥感觉?》看完之后就头皮一阵发麻,让我写一万行的代码?!are you kidding me?(黑人问号脸)我估计写到20万的时候就会突然有个疑问—-“咦?我的头发呢?” 2018-06-07 16:20:56 代码代码质量程序员 与Java、PHP 、C#相比,为什么Python薪资更高? 选择要学习的技术和选择要上的大学一样重要,如果选错了,你将来不仅得不到自己喜欢的高薪工作,反而会弄得一堆麻烦。如果你打开了这篇文章,说明你已经考虑选择Python开发作为你以后的职业了。 2018-06-07 15:15:36 PHPPythonJava Python与PHP、Java等4大流行语言过招,谁更胜一筹? 从开发的角度来看,PHP是面向WEB的语言。PHP应用程序更像是一组单独的脚本,甚至只是一个单独入口。而Python是多用途语言,也可以用于WEB开发,基于Python的WEB应用是加载到内存的完整应用,有自己的内容声明,保存所有的查询和请求。

Python的三大神器:装饰器.迭代器与生成器!这就是Python的三大神器,好了废话不多说。直接来上干货吧!

[[232170]]

Python的三大神器:装饰器、迭代器与生成器!这就是Python的三大神器,好了废话不多说。直接来上干货吧!

生成器

仅仅拥有生成某种东西的能力,如果不用__next__方法是获取不到值得。

创建一个生成器函数

  1. >>>
  2. defscq():...print("11")#当函数代码块中遇到yield关键字的时候,这个函数就是一个生成器函数...yield
  3. 1...print("22")...yield2...print("33")...yield3...

把生成器赋值给一个对象

  1. >>>r=scq()

查看r的苏剧类型并且输出r的值

  1. >>>print(type(r),r)<class'generator'><generatorobjectscqat0x000001F117D8DF10>

当执行生成器的__next__的时候,代码会按照顺序去执行,当执行到yield时会返回并提出,yield后面的值就是返回值,然后记录代码执行的位置,并退出

Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!

Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!

执行结果

  1. C:Python35python.exeF:/Python_code/sublime/Week5/Day03/s1.py01234Processfinishedwithexitcode0

迭代器

具有访问生成器的能力,可以访问到生成器的值,类似于生成器的__next__方法,一个一个值一个值得去迭代,只能够按照顺序的去查找。

特点:

  1. 访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容
  2. 不能随机访问集合中的某个值 ,只能从头到尾依次访问
  3. 访问到一半时不能往回退
  4. 便于循环比较大的数据集合,节省内存

优化上面range或xrange的生成器

  1. def
  2. irange(start,stop,step=1):whilestart!=stop:yieldstartstart+=
  3. stepelse:raiseStopIterationforninirange(1,10):
  4. """for循环只要遇到StopIteration就会停止"""print(n)ret=irange(1,20)print(ret)
  5. #返回一个生成器,相当于只在内存中创建了一个值print(list(ret))#如果想要得到全部的值,变成列表就可以
  6. /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5/Users/ansheng/MyPythonCode/hello.py
  7. 1
  8. 2
  9. 3
  10. 4
  11. 5
  12. 6
  13. 7
  14. 8
  15. 9
  16. <generatorobjectirangeat0x1021df7d8>
  17. [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]
  18. Processfinishedwithexitcode0

Python之装饰器

Python的三大神器,你知道是哪三大吗?史上最详细的入门教程!

现要在执行func这个函数前后执行一些操作,就可以创建一个装饰器来实现:

  1. #!/usr/bin/envpython
  2. #_*_coding:utf-8_*_
  3. defdecorator(func):#创建一个装饰器函数,接受的参数arg参数就是func函数名
  4. definner(*args,**kwargs):
  5. print("执行函数之前")
  6. ret=func(*args,**kwargs)
  7. print("执行函数之后")
  8. returnret
  9. returninner
  10. @decorator#如果要让某个函数使用装饰器,只需要在这个函数上面加上@+装饰器名
  11. deffunc(arg):
  12. print(arg)
  13. func("HelloWorld!")

输出结果为:

  1. /usr/bin/python3.5/home/ansheng/Documents/PycharmProjects/blogcodes/装饰器.py
  2. 执行函数之前
  3. HelloWorld!
  4. 执行函数之后
  5. Processfinishedwithexitcode0

多个装饰器装饰同一个函数

  1. #!/usr/bin/envpython
  2. #_*_coding:utf-8_*_
  3. defdecorator1(func):
  4. definner():
  5. print("开始之前执行装饰器01")
  6. ret=func()
  7. print("结束之后执行装饰器01")
  8. returnret
  9. returninner
  10. defdecorator2(func):
  11. definner():
  12. print("decorator2>>>Start...")
  13. ret=func()
  14. print("decorator2>>>End...")
  15. returnret
  16. returninner
  17. @decorator1
  18. @decorator2
  19. defindex():
  20. print("执行函数...")
  21. index()

输出结果:

  1. /usr/bin/python3.5/home/ansheng/Documents/PycharmProjects/blogcodes/装饰器.py
  2. 开始之前执行装饰器01
  3. decorator2>>>Start...
  4. 执行函数...
  5. decorator2>>>End...
  6. 结束之后执行装饰器01
  7. Processfinishedwithexitcode0

更多实例

  1. #!/usr/bin/envpython
  2. #_*_coding:utf-8_*_
  3. #Createdby安生on2017/2/9
  4. """
  5. 函数装饰器
  6. """
  7. defdecorator(func):
  8. defwrapped(*args,**kwargs):
  9. returnfunc(*args,**kwargs)
  10. returnwrapped
  11. @decorator
  12. deffunc(a,b):
  13. returna+b
  14. print(func(1,2))
  15. """
  16. 类装饰器
  17. """
  18. classdecorator:
  19. def__init__(self,func):
  20. self.func=func
  21. def__call__(self,*args,**kwargs):
  22. returnself.func(*args,**kwargs)
  23. @decorator
  24. deffunc(a,b):
  25. returna+b
  26. print(func(1,2))
  27. """
  28. 带参数的函数装饰器
  29. """
  30. defparameter(a,b):
  31. print(a,b)
  32. defdecorator(func):
  33. defwrapped(*args,**kwargs):
  34. returnfunc(*args,**kwargs)
  35. returnwrapped
  36. returndecorator
  37. @parameter(1,2)
  38. deffunc(a,b):
  39. returna+b
  40. print(func(10,20))
  41. """
  42. 带参数的类装饰器
  43. """
  44. defparameter(a,b):
  45. print(a+b)
  46. classdecorator:
  47. def__init__(self,func):
  48. self.func=func
  49. def__call__(self,*args,**kwargs):
  50. returnself.func(*args,**kwargs)
  51. returndecorator
  52. @parameter(1,2)
  53. deffunc(a,b):
  54. returna+b
  55. print(func(10,20))
  56. """
  57. 带参数的类装饰器
  58. """
  59. defparameter(a,b):
  60. print(a,b)
  61. defdecorator(cls):
  62. classwrapped:
  63. def__init__(self,*args,**kwargs):
  64. self.cls=cls(*args,**kwargs)
  65. def__getattr__(self,item):
  66. returngetattr(self.cls,item)
  67. returnwrapped
  68. returndecorator
  69. @parameter(1,2)
  70. classCLS:
  71. def__init__(self):
  72. self.a='a'
  73. defP(self,v):
  74. print(v)
  75. obj=CLS()
  76. print(obj.a)
  77. obj.P('Hello,')
  78. """
  79. 为函数中和类中的方法添加装饰器
  80. """
  81. defCall(aClass):
  82. calls=0
  83. defonCall(*args,**kwargs):
  84. nonlocalcalls
  85. calls+=1
  86. print('call%sto%s'%(calls,func.__name__))
  87. returnaClass(*args,**kwargs)
  88. returnonCall
  89. @Call
  90. deffunc(a,b):
  91. returna+b
  92. print(func(1,2))
  93. classCLS:
  94. def__init__(self):
  95. self.a='a'
  96. @Call
  97. defb(self):
  98. returnself.a
  99. obj=CLS()
  100. print(obj.b())

©本文为清一色官方代发,观点仅代表作者本人,与清一色无关。清一色对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文不作为投资理财建议,请读者仅作参考,并请自行承担全部责任。文中部分文字/图片/视频/音频等来源于网络,如侵犯到著作权人的权利,请与我们联系(微信/QQ:1074760229)。转载请注明出处:清一色财经

(0)
打赏 微信扫码打赏 微信扫码打赏 支付宝扫码打赏 支付宝扫码打赏
清一色的头像清一色管理团队
上一篇 2023年5月5日 03:37
下一篇 2023年5月5日 03:37

相关推荐

发表评论

登录后才能评论

联系我们

在线咨询:1643011589-QQbutton

手机:13798586780

QQ/微信:1074760229

QQ群:551893940

工作时间:工作日9:00-18:00,节假日休息

关注微信