对Python生成器、装饰器、递归的使用详解
1、Python生成器表达式
1)、Python生成器表达式
语法格式:
(exprforiter_variniterable)
(exprforiter_variniterableifcond_expr)
2)、自定义生成器
函数中使用yield,会返回一个生成器对象。yieldx
生成器使用示例:
In[1]:list((i**2foriinrange(1,11))) Out[1]:[1,4,9,16,25,36,49,64,81,100] In[2]:defgenNum(x): ...:y=0 ...:whiley<=x: ...:yieldy ...:y+=1 In[3]:g1=genNum(4) In[4]:type(g1) Out[4]:generator In[5]:g1.next() Out[5]:0 In[6]:g1.next() Out[6]:1 In[7]:g1.next() Out[7]:2 In[8]:g1.next() Out[8]:3 In[9]:g1.next() Out[9]:4 In[10]:g1.next() -------------------------------------------------- StopIterationTraceback(mostrecentcalllast) in() ---->1g1.next() StopIteration: In[11]:defgenNum(n): ....:i=1 ....:whilei<=n: ....:yieldi**2 ....:i+=1 In[12]:g1=genNum(20) In[13]:foriing1: ....:printi, ....: 149162536496481100121144169196225256289324361400
2、Python装饰器
1)、装饰器本身是一个函数,用于装饰其它函数;
2)、功能:增强被装饰函数的功能;
装饰器一般接受一个函数对象作为参数,以对其进行增强
例1:装饰器使用示例
In[1]:defdecorater(func): ...:defwrapper(): ...:print"JustaDecorater!" ...:func() ...:raw_input('PleaseInputyourname:') ...:returnwrapper ...: In[2]:@decorater ...:defshow(): ...:print"IamfromChina." ...: In[3]:show() JustaDecorater! IamfromChina. PleaseInputyourname:Fieldyang
例2:对能够传入参数的函数进行装饰
In[1]:defdecorater(func): ...:defwrapper(x): ...:print"JustaDecorater!" ...:func(x) ...:raw_input('PleaseInputyourname:') ...:returnwrapper ...: In[2]:@decorater ...:defshow(x): ...:print"IamfromChina.%s"%x ...: In[3]:show('howareyou?') JustaDecorater! IamfromChina.howareyou? PleaseInputyourname:Fieldyang
3、Python递归
递归需要边界条件,递归前进段和递归返回段;
10*9*8*7*6*5*4*3*2*1 10*(10-1)*((10-1)-1)*...
递归函数使用示例:
In[1]:defrecursion(n): ...:ifn<=1:return1 ...:else:returnn*recursion(n-1) ...:
#递归函数相当于如下过程:
In[2]:recursion(3)=3*recursion(2)=3*2*recursion(1)=3*2*1 KeyboardInterrupt In[3]:recursion(3) Out[3]:6 In[4]:recursion(4) Out[4]:24 In[5]:recursion(5) Out[5]:120 In[6]:recursion(10) Out[6]:3628800
以上这篇对Python生成器、装饰器、递归的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。