Python編程中需要注意的一些事

優(yōu)雅勝于丑陋 (Beautiful is better than ugly)

看下面例子:

一個(gè)帶有數(shù)字參數(shù)的list函數(shù)其功能是返回參數(shù)中的奇數(shù)可以分開寫:

Python


6#-----------------------------------------------------------------------

halve_evens_only=lambdanums:map(lambdai:i/2,\

filter(lambdai:noti%2,nums))

#-----------------------------------------------------------------------

defhalve_evens_only(nums):

return[i/2foriinnumsifnoti%2]

記住Python中那些非常簡單的事

兩個(gè)變量的交換:

Python

1

a,b=b,a

參數(shù)在切片操作中的步驟狼忱,如:

Python

1

2

3a=[1,2,3,4,5]

>>>a[::2]# 以步長為2的增量迭代整個(gè)list對(duì)象

[1,3,5]

Python

1

一個(gè)特殊的例子`x[::-1]`用來反轉(zhuǎn)x的實(shí)用語法战转。

1

Python

1

2>>>a[::-1]

[5,4,3,2,1]

不要用可變對(duì)象作為默認(rèn)參數(shù)值(Don’t use mutable as defaults)

Python


4deffunction(x,l=[]):# 不要這么干

deffunction(x,l=None):# 更好的一種方式

iflisNone:

l=[]

使用iteritems而不是items

iteriterms 使用的是 generators,所以當(dāng)?shù)艽蟮男蛄惺谴朔椒ǜ?/p>


Python


5d={1:"1",2:"2",3:"3"}

forkey,valind.items()# 調(diào)用items()后會(huì)構(gòu)建一個(gè)完整的list對(duì)象

forkey,valind.iteritems()# 只有在迭代時(shí)每請(qǐng)求一次才生成一個(gè)值

此情景和range與xrange的關(guān)系相似。

使用isinstance而不是type

不要這樣做:

1

Python

1

2

3iftype(s)==type(""):...

iftype(seq)==listor\

type(seq)==tuple:...

應(yīng)該是這樣:

1

Python

1

2ifisinstance(s,basestring):...

ifisinstance(seq,(list,tuple)):...


需要注意的是這里使用basestring而不是str是因?yàn)槟憧赡軙?huì)用一個(gè)unicode對(duì)象去檢查是否為string,例如:


Python


5>>>a=u'aaaa'

>>>printisinstance(a,basestring)

True

>>>printisinstance(a,str)

False

因?yàn)樵赑ython中3.0以下的版本存在兩種字符串類型str和unicode

Python

1

object

Python

1

|

Python

1

basestring

Python

1

/\

Python

1

strunicode

學(xué)習(xí)各種集合(learn the various collections)

python有各種各樣的容器數(shù)據(jù)類型惨寿,在特定情況下選擇python內(nèi)建的容器如:list和dict香璃。通常更多像如下方式使用:

Python


6freqs={}

forcin"abracadabra":

try:

freqs[c]+=1

except:

freqs[c]=1

一種更好的方案如下:

Python


3freqs={}

forcin"abracadabra":

freqs[c]=freqs.get(c,0)+1

一種更好的選擇 collection類型defautdict:

Python


4fromcollectionsimportdefaultdict

freqs=defaultdict(int)

forcin"abracadabra":

freqs[c]+=1

其它集合

Python


5namedtuple()# 用指定的域創(chuàng)建元組子類的工廠函數(shù)

deque# 類似list的容器,快速追加以及刪除在序列的兩端

Counter# 統(tǒng)計(jì)哈希表的dict子類

OrderedDict# 記錄實(shí)體添加順序的dict子類

defaultdict# 調(diào)用工廠方法為key提供缺省值的dict子類

當(dāng)創(chuàng)建類時(shí)Python的魔術(shù)方法:

Python


6__eq__(self,other)# 定義相等操作的行為, ==.

__ne__(self,other)# 定義不相等操作的行為, !=.

__lt__(self,other)#定義小于操作的行為, <.

__gt__(self,other)#定義不大于操作的行為, >.

__le__(self,other)#定義小于等于操作的行為, <=.

__ge__(self,other)#定義大于等于操作的行為, >=.

條件賦值

Python

1

x=3if(y==1)else2

表達(dá)式請(qǐng)起來恰恰像:如果y等于1就把3賦值給x,否則把2賦值給x仔燕,當(dāng)然同樣可以使用鏈?zhǔn)綏l件賦值如果你還有更復(fù)雜的條件的話造垛。

Python

1

x=3if(y==1)else2if(y==-1)else1

然而到了某個(gè)特定的點(diǎn),它就有點(diǎn)兒過分了晰搀。

記住五辽,你可以在任何表達(dá)式中使用if-else例如:

Python

1

(func1ify==1elsefunc2)(arg1,arg2)

func1將被調(diào)用如果y等于1的話,反之func2被調(diào)用外恕。兩種情況下杆逗,arg1和arg2兩個(gè)參數(shù)都將附帶在相應(yīng)的函數(shù)中。

類似地鳞疲,下面這個(gè)表達(dá)式同樣是正確的

Python

1

x=(class1ify==1elseclass2)(arg1,arg2)

class1和class2是兩個(gè)類

在有必要的時(shí)侯使用Ellipsis

創(chuàng)建類時(shí)髓迎,你可以使用__getitem__,讓你的類像字典一個(gè)工作建丧,拿下面這個(gè)類舉例來說:

Python


8classMyClass(object):

def__init__(self,a,b,c,d):

self.a,self.b,self.c,self.d=a,b,c,d

def__getitem__(self,item):

returngetattr(self,item)

x=MyClass(10,12,22,14)

因?yàn)橛辛薩_getitem__排龄,你就能夠通過對(duì)象x的x[‘a(chǎn)’]獲取a的值,這應(yīng)該是公認(rèn)的事實(shí)翎朱。

這個(gè)對(duì)象通常用于繼承Python的切片(slicing)如果添加如下語句:

Python


5def__getitem__(self,item):

ifitemisEllipsis:

return[self.a,self.b,self.c,self.d]

else:

returngetattr(self,item)

我們就可以使用x[…]獲取的包含所有項(xiàng)的序列

Python

1

2

3>>>x=MyClass(11,34,23,12)

>>>x[...]

[11,34,23,12]學(xué)好python你需要一個(gè)良好的環(huán)境橄维,一個(gè)優(yōu)質(zhì)的開發(fā)交流群,群里都是那種相互幫助的人才是可以的拴曲,我有建立一個(gè)python學(xué)習(xí)交流群争舞,在群里我們相互幫助,相互關(guān)心澈灼,相互分享內(nèi)容竞川,這樣出問題幫助你的人就比較多店溢,群號(hào)是301,還有056委乌,最后是051床牧,這樣就可以找到大神聚合的群,如果你只愿意別人幫助你遭贸,不愿意分享或者幫助別人戈咳,那就請(qǐng)不要加了,你把你會(huì)的告訴別人這是一種分享壕吹。

學(xué)習(xí)是對(duì)自己最好的投資著蛙,而機(jī)會(huì)屬于有準(zhǔn)備的人,這是一個(gè)看臉的時(shí)代耳贬,但最終拼的是實(shí)力踏堡。人和人之間的差距不在于智商,而在于如何利用業(yè)余時(shí)間咒劲,所以沒有等出來的輝煌顷蟆,只有干出來的精彩。其實(shí)只要你想學(xué)習(xí)缎患,什么時(shí)候開始都不晚,不要擔(dān)心這擔(dān)心那阎肝,你只需努力挤渔,剩下的交給時(shí)間,而你之所以還沒有變強(qiáng)风题,只因你還不夠努力判导,要記得付出不亞于任何人的努力。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末沛硅,一起剝皮案震驚了整個(gè)濱河市眼刃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摇肌,老刑警劉巖擂红,帶你破解...
    沈念sama閱讀 212,294評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異围小,居然都是意外死亡昵骤,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門肯适,熙熙樓的掌柜王于貴愁眉苦臉地迎上來变秦,“玉大人,你說我怎么就攤上這事框舔”拿担” “怎么了赎婚?”我有些...
    開封第一講書人閱讀 157,790評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長樱溉。 經(jīng)常有香客問我挣输,道長,這世上最難降的妖魔是什么饺窿? 我笑而不...
    開封第一講書人閱讀 56,595評(píng)論 1 284
  • 正文 為了忘掉前任歧焦,我火速辦了婚禮,結(jié)果婚禮上肚医,老公的妹妹穿的比我還像新娘绢馍。我一直安慰自己,他們只是感情好肠套,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,718評(píng)論 6 386
  • 文/花漫 我一把揭開白布舰涌。 她就那樣靜靜地躺著,像睡著了一般你稚。 火紅的嫁衣襯著肌膚如雪瓷耙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,906評(píng)論 1 290
  • 那天刁赖,我揣著相機(jī)與錄音搁痛,去河邊找鬼。 笑死宇弛,一個(gè)胖子當(dāng)著我的面吹牛鸡典,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播枪芒,決...
    沈念sama閱讀 39,053評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼彻况,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了舅踪?” 一聲冷哼從身側(cè)響起纽甘,我...
    開封第一講書人閱讀 37,797評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抽碌,沒想到半個(gè)月后悍赢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,250評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡货徙,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,570評(píng)論 2 327
  • 正文 我和宋清朗相戀三年泽裳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片破婆。...
    茶點(diǎn)故事閱讀 38,711評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涮总,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出祷舀,到底是詐尸還是另有隱情瀑梗,我是刑警寧澤烹笔,帶...
    沈念sama閱讀 34,388評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站抛丽,受9級(jí)特大地震影響谤职,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜亿鲜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,018評(píng)論 3 316
  • 文/蒙蒙 一允蜈、第九天 我趴在偏房一處隱蔽的房頂上張望洪唐。 院中可真熱鬧吠昭,春花似錦、人聲如沸芒填。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至圾叼,卻和暖如春蛤克,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背夷蚊。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評(píng)論 1 266
  • 我被黑心中介騙來泰國打工构挤, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人惕鼓。 一個(gè)月前我還...
    沈念sama閱讀 46,461評(píng)論 2 360
  • 正文 我出身青樓筋现,卻偏偏與公主長得像,于是被迫代替她去往敵國和親呜笑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子夫否,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,595評(píng)論 2 350

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

  • 個(gè)人筆記彻犁,方便自己查閱使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik閱讀 67,682評(píng)論 0 5
  • 最近在寫個(gè)性化推薦的論文叫胁,經(jīng)常用到Python來處理數(shù)據(jù),被pandas和numpy中的數(shù)據(jù)選取和索引問題繞的比較...
    shuhanrainbow閱讀 4,543評(píng)論 6 19
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)汞幢。 張土汪:刷leetcod...
    土汪閱讀 12,740評(píng)論 0 33
  • 告訴親愛的自己森篷,過去的一切苦難输钩,順逆都已過去了,沒有必要再三的提起仲智,苦難煩惱也不要再用來分享买乃,「分享」給別人,只會(huì)...
    伏義媽媽郭美香閱讀 1,262評(píng)論 0 0
  • 3.1label標(biāo)簽 label標(biāo)簽用于對(duì)input標(biāo)簽定義標(biāo)注 作用:用于綁定一個(gè)表單元素钓辆,當(dāng)點(diǎn)擊label時(shí)剪验,...
    陌陌杰閱讀 237評(píng)論 0 1