Python 的哪些特性或用法讓你相見恨晚?

時間 2021-06-02 11:33:15

1樓:lbaby

我能知道的就只有列表生成吧

其他的像re, yield,協程,裝飾器,lame lambda和函式特性,列表迭代,別的語言也有。

吐槽一句,一直不喜歡Python太囉嗦,還各種exception.

2樓:

下面主要是站在乙個C++使用者角度而言,很好用的一些特性:

函式式程式設計的幾個map,reduce,filter;【lambda就不說了】

函式生成列表,[x**2 for x in range(10)],甚至[x**2 for x in range(10) if x%3 != 0],可讀性一級棒!

除了range生成列表,還可以用xrange生成,比如判斷是否是質數那些函式你可能中途就退出了,就不必一開始生成整個列表;而這個自然而然就引出了yield這個神器!對乙個問題所有可能的解逐個進行操作這種演算法實現起來超級簡單!

for line in open('a.txt','w'):

orfor date,data in GetAllData():

if __name__ == "__main__"

這個東西可以在寫乙個api的py檔案時,直接在裡面寫好測試函式,而在被外面呼叫的時候,這裡面的測試函式又會被忽略;【用處好像不大,但是「使用者體驗」很好。。】【可以不用標明main函式算不算乙個好特性?】

urllib這個庫

dict這個類還有集合set()

暫時這麼多

3樓:項楠

讓我們大喊三聲:

遞迴+yield 真好用啊

遞迴+yield真好用啊

遞迴+yield真好用啊

這絕對是解決一些難題的專用利器.我用它來實現自定義的資料夾遍歷函式..對比os.walk函式,我可以在遍歷時進行任何操作,靈活許多.

我用它實現了巢狀字典的漂亮輸出,在未理解遞迴之前,我不敢想象自己能解決這種問題.上例子:

defsuperPrint

(inidic

={},

indent

=chr(32

)):length

=len

(inidic

)fori,

dinenumerate

(inidic

.items

()):

#if the k or v is string object,add ' to both sidesk,

v=["'

%s'"%x

ifisinstance(x

,(str

,unicode

))else

xforxin

d]#if the v is dict object,recurse across v and return a string

ifisinstance(v

,dict):v

=''.join

(superPrint(v

,indent

+chr(32

)*(len

(str(k

))+3)))

iflength==1

:yield""%

(k,v

)elifi==

0:yield""%

(indent,k

,v)else

:yield

"%s%s

: %s,\n

"%(indent,k

,v)大家可以自定義個巢狀字典x,然後執行:

print''.

join

(superPrint(x

))我這裡有個現成的可以試試:

x=}}},

'x': ,

2: 'absolute',

'zeros': 'leading',

'gerber-command': 'FS'}

說明:字典的最大巢狀層數需小於1000,因為Python遞迴有限制,但一般夠用了.

4樓:姚鋼強

測試程式執行的時間import time

class Timer:

def __enter__(selfself.start = time.clockreturn self

def __exit__(self,*argsself.end = time.clockself.interval = self.end-self.start

with Timer() as t:

dosomesuch()

print t.interval

list comprehension dict and set comprehensions, too>>>

>>>set([0, 40, 10, 20, 30])

Counterfrom collections import Counter

counter = Counter(items)

zip>>> l = [[1, 2, 3], [4, 5, 6]]

>>> zip(*l)

[(1, 4), (2, 5), (3, 6)]

alist = ['a1', 'a2', 'a3']

blist = ['b1', 'b2', 'b3']

for a, b in zip(alist, blist):

print a, b

enumerate>>> a = ['a', 'b', 'c', 'd', 'e']

>>> for index, item in enumerate(aprint index, item0 a

1 b2 c

3 d4 eif a < b < c:

pass

x, y = y, x

defaultdict>>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]

>>> d = defaultdict(list)

>>> d.items()

[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

5樓:

Hidden features of Python

>>>x=

5>>>

1

>>>10>x<=9True

正則除錯:re.

compile

("^\[font(?:=(?P[-+][0-9]

>>> value = 'a'

>>> sum[value] = sum.get(value, 0) + 1

矩陣轉置:

>>> a = [(1,2), (3,4), (5,6)]

>>> zip(*a)

[(1, 3, 5), (2, 4, 6)]

map, reduce, filter:

>>> map(lambda x:x*2, xrange(0,10))

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

>>> filter(lambda x:x%2==0, xrange(0,10))

[0, 2, 4, 6, 8]

>>> reduce(lambda x,y:x+y, xrange(0,10))45

6樓:

比較喜歡map ,reduce,filter省去了很多廢話有沒有,還有list comprehension。。。

還有高階函式,閉包。。

另外麼,getattr ,hasattr函式吧。。。

with as 結構

in關鍵字也很省事。。

其實這些特性別的語言也有,但是第一次見是在python中。。

數學中「和」和「或」用法的區別?

已登出 漢字的和 或兩個字在使用的時候完全看習慣,這只是乙個單純的語文問題。像問題中給出的這個例子或 和兩個字能夠互換,並且沒有語義上的差距。順道一說,這種情況下,有時犯懶會省略掉連線詞,直接用逗號隔開,這樣也沒有錯。如果表示邏輯關係,那麼請使用邏輯連線詞 以消除歧義,在用法上前者表示 當且僅當 均...

日語中哪些詞的讀音或用法與中國普通話差異很大,卻與中國某些方言相同或相近?

唐音 的 唐 與 吳音 的 吳 和 漢音 的 漢 一樣,並非指朝代,而是對中國的泛稱。吳音 日語 呉音 是日本漢字音 音讀 的一種,指奈良時代由遣隋使 遣唐使和留學僧從長安學習到漢音並將其帶回國之前已在日本使用的漢字音。吳音與漢音一樣主要傳承了中古漢語的特徵。一般認為吳音在南北朝時代 西元五至六世紀...

如何使用Python的膠水語言特性?

可以這麼理解,Python是語言的操作介面。C語言等為了各種原因 主要是效能 有諸多對程式設計師不太不友好的性質,比如嚴格型別,函式沒有字面量,這些性質在編寫如作業系統,資料庫時是有益甚至必須的。Python則能讓程式設計師更多的思考演算法本身,比如資料庫或檔案的底層操作一般是C或C 寫的,使用Py...