您好,登錄后才能下訂單哦!
一、三元運(yùn)算(式)
對(duì)于一般簡(jiǎn)單的if else條件判斷句可以用三元運(yùn)算來(lái)表示
具體模式為:
if condition: expr1 else: expr2 等價(jià)于: expr1 if condition else expr2
解釋:如果if condition條件成立就執(zhí)行expr1表達(dá)式,否則就執(zhí)行else expr2表達(dá)式
示例①
>>> if 2 == 2: ... name = 'cool' ... else: ... name ='hot' ... >>> name = 'cool' if 2==2 else 'hot' >>> print name cool >>>
二、lambda表達(dá)式:
對(duì)于簡(jiǎn)單的函數(shù)可以用另外一種方式來(lái)代替,即lambda
比如有如下函數(shù):
>>> def fun(arg): ... return arg + arg ... >>> >>> result = fun(100) >>> print result 200 >>>
定義一個(gè)變量f_lambda,將lambda arg:arg+1賦予f_lambda
>>> f_lambda = lambda arg:arg +1 >>> result = f_lambda(111) >>> print result 112 >>>
也可以用其他表達(dá)式:
>>> test = lambda a:a**2 >>> test_result = test(3) >>> print test_result 9 >>>
從上面的例子可以看出,lambda后面表達(dá)式可以隨意定義,只要符合Python的語(yǔ)法要求。
lambda表達(dá)式:
①用于處理簡(jiǎn)單邏輯
②會(huì)自動(dòng)返回?cái)?shù)據(jù)
三、內(nèi)置函數(shù)map
map的作用是對(duì)序列中每個(gè)元素進(jìn)行操作,然后輸出新的序列
>>> num1 = [10,9,8,7,6] >>> num2 = map(lambda a:a**2,num1) >>> print num2 [100, 81, 64, 49, 36] >>> >>> num3 = [1,2,3,4,5] >>> num4 = map(lambda a,b:a -b,num1,num3) >>> print num4 [9, 7, 5, 3, 1] >>>
或者
>>> num = [12,33,55,85] >>> def func(arg): ... return arg + 10 ... >>> new_num = map(func,num) >>> print new_num [22, 43, 65, 95] >>>
對(duì)于上述例子實(shí)質(zhì)解釋如下:
>>> new_num = [] >>> for item in num: ... new_item = item + 10 ... new_num.append(new_item) ... >>> >>> print new_num [22, 43, 65, 95]
四、內(nèi)置函數(shù)filter
filter的作用的是將序列中滿足條件的過(guò)濾出來(lái)然后形成新的序列
>>> num1 = [10,9,8,7,6] >>> tmp = filter(lambda arg:arg >5,num1) >>> print tmp [10, 9, 8, 7, 6] >>>
或者
>>> tmp2 = filter(lambda n:n >5,num1) >>> print tmp2 [10, 9, 8, 7, 6] >>>
或者
#!/usr/bin/env python # -*- coding:utf8 -*- num = [11,22,0,33] print filter(None,num) [root@Python day004]# python lam.py [11, 22, 33] [root@Python day004]# [root@Python day004]# cat lam.py #!/usr/bin/env python # -*- coding:utf8 -*- num = [11,22,0,33,""] print filter(None,num) [root@Python day004]# python lam.py [11, 22, 33] [root@Python day004]# cat lam.py #!/usr/bin/env python # -*- coding:utf8 -*- num = [11,22,0,33,"",False] print filter(None,num) [root@Python day004]# python lam.py [11, 22, 33]
小結(jié):從上可以發(fā)現(xiàn),默認(rèn)情況下,當(dāng)用filter進(jìn)行處理數(shù)據(jù)時(shí),filter會(huì)將布爾值為真的輸出(一般將布爾值為True的返回到新列表中,反之不會(huì)返回到新列表中),為假的忽略掉;當(dāng)然filter中也可以傳入函數(shù),如上例中的lambda語(yǔ)句;
五、內(nèi)置函數(shù)reduce
reduce的作用是對(duì)序列內(nèi)的所有元素進(jìn)行操作
>>> num1 = [10,9,8,7,6] >>> result =reduce(lambda arg1,arg2:arg1+arg2,num1) >>> print result 40 >>> num5 = [1,2,3,4,5,6] >>> sum = reduce(lambda a,b:a+b,num5) >>> print sum 21 >>>
# reduce的第一個(gè)參數(shù),函數(shù)必須要有兩個(gè)參數(shù)
# reduce的第二個(gè)參數(shù),要循環(huán)的序列
# reduce的第三個(gè)參數(shù),初始值
六、yield生成器(它可以記住上一次的操作,下次再執(zhí)行時(shí),繼續(xù)執(zhí)行)
#!/usr/bin/env python # -*- coding:utf-8 -*- def func(): pass return 1 return 2 return 3 result = func() print result
執(zhí)行以上代碼,輸出結(jié)果:
D:\Python27\python.exe C:/Users/ryan/PycharmProjects/day04/yield.py 1 Process finished with exit code 0
發(fā)現(xiàn)函數(shù)返回的只有1,后面的2、3都沒(méi)有返回,這里說(shuō)明return語(yǔ)句結(jié)束后,代表函數(shù)體生命周期結(jié)束,接下來(lái)講return替換成yield
#!/usr/bin/env python # -*- coding:utf-8 -*- def func(): pass yield 1 yield 2 yield 3 for i in func(): print i
輸出結(jié)果:
1 2 3
1、對(duì)比range和xrange的區(qū)別
有如下例子:
>>> print range(8) [0, 1, 2, 3, 4, 5, 6, 7] >>> print xrange(8) xrange(8) >>>
從上面可以發(fā)現(xiàn),range和xrange的區(qū)別是:
range可以生成一個(gè)列表,即在內(nèi)存中創(chuàng)建指定的數(shù)字,而xrange則不會(huì),接著往下看:
>>> for n in xrange(8): ... print n ... 0 1 2 3 4 5 6 7 >>>
xrange只有在進(jìn)行循環(huán)的時(shí)候才會(huì)創(chuàng)建數(shù)字,即在迭代的時(shí)候才會(huì)去創(chuàng)建;
>>> def nrange(num): ... temp = -1 ... while True: ... temp = temp +1 ... if temp >= num: ... return ... else: ... yield temp ... >>> nrange(10) <generator object nrange at 0x7fe42d0bd820> >>>
2、文件操作的read和xreadlines的區(qū)別
①read會(huì)讀取所有內(nèi)容到內(nèi)存中
②xreadlines則只會(huì)在循環(huán)迭代時(shí)才獲取數(shù)據(jù)
def NReadlines(): with open('log','r') as f: while True: line = f.next() if line: yield line else: return for i in NReadlines(): print i
注:基于next自定義生成器NReadlines
def NReadlines(): with open('log','r') as f: seek = 0 while True: f.seek(seek) data = f.readline() if data: seek = f.tell() yield data else: return for item in NReadlines(): print item
基于seek和tell自定義生成器NReadlines
七、裝飾器
裝飾器是函數(shù),只不過(guò)該函數(shù)可以具有特殊的含義,裝飾器用來(lái)裝飾函數(shù)或者類,使用裝飾器可以在函數(shù)執(zhí)行前和執(zhí)行后添加相應(yīng)的操作
def wrapper(func): def result(): print 'before' func() print 'after' return result @wrapper def foo(): print 'foo'
import functools def wrapper(func): @functools.wraps(func) def wrapper(): print 'before' func() print 'after' return wrapper @wrapper def foo(): print 'foo'
示例代碼:
#!/usr/bin/env python #coding:utf-8 def Before(request,kargs): print 'before' def After(request,kargs): print 'after' def Filter(before_func,after_func): def outer(main_func): def wrapper(request,kargs): before_result = before_func(request,kargs) if(before_result != None): return before_result; main_result = main_func(request,kargs) if(main_result != None): return main_result; after_result = after_func(request,kargs) if(after_result != None): return after_result; return wrapper return outer @Filter(Before, After) def Index(request,kargs): print 'index' if __name__ == '__main__': Index(1,2)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。