摘要:字典是內置的數據結構,在寫程序時會經常用到。這里介紹一下它的方法和方法。在獲取中的數據時,我們一般使用的方式,但是如果不存在的時候會拋出。
Python 之禪
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
優美勝于丑陋(Python以編寫優美的代碼為目標)
Explicit is better than implicit.
明了勝于晦澀(優美的代碼應當是明了的,命名規范,風格相似)
Simple is better than complex.
簡潔勝于復雜(優美的代碼應當是簡潔的,不要有復雜的內部實現)
Complex is better than complicated.
復雜勝于凌亂(如果復雜不可避免,那代碼間也不能有難懂的關系,要保持接口簡潔)
Flat is better than nested.
扁平勝于嵌套(優美的代碼應當是扁平的,不能有太多的嵌套)
Sparse is better than dense.
間隔勝于緊湊(優美的代碼有適當的間隔,不要奢望一行代碼解決問題)
Readability counts.
可讀性很重要(優美的代碼是可讀的)
Special cases aren"t special enough to break the rules.
Although practicality beats purity.
即便假借特例的實用性之名,也不可違背這些規則(這些規則至高無上)
Errors should never pass silently.
Unless explicitly silenced.
不要包容所有錯誤,除非你確定需要這樣做(精準地捕獲異常,不寫except:pass風格的代碼)
In the face of ambiguity, refuse the temptation to guess.
當存在多種可能,不要嘗試去猜測
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.
雖然這并不容易,因為你不是 Python 之父(這里的Dutch是指Guido)
Now is better than never.
Although never is often better than right now.
做也許好過不做,但不假思索就動手還不如不做(動手之前要細思量)
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.
如果你無法向人描述你的方案,那肯定不是一個好方案;反之亦然(方案測評標準)
Namespaces are one honking great idea -- let"s do more of those!
命名空間是一種絕妙的理念,我們應當多加利用(倡導與號召)
1、python編程空格和縮進
1、每次縮進使用4個空格
2、不要使用Tab,更不要Tab和空格混用
3、兩個方法之間使用一個空行,兩個Class之間使用兩個空行
4、添加一個空格在字典、列表、序列、參數列表中的“,“后,以及在字典中的”:“之后,而不是之前
5、在賦值和比較兩邊放置一個空格(參數列表中除外)
6、緊隨括號后面或者參數列表前一個字符不要存在空格
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" 這種語法在For循環中非常實用: 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:在使用這種語法時,需要確保左邊的變量個數和右邊tuple的個數一致,否則,Python會拋出ValueError異常。
3、合并字符串的值
result = ",".join(colors)
這樣的效率要比使用for循環進行拼接的效率高,當list元素越多的時候,約明顯
4、使用關鍵字in
當要判斷一個key是否在字典中的時候,
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對象是對KEY做過hash的,而keys()方法會將dict中所有的KEY作為一個list對象;所以,直接使用in的時候執行效率會比較快,代碼也更簡潔。
5、字典
dict是Python內置的數據結構,在寫Python程序時會經常用到。這里介紹一下它的get方法和defaultdict方法。
a、get
在獲取dict中的數據時,我們一般使用index的方式,但是如果KEY不存在的時候會拋出KeyError。這時候你可以使用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本身有個fromkeys方法,可以通過一個list生成一個dict,不過得提供默認的value,例如:
# ?序列做 key,并提供默認value >>> dict.fromkeys(["a", "b", "c"], 1) # {"a": 1, "c": 1, "b": 1}請輸入代碼
c、有些情況下,我們需要給dict的KEY一個默認值,你可以這樣寫:
equities = {} for (portfolio, equity) in data: equities.setdefault(portfolio, []).append(equity)
setdefault方法相當于"get, or set & get",或者相當于"set if necessary, then get"
6、defaultdict
defaultdict()和namedtuple()是collections模塊里面2個很實用的擴展類型。一個繼承自dict系統內置類型,一個繼承自tuple系統內置類型.
7、字典操作
在Python中,你可以使用zip方法將兩個list組裝成一個dict,其中一個list的值作為KEY,另外一個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()方法來獲取KEY和VALUE的列表:
>>> pythons.keys() ["John", "Michael", "Eric", "Terry"] >>> pythons.values() ["Cleese", "Palin", "Idle", "Gilliam"]
8、python的True
在Python中,判斷一個變量是否為True的時候,你可以這樣做:
False True
False (== 0) True (== 1)
"" (空字符串) 除 "" 之外的字符串(" ", "anything")
0, 0.0 除 0 之外的數字(1, 0.1, -1, 3.14)
[], (), {}, set() 非空的list,tuple,set和dict ([0], (None,), [""])
None 大部分的對象,除了明確指定為False的對象
對于自己聲明的class,如果你想明確地指定它的實例是True或False,你可以自己實現class的nonzero或len方法。當你的class是一個container時,你可以實現len方法,如下:
class MyContainer(object): def __init__(self, data): self.data = data def __len__(self): """ Return my length. """ return len(self.data)
如果你的class不是container,你可以實現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__
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/37562.html
摘要:二這些內容都很有意思,本文唯獨想聊聊它內置電池。這樣做的預期效果是內置電池會變得輕量小型化高質量,同時三方庫的生態系統也能得到進化。目前,該仍處于草案狀態,但已基本成為社區共識。 showImg(https://segmentfault.com/img/remote/1460000019489233?w=1880&h=1253); 本文原創并首發于公眾號【Python貓】,未經授權,請...
摘要:二這些內容都很有意思,本文唯獨想聊聊它內置電池。這樣做的預期效果是內置電池會變得輕量小型化高質量,同時三方庫的生態系統也能得到進化。目前,該仍處于草案狀態,但已基本成為社區共識。 showImg(https://segmentfault.com/img/remote/1460000019489233?w=1880&h=1253); 本文原創并首發于公眾號【Python貓】,未經授權,請...
摘要:工程師也用過快速開發面向消費者的網站以響應一日三變的用戶需求。硬件工程師在樹莓派上用來調試一個人臉檢測的功能,以較低的成本完成核心功能的調試。另一方面,通過在任何一個瀏覽器中就可以直接前往服務器現場,不論是一臺甚至是樹莓派。 概述 資深Python工程師可以選擇的編輯器有很多,比如 Rodeo,Spider,Eclipse,Vim,Visual Studio,Atom,Sublime ...
摘要:引言學這么久了,一直想做個界面出來,最近發現有個內置庫,利用它可以很輕松做出一些簡易的界面,首先來看官方對的說明從上面描述中我們不難看出,不管你是系統,還是系統,它都可以生成相對應的操作界面,這就是所謂的跨平臺。 showImg(https://segmentfault.com/img/remote/1460000018532942?w=1078&h=1076); 0.引言 學Pyth...
閱讀 1209·2021-11-22 12:05
閱讀 1336·2021-09-29 09:35
閱讀 630·2019-08-30 15:55
閱讀 3122·2019-08-30 14:12
閱讀 954·2019-08-30 14:11
閱讀 2875·2019-08-30 13:10
閱讀 2400·2019-08-29 16:33
閱讀 3327·2019-08-29 11:02