如何讓自己的 python 代碼更有逼格?
感覺自己的python代碼很挫,被人吐槽長得像C++。我看別人的python都是酷炫到爆,逼格滿滿。如何讓我的python看起來更有逼格?╮(╯▽╰)╭
代碼是寫給人讀的,一味的追求逼格是應該被唾棄的。如果你能夠在保證可讀性的前提下,把相同的功能用更少的代碼實現,那將會是有逼格的。
d = {}
with open("/etc/passwd") as f:
for line in f:
for word in line.strip().split(":"):
if word not in d:
d[word] = 1
else:
d[word] += 1
如果我們使用defaultdict,代碼能夠減少3行,會被認為更加Pythonic。如下所示:
d = defaultdict(int)
with open("/etc/passwd") as f:
for line in f:
for word in line.strip().split(":"):
d[word] += 1
對於這個問題,其實還有一個更好的解決辦法,使用collections中的Counter。如下:
word_counts = Counter()
with open("/etc/passwd") as f:
for line in f:
word_counts.update(line.strip().split(":"))
可以看到,使用Counter以後,我們的代碼更加短小了。我們先把代碼重8行重構到5行,然後又重構到4行。要想把代碼寫得優美,在保證可讀性的前提下,代碼越短越好。對於這個問題,使用Counter還有其他的一些理由,那就是其他相關的需求。比如,現在還有第二個需求,列印出現次數最多的三個單詞。如果我們使用字典,那麼,我們需要這樣:
result = sorted(zip(d.values(), d.keys()), reverse=True)[:3]
for val, key in result:
print(key, ":", val)
使用Counter就簡單了,因為Counter直接就為我們提供了相應的函數,如下所示:
for key, val in (word_counts.most_common(3)):
print(key, ":", val)
是不是代碼更短,看起來更加清晰呢。而且,統計每個單詞出現的次數和出現次數最多的單詞,這兩個需求相關性實在是太強了,幾乎會同時出現。所以,我們使用了Counter模塊和該模塊的most_common方法。如果Counter沒有提供這個方法,那才是要被吐槽的!
對這個回答感興趣的同學可以看這裡:Python 有哪些優雅的代碼實現?讓自己的代碼更pythonic - 知乎用戶的回答今年(2014)杭州PyCon有個topic叫&
- 能用map絕不用list comprehension
- 能用lambda絕不定義函數名- 能用yield絕不append到list再返回- 不管用不用得上都在函數簽名里加上*args和**kwargs- 定義一個空class命名成XXXMixin,然後不管用得上用不上都先在繼承列表裡加上這個Mixin- 多用super調用父類的函數,配合上一條,讓看代碼的人來回跳轉UPDATE: 點贊多到心虛…大家明白我在joking的對吧…先寫一段時間 LISP,然後再去寫 Python。
瀉藥
注釋量充足,符合編碼規範,提交主要代碼同時提交完善的測試代碼,然後各種覆蓋率檢測均到100%. 先亮瞎懶惰的人們,體現出業界良心和節操.然後供起來,跑個N年後,始終沒有BUG,沒有人改,也無需修改.
這樣有逼格嗎.看題目詳細介紹,題主說的逼格指的是更Pythonic吧,就是代碼看起來更Python化,而不是像C/C++。這個跟逼格什麼的關係不大,不同語言的規範不同,Python有它自己的一套規範,符合這套規範的代碼看起來確實會更加漂亮。
如果之前是C/C++入門的,剛上手Python的時候,很容易把代碼寫的像C/C++。代碼寫多了,就會逐漸了解PEP8這樣的編碼規範,同時也會逐漸找到寫Python的感覺。實話說除了多寫代碼之外,沒有什麼捷徑而言。像樓上提到的idiomatic python這樣的教程可以學習。不過只單純地學習這些編碼技巧,對於使用Python能力並沒有太大幫助,就像只學到花拳繡腿,卻沒有深厚的內功做支撐,終究還是不夠的。既然樓上提到 PEP8,那提下:Pylint - code analysis for Python沒事給代碼打個分,嚇尿他們,沒有比這個評分更逼格了吧
首先,最基本的代碼規範還是要遵循的,正所謂無規矩不成方圓,良好的縮進風格和命名方式都讓你的代碼更加簡明;
其次,做好抽象,無論是數據抽象還是過程抽象都要做,最近在看SICP,書中一再強調抽象,提取出公共的邏輯,站在更高、更普遍的角度去審視代碼,符合這個要求的代碼無疑就像是深度提煉過的礦石,含量更高;
再次,代碼越遠離C風格,越接近Lisp就越顯逼格,那麼函數式編程是你必須嘗試的部分;最後,少而精的注釋絕對是點睛之筆。去寫Ruby,逼格立馬就能提升
沒事多看看標準庫或第三方模塊里的寫法,照著模仿,提升逼格
我看別人的python都是酷炫到爆,逼格滿滿
你自己都說別人的python酷炫到爆了,想必你肯定有自己的一套衡量標準,那不就等於你已經知道了該怎麼寫才算是有逼格了么?多此一問【逃
多寫 docstring,順便在裡面寫幾個 test case多用 decorator能查表千萬不要用 if else
找我做code view
Python是用來快速解決問題的,語法太簡單、直白,沒法體現逼格,,
想要逼格還是換個語言吧,比如LISP逼格應更挺高。pep8
用ruby吧,這種魔幻一樣的語言才能創造出逼格滿滿又不會像lisp那樣誰都看不懂的代碼
為什麼大家都不覺得長得像C++是褒義詞呢。。。。C++高級程序員的工資遠比python高級程序員的工資要高吧。。。python能有C++的效率么
用hy寫Python
Learn hy in Y Minutes(defn simple-conversation []
(print "Hello! I"d like to get to know you. Tell me about yourself!")
(setv name (raw-input "What is your name? "))
(setv age (raw-input "What is your age? "))
(print (+ "Hello " name "! I see you are "
age " years old.")))
(simple-conversation)
推薦閱讀:
※使用Python建站對於日流量20w的pv你會採用什麼樣的架構?
※windows8 64位python 安裝theano報錯?