一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

不會吧!還有人不知道python專屬騷技巧15例

 山峰云繞 2021-03-19

這里我總結(jié)了15個關(guān)于python的騷技巧,實屬提高工作效率、同事間吹牛利器,走過路過千萬別錯過,趕緊收藏起來吧。

1.巧用else語句(重要)

python的else 子句不僅能在 if 語句中使用,還能在 for、while 和 try 等語句中使用,這個語言特性不是什么秘密,但卻沒有得到重視。

for:

l=[1,2,3,4,5]for i in l: if i=='6': print(666) breakelse: print(999)

如果不這么實現(xiàn),我們只能設(shè)置一個變量來記錄了:

l=[1,2,3,4,5]a=1for i in l:    if i=='6':        print(666)        a=0        breakif a:    print(999)

while和for類似

看一下try:

try: a()except OSError: #語句1else: #語句2

僅當(dāng) try 塊中沒有異常拋出時才運行 else 塊。

總結(jié)一下else:

for:

  僅當(dāng) for 循環(huán)運行完畢時(即 for 循環(huán)沒有被 break 語句中止)才運行 else 塊。

while:

  僅當(dāng) while 循環(huán)因為條件為假值而退出時(即 while 循環(huán)沒有被break 語句中止)才運行 else 塊。

try:

  僅當(dāng) try 塊中沒有異常拋出時才運行 else 塊。

2. map()

map()函數(shù)接收兩個參數(shù),一個是函數(shù),一個是Iterable,map將傳入的函數(shù)依次作用到序列的每個元素,并把結(jié)果作為新的Iterator返回。(重點理解)

舉例說明,比如我們有一個函數(shù)f(x)=x2,要把這個函數(shù)作用在一個list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()實現(xiàn)如下:

>>> def f(x):...     return x * x...>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])>>> list(r)[1, 4, 9, 16, 25, 36, 49, 64, 81]

map()作為高階函數(shù),事實上它把運算規(guī)則抽象了,因此,我們不但可以計算簡單的f(x)=x2,還可以計算任意復(fù)雜的函數(shù),比如,把這個list所有數(shù)字轉(zhuǎn)為字符串:

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))['1', '2', '3', '4', '5', '6', '7', '8', '9']

3.sorted

   >>> sorted([36, 5, -12, 9, -21])[-21, -12, 5, 9, 36]#可以接收一個key函數(shù)來實現(xiàn)自定義的排序,例如按絕對值大小排序:>>> sorted([36, 5, -12, 9, -21], key=abs)[5, 9, -12, -21, 36]

我們再看一個字符串排序的例子:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'])['Credit', 'Zoo', 'about', 'bob']

默認(rèn)情況下,對字符串排序,是按照ASCII的大小比較的,由于'Z' < 'a',結(jié)果,大寫字母Z會排在小寫字母a的前面。

現(xiàn)在,我們提出排序應(yīng)該忽略大小寫,按照字母順序排序。要實現(xiàn)這個算法,不必對現(xiàn)有代碼大加改動,只要我們能用一個key函數(shù)把字符串映射為忽略大小寫排序即可。忽略大小寫來比較兩個字符串,實際上就是先把字符串都變成大寫(或者都變成小寫),再比較。

這樣,我們給sorted傳入key函數(shù),即可實現(xiàn)忽略大小寫的排序:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)['about', 'bob', 'Credit', 'Zoo']

要進(jìn)行反向排序,不必改動key函數(shù),可以傳入第三個參數(shù)reverse=True:

>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)['Zoo', 'Credit', 'bob', 'about']

從上述例子可以看出,高階函數(shù)的抽象能力是非常強(qiáng)大的,而且,核心代碼可以保持得非常簡潔。

sorted()也是一個高階函數(shù)。用sorted()排序的關(guān)鍵在于實現(xiàn)一個映射函數(shù)。

4.split

Python split() 通過指定分隔符對字符串進(jìn)行切片,如果參數(shù) num 有指定值,則僅分隔 num 個子字符串。

語法:

str.split(str='', num=string.count(str))

簡化:

str.split('')

5.reduce

reduce把一個函數(shù)作用在一個序列[x1, x2, x3, ...]上,這個函數(shù)必須接收兩個參數(shù),reduce把結(jié)果繼續(xù)和序列的下一個元素做累積計算

簡單例子:

>>> from functools import reduce>>> def fn(x, y): return x * 10 + y >>> reduce(fn, [1, 3, 5, 7, 9])13579

結(jié)合一下,我們可以自己寫出int()函數(shù)

from functools import reduce a={'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9} def charnum(s):    return a[s] def strint(s):    return reduce(lambda x, y: x * 10 + y, map(charnum, s))

6.python自省

這個也是python彪悍的特性.自省就是面向?qū)ο蟮恼Z言所寫的程序在運行時,所能知道對象的類型.簡單一句就是運行時能夠獲得對象的類型.比如type(),dir(),getattr(),hasattr(),isinstance().

7.python容器

列表:元素可變(任何數(shù)據(jù)類型),有序(可索引),append/insert/pop;

元組:元素不可變,但元素中的可變元素是可變的;有序(可索引);而且元組可以被散列,例如作為字典的鍵。

集合:無序(不可被索引)、互異

字典:無序,鍵值對(key:value),key唯一不可重復(fù)

8.調(diào)試腳本

我們可以在 <pdb> 模塊的幫助下在 Python 腳本中設(shè)置斷點,例如:

import pdbpdb.set_trace()

9.多行字符串

這個比c方便多了,c打上換行符再加上轉(zhuǎn)義,真的很難受

a='''dvfssdfsdfdsfsddsdsfbfdfasfafasfaf'''print(a)

10.in判斷

可以直接用來判斷某個變量是否在列表中

我們可以使用下面的方式來驗證多個值:

if m in [1,3,5,7]:

而不是:

if m==1 or m==3 or m==5 or m==7:

11.四種翻轉(zhuǎn)字符串/列表的方式

*翻轉(zhuǎn)列表本身

testList = [1, 3, 5]testList.reverse()print(testList)#-> [5, 3, 1]

*在一個循環(huán)中翻轉(zhuǎn)并迭代輸出

for element in reversed([1,3,5]):    print(element)  #1-> 5 #2-> 3 #3-> 1

* 一行代碼翻轉(zhuǎn)字符串

'Test Python'[::-1] #輸出 “nohtyP tseT”

*使用切片翻轉(zhuǎn)列表

[1, 3, 5][::-1]   #輸出 [5,3,1]。

12.拼接字符串

眾所周知,python中字符串可以相加:

a='i 'b='love 'c='you'print(a+b+c)

拼接列表中的所有元素為一個字符串

l=['a','b','c']print(''join(l))#以join左邊的字符做分割

13.字典推導(dǎo)

Python不光列表用推導(dǎo)式,字典/集合也有

#列表l=[[0 for i in range(4)] for i in range(4)]#生成二維列表print(l)# [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
testDict = {i: i * i for i in xrange(10)}testSet = {i * 2 for i in xrange(10)} print(testSet)print(testDict) #set([0, 2, 4, 6, 8, 10, 12, 14, 16, 18])#{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

14.返回多個值

并沒有太多編程語言支持這個特性,然而 Python 中的方法確實(可以)返回多個值

def a(): return 1,2,3,4,5

15.開啟文件共享

Python 允許運行一個 HTTP 服務(wù)器來從根路徑共享文件,下面是開啟服務(wù)器的命令:

python3 -m http.server

上面的命令會在默認(rèn)端口也就是 8000 開啟一個服務(wù)器,你可以將一個自定義的端口號以最后一個參數(shù)的方式傳遞到上面的命令中。

感謝閱讀!

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    激情中文字幕在线观看| 久草国产精品一区二区| 少妇一区二区三区精品| 亚洲国产精品av在线观看| 成人你懂的在线免费视频| 国产精欧美一区二区三区久久| 福利专区 久久精品午夜| 日本免费熟女一区二区三区| 国产日韩久久精品一区| 亚洲国产香蕉视频在线观看| 色一情一乱一区二区三区码| 国产91麻豆精品成人区| 久久亚洲精品成人国产| 国产精品亚洲精品亚洲| 国产成人av在线免播放观看av| 欧美一区日韩一区日韩一区| 欧美色欧美亚洲日在线| 日韩一区二区免费在线观看| 日韩欧美三级视频在线| 日韩av欧美中文字幕| 欧洲一区二区三区蜜桃| 亚洲中文字幕有码在线观看| 深夜日本福利在线观看| 成人午夜视频在线播放| 午夜视频在线观看日韩| 九九热这里只有精品视频| 精品人妻一区二区三区四在线| 97人妻人人揉人人躁人人| 中文字幕精品少妇人妻| 日韩一级免费中文字幕视频| 又色又爽又黄的三级视频| 欧美日韩精品久久亚洲区熟妇人| 日本少妇三级三级三级| 亚洲丁香婷婷久久一区| 国产成人高清精品尤物| 亚洲伊人久久精品国产| 国产级别精品一区二区视频| 91人妻久久精品一区二区三区| 熟女体下毛荫荫黑森林自拍| 欧美区一区二在线播放| 空之色水之色在线播放|