高顏值的Python

本文旨在收集記錄分享簡(jiǎn)潔漂亮的Python寫法,歡迎補(bǔ)充

字典/集合推導(dǎo)式(dict/set comprehension)

類似于列表推導(dǎo)式:

my_dict = {i: i * i for i in xrange(100)} 
my_set = {i * 15 for i in xrange(100)}
#這倆在寫法上的區(qū)別只是字典推導(dǎo)式多了一個(gè)':'
Caution:

區(qū)別一下三種寫法:

>>>my_set={i*15 for i in xrange(100)}
>>>my_list=[i*15 for i in xrange(100)]
>>>my_generator=(i*15 for i in xrange(100))

>>>print "my_set", type(my_set)
my_set <type 'set'>
>>>print "my_list", type(my_list)
my_list <type 'list'>
>>>print "my_generator", type(my_generator)
my_generator <type 'generator'>

枚舉 (enumerate)

要在枚舉過程中使用序號(hào)令野,可以使用enumerate優(yōu)雅地實(shí)現(xiàn):

#i從0開始,每次加1
for i, item in enumerate(iterable):
    print i, item
#i從2開始
for i, item in enumerate(iterable, 2):
    print i, item

強(qiáng)制浮點(diǎn)數(shù)除法

如果我們對(duì)兩個(gè)整數(shù)做/除法,Python 2 返回的是一個(gè)整數(shù)求厕,如需返回浮點(diǎn)數(shù)的結(jié)果桶至,在Python 2.x中通常會(huì)這么做:

>>>1.0/2
0.5

可以這樣更漂亮地實(shí)現(xiàn):

>>>from __future__ import division 
>>>1/2
0.5

而在Python 3中晾匠,/是真除赠叼,默認(rèn)精確到小數(shù)點(diǎn)后一位擦囊。

使用literal_eval()

我們都知道eval:

 expr = "[1, 2, 3]" 
my_list = eval(expr)

但估計(jì)沒幾個(gè)人知道literal_eval( ):

import ast 
my_list = ast.literal_eval(expr)

(看起來好像并沒有變漂亮呢,但ast.literal_eval()更安全嘴办。)

用dir( )查看一個(gè)Python對(duì)象

>>> foo = [1, 2, 3, 4]
>>> dir(foo) 
['__add__', '__class__', '__contains__', 
'__delattr__', '__delitem__', '__delslice__', ... , 
'extend', 'index', 'insert', 'pop', 'remove', 
'reverse', 'sort']

調(diào)試腳本

利用pdb模塊可以輕松地在腳本中設(shè)置斷點(diǎn):

import pdb
pdb.set_trace()

你可以在腳本的任何位置加上pdb.set_trace()來設(shè)置斷點(diǎn)。

簡(jiǎn)化if 結(jié)構(gòu)

當(dāng)有多個(gè)值需要檢驗(yàn)的時(shí)候买鸽,通常會(huì)這么寫:

if n==1 or n==4 or n==5 or n==6:

更漂亮的寫法是:

if n in [1,4,5,6]:

反轉(zhuǎn)列表/字符串

你可以這樣快速地反轉(zhuǎn)一個(gè)列表:

>>>a=[1,2,3]
>>>a[::-1]
[3,2,1]

這樣會(huì)生成一個(gè)新的列表涧郊,原列表不會(huì)變。如果你想在原地反轉(zhuǎn)列表眼五,可以這樣:

>>> a.reverse()
>>> a
[3, 2, 1]

字符串類型string是不可變類型妆艘,因此也就沒有reverse( )咯。

行內(nèi)if 聲明

a=1 if b>c else -1

print a if b>c else d

交換兩個(gè)變量

a, b=b, a

連續(xù)賦值

a, b, c=1, 2, 3

串聯(lián)

>>>a=[1,2]
>>>b=[3,4]
>>>a+b
[1,2,3,4]
>>>print str(1) + " a"
1 a
>>>print `1` + " b"
1 b
>>>print 1, " c"
1 c

地板除 (Python 2.2以后)

>>>5//2
2
>>>5.0//2
2.0

乘方

#a**b, a的b次方
>>>2**5
32

級(jí)聯(lián)比較

if a<b<c:
    blabla...

if a<b>c:
    blabla...

同時(shí)遍歷兩個(gè)列表:

names=['Tom','Jerry']
ages=[23,17]
for name, age in zip(names, ages):
    print name, age

建立并初始化列表

#一維
a=[0]*4
#二維, 3行4列
b=[[0]*4 for i in range(3)]

join( )

>>>a=['my', 'life', 'is', 'awesome']
>>>print '!'.join(a)
my!life!is!awesome

獲取字典內(nèi)的元素

#bad implementation:
dix={'Tom':23}
try:
    name=dix['Tom']
except KeyError:
    name='Default'
#good implementation:
name=dix.get('Tom', 'Default')

截取列表的一部分

>>>a = [1,2,3,4,5,6]
>>>a[:3]
[1,2,3]
>>>a[1:5]
[2,3,4,5]
>>>a[-3:]
[4,5,6]
>>>a[::2]
[1,3,5]
>>>a[1::2]
[2,4,6]

這里的a[x:y:z], x和y分別是下標(biāo)起點(diǎn)看幼,下標(biāo)終點(diǎn)+1批旺,z是間隔值。于是就能理解為啥a[::-1]能得到一個(gè)反轉(zhuǎn)的列表了诵姜。

向列表添加元素

my_list=[1,2,3]
my_list+=4,
#my_list變成了[1,2,3,4]
my_list+=[5]
#my_list變成了[1,2,3,4,5]

參考:

Python Shortcuts for the Python Beginner

不斷更新中...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汽煮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子棚唆,更是在濱河造成了極大的恐慌暇赤,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,835評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宵凌,死亡現(xiàn)場(chǎng)離奇詭異鞋囊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞎惫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門踊餐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人吉执,你說我怎么就攤上這事涕蚤。” “怎么了欠橘?”我有些...
    開封第一講書人閱讀 156,481評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵矩肩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng)黍檩,這世上最難降的妖魔是什么叉袍? 我笑而不...
    開封第一講書人閱讀 56,303評(píng)論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮刽酱,結(jié)果婚禮上喳逛,老公的妹妹穿的比我還像新娘。我一直安慰自己棵里,他們只是感情好润文,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,375評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著殿怜,像睡著了一般典蝌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上头谜,一...
    開封第一講書人閱讀 49,729評(píng)論 1 289
  • 那天骏掀,我揣著相機(jī)與錄音,去河邊找鬼柱告。 笑死截驮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的际度。 我是一名探鬼主播葵袭,決...
    沈念sama閱讀 38,877評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乖菱!你這毒婦竟也來了坡锡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,633評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤块请,失蹤者是張志新(化名)和其女友劉穎娜氏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墩新,經(jīng)...
    沈念sama閱讀 44,088評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贸弥,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,443評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了海渊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绵疲。...
    茶點(diǎn)故事閱讀 38,563評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖臣疑,靈堂內(nèi)的尸體忽然破棺而出盔憨,到底是詐尸還是另有隱情,我是刑警寧澤讯沈,帶...
    沈念sama閱讀 34,251評(píng)論 4 328
  • 正文 年R本政府宣布郁岩,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏问慎。R本人自食惡果不足惜萍摊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,827評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望如叼。 院中可真熱鬧冰木,春花似錦、人聲如沸笼恰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽社证。三九已至逼龟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間追葡,已是汗流浹背审轮。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辽俗,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,240評(píng)論 2 360
  • 正文 我出身青樓篡诽,卻偏偏與公主長(zhǎng)得像崖飘,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杈女,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,435評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容