成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Pythonista 容易忽略的python編程方式

wendux / 1215人閱讀

摘要:字典是內(nèi)置的數(shù)據(jù)結(jié)構(gòu),在寫(xiě)程序時(shí)會(huì)經(jīng)常用到。這里介紹一下它的方法和方法。在獲取中的數(shù)據(jù)時(shí),我們一般使用的方式,但是如果不存在的時(shí)候會(huì)拋出。

Python 之禪

  

The Zen of Python, by Tim Peters
Beautiful is better than ugly.
優(yōu)美勝于丑陋(Python以編寫(xiě)優(yōu)美的代碼為目標(biāo))
Explicit is better than implicit.
明了勝于晦澀(優(yōu)美的代碼應(yīng)當(dāng)是明了的,命名規(guī)范,風(fēng)格相似)
Simple is better than complex.
簡(jiǎn)潔勝于復(fù)雜(優(yōu)美的代碼應(yīng)當(dāng)是簡(jiǎn)潔的,不要有復(fù)雜的內(nèi)部實(shí)現(xiàn))
Complex is better than complicated.
復(fù)雜勝于凌亂(如果復(fù)雜不可避免,那代碼間也不能有難懂的關(guān)系,要保持接口簡(jiǎn)潔)
Flat is better than nested.
扁平勝于嵌套(優(yōu)美的代碼應(yīng)當(dāng)是扁平的,不能有太多的嵌套)
Sparse is better than dense.
間隔勝于緊湊(優(yōu)美的代碼有適當(dāng)?shù)拈g隔,不要奢望一行代碼解決問(wèn)題)
Readability counts.
可讀性很重要(優(yōu)美的代碼是可讀的)
Special cases aren"t special enough to break the rules.
Although practicality beats purity.
即便假借特例的實(shí)用性之名,也不可違背這些規(guī)則(這些規(guī)則至高無(wú)上)
Errors should never pass silently.
Unless explicitly silenced.
不要包容所有錯(cuò)誤,除非你確定需要這樣做(精準(zhǔn)地捕獲異常,不寫(xiě)except:pass風(fēng)格的代碼)
In the face of ambiguity, refuse the temptation to guess.
當(dāng)存在多種可能,不要嘗試去猜測(cè)
There should be one-- and preferably only one --obvious way to do it.
而是盡量找一種,最好是唯一一種明顯的解決方案(如果不確定,就用窮舉法)
Although that way may not be obvious at first unless you"re Dutch.
雖然這并不容易,因?yàn)槟悴皇?Python 之父(這里的Dutch是指Guido)
Now is better than never.
Although never is often better than right now.
做也許好過(guò)不做,但不假思索就動(dòng)手還不如不做(動(dòng)手之前要細(xì)思量)
If the implementation is hard to explain, it"s a bad idea.
If the implementation is easy to explain, it may be a good idea.
如果你無(wú)法向人描述你的方案,那肯定不是一個(gè)好方案;反之亦然(方案測(cè)評(píng)標(biāo)準(zhǔn))
Namespaces are one honking great idea -- let"s do more of those!
命名空間是一種絕妙的理念,我們應(yīng)當(dāng)多加利用(倡導(dǎo)與號(hào)召)

1、python編程空格和縮進(jìn)

  


1、每次縮進(jìn)使用4個(gè)空格
2、不要使用Tab,更不要Tab和空格混用
3、兩個(gè)方法之間使用一個(gè)空行,兩個(gè)Class之間使用兩個(gè)空行
4、添加一個(gè)空格在字典、列表、序列、參數(shù)列表中的“,“后,以及在字典中的”:“之后,而不是之前
5、在賦值和比較兩邊放置一個(gè)空格(參數(shù)列表中除外)
6、緊隨括號(hào)后面或者參數(shù)列表前一個(gè)字符不要存在空格

2、使用如下方式交換pyhton的值

b, a = a, b

# 其他例子

In [1]: people = ["David", "Pythonista", "15145551234"]
In [2]: name, title, phone = people
In [3]: name
Out[3]: "David"
In [4]: title
Out[4]: "Pythonista"
In [5]: phone
Out[5]: "15145551234"

這種語(yǔ)法在For循環(huán)中非常實(shí)用:

In [6]: people = [["David", "Pythonista", "15145551234"], ["Wu", "Student", "15101365547"]]
In [7]: for name, title, phone in people:
...: print name, phone
...:
David 15145551234
Wu 15101365547

PS:在使用這種語(yǔ)法時(shí),需要確保左邊的變量個(gè)數(shù)和右邊tuple的個(gè)數(shù)一致,否則,Python會(huì)拋出ValueError異常。

3、合并字符串的值
result = ",".join(colors)
這樣的效率要比使用for循環(huán)進(jìn)行拼接的效率高,當(dāng)list元素越多的時(shí)候,約明顯

4、使用關(guān)鍵字in
當(dāng)要判斷一個(gè)key是否在字典中的時(shí)候,


d = {"a": 1, "b": 2} if "c" in d: print True # DO NOT USE if d.has_key("c"): print True for key in d: print key # DO NOT USE for key in d.keys(): print key

Python的dict對(duì)象是對(duì)KEY做過(guò)hash的,而keys()方法會(huì)將dict中所有的KEY作為一個(gè)list對(duì)象;所以,直接使用in的時(shí)候執(zhí)行效率會(huì)比較快,代碼也更簡(jiǎn)潔。

5、字典
dict是Python內(nèi)置的數(shù)據(jù)結(jié)構(gòu),在寫(xiě)Python程序時(shí)會(huì)經(jīng)常用到。這里介紹一下它的get方法和defaultdict方法。
a、get
在獲取dict中的數(shù)據(jù)時(shí),我們一般使用index的方式,但是如果KEY不存在的時(shí)候會(huì)拋出KeyError。這時(shí)候你可以使用get方法,使用方法:dict.get(key, default=None),可以避免異常。例如:

d = {"a": 1, "b": 2}
print d.get("c") # None
print d.get("c", 14) # 14

b、fromkeys
dict本身有個(gè)fromkeys方法,可以通過(guò)一個(gè)list生成一個(gè)dict,不過(guò)得提供默認(rèn)的value,例如:

# ?序列做 key,并提供默認(rèn)value
>>> dict.fromkeys(["a", "b", "c"], 1)
# {"a": 1, "c": 1, "b": 1}請(qǐng)輸入代碼

c、有些情況下,我們需要給dict的KEY一個(gè)默認(rèn)值,你可以這樣寫(xiě):


equities = {} for (portfolio, equity) in data: equities.setdefault(portfolio, []).append(equity)

setdefault方法相當(dāng)于"get, or set & get",或者相當(dāng)于"set if necessary, then get"

6、defaultdict
defaultdict()和namedtuple()是collections模塊里面2個(gè)很實(shí)用的擴(kuò)展類(lèi)型。一個(gè)繼承自dict系統(tǒng)內(nèi)置類(lèi)型,一個(gè)繼承自tuple系統(tǒng)內(nèi)置類(lèi)型.

7、字典操作
在Python中,你可以使用zip方法將兩個(gè)list組裝成一個(gè)dict,其中一個(gè)list的值作為KEY,另外一個(gè)list的值作為VALUE:

>>> given = ["John", "Eric", "Terry", "Michael"]
>>> family = ["Cleese", "Idle", "Gilliam", "Palin"]
>>> pythons = dict(zip(given, family))
>>> print pythons
{"John": "Cleese", "Michael": "Palin", "Eric": "Idle", "Terry": "Gilliam"}

相反的,你可以使用dict的keys()和values()方法來(lái)獲取KEY和VALUE的列表:


>>> pythons.keys() ["John", "Michael", "Eric", "Terry"] >>> pythons.values() ["Cleese", "Palin", "Idle", "Gilliam"]

8、python的True
在Python中,判斷一個(gè)變量是否為T(mén)rue的時(shí)候,你可以這樣做:

  


False True
False (== 0) True (== 1)
"" (空字符串) 除 "" 之外的字符串(" ", "anything")
0, 0.0 除 0 之外的數(shù)字(1, 0.1, -1, 3.14)
[], (), {}, set() 非空的list,tuple,set和dict ([0], (None,), [""])
None 大部分的對(duì)象,除了明確指定為False的對(duì)象

對(duì)于自己聲明的class,如果你想明確地指定它的實(shí)例是True或False,你可以自己實(shí)現(xiàn)class的nonzerolen方法。當(dāng)你的class是一個(gè)container時(shí),你可以實(shí)現(xiàn)len方法,如下:

class MyContainer(object):
    def __init__(self, data):
        self.data = data
    def __len__(self):
    """ Return my length. """
        return len(self.data)

如果你的class不是container,你可以實(shí)現(xiàn)nonzero方法,如下:

class MyClass(object):
    def __init__(self, value):
        self.value = value
    def __nonzero__(self):
    """ Return my truth value (True or False). """
        # This could be arbitrarily complex:
        return bool(self.value)

在Python 3.x中,nonzero方法被bool方法替代??紤]到兼容性,你可以在class定義中加上以下的代碼:

__bool__ = __nonzero__

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37562.html

相關(guān)文章

  • 聊聊 Python 內(nèi)置電池

    摘要:二這些內(nèi)容都很有意思,本文唯獨(dú)想聊聊它內(nèi)置電池。這樣做的預(yù)期效果是內(nèi)置電池會(huì)變得輕量小型化高質(zhì)量,同時(shí)三方庫(kù)的生態(tài)系統(tǒng)也能得到進(jìn)化。目前,該仍處于草案狀態(tài),但已基本成為社區(qū)共識(shí)。 showImg(https://segmentfault.com/img/remote/1460000019489233?w=1880&h=1253); 本文原創(chuàng)并首發(fā)于公眾號(hào)【Python貓】,未經(jīng)授權(quán),請(qǐng)...

    FreeZinG 評(píng)論0 收藏0
  • 聊聊 Python 內(nèi)置電池

    摘要:二這些內(nèi)容都很有意思,本文唯獨(dú)想聊聊它內(nèi)置電池。這樣做的預(yù)期效果是內(nèi)置電池會(huì)變得輕量小型化高質(zhì)量,同時(shí)三方庫(kù)的生態(tài)系統(tǒng)也能得到進(jìn)化。目前,該仍處于草案狀態(tài),但已基本成為社區(qū)共識(shí)。 showImg(https://segmentfault.com/img/remote/1460000019489233?w=1880&h=1253); 本文原創(chuàng)并首發(fā)于公眾號(hào)【Python貓】,未經(jīng)授權(quán),請(qǐng)...

    wapeyang 評(píng)論0 收藏0
  • [原] Python 開(kāi)發(fā)者如何正確使用 RStudio 編輯器

    摘要:工程師也用過(guò)快速開(kāi)發(fā)面向消費(fèi)者的網(wǎng)站以響應(yīng)一日三變的用戶(hù)需求。硬件工程師在樹(shù)莓派上用來(lái)調(diào)試一個(gè)人臉檢測(cè)的功能,以較低的成本完成核心功能的調(diào)試。另一方面,通過(guò)在任何一個(gè)瀏覽器中就可以直接前往服務(wù)器現(xiàn)場(chǎng),不論是一臺(tái)甚至是樹(shù)莓派。 概述 資深Python工程師可以選擇的編輯器有很多,比如 Rodeo,Spider,Eclipse,Vim,Visual Studio,Atom,Sublime ...

    el09xccxy 評(píng)論0 收藏0
  • Python又把GUI界面攻下了,今天就告訴你怎么玩

    摘要:引言學(xué)這么久了,一直想做個(gè)界面出來(lái),最近發(fā)現(xiàn)有個(gè)內(nèi)置庫(kù),利用它可以很輕松做出一些簡(jiǎn)易的界面,首先來(lái)看官方對(duì)的說(shuō)明從上面描述中我們不難看出,不管你是系統(tǒng),還是系統(tǒng),它都可以生成相對(duì)應(yīng)的操作界面,這就是所謂的跨平臺(tái)。 showImg(https://segmentfault.com/img/remote/1460000018532942?w=1078&h=1076); 0.引言 學(xué)Pyth...

    SunZhaopeng 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<