歡迎光臨
每天分享高質量文章

15個Pythonic的代碼示例

來自:Python編程時光(微信號:Python-Time)

Python由於語言的簡潔性,讓我們以人類思考的方式來寫代碼,新手更容易上手,老鳥更愛不釋手。

要寫出 Pythonic(優雅的、地道的、整潔的)代碼,還要平時多觀察那些大牛代碼,Github 上有很多非常優秀的原始碼值得閱讀,比如:requests、flask、tornado,這裡小明收集了一些常見的 Pythonic 寫法,幫助你養成寫優秀代碼的習慣。

01. 變數交換

Bad

tmp = a
a = b
b = tmp

Pythonic

a,b = b,a

02. 串列推導

Bad

my_list = []
for i in range(10):
    my_list.append(i*2)

Pythonic

my_list = [i*2 for i in range(10)]

03. 單行運算式

雖然串列推導式由於其簡潔性及表達性,被廣受推崇。但是有許多可以寫成單行的運算式,並不是好的做法。

Bad

print 'one'print 'two'

if x == 1print 'one'

if  and :
    # do something

Pythonic

print 'one'
print 'two'

if x == 1:
    print 'one'

cond1 = 
cond2 = 
if cond1 and cond2:
    # do something

04. 帶索引遍歷

Bad

for i in range(len(my_list)):
    print(i, "-->", my_list[i])

Pythonic

for i,item in enumerate(my_list):
    print(i, "-->",item)

05. 序列解包

Pythonic

a, *rest = [123]
# a = 1, rest = [2, 3]

a, *middle, c = [1234]
# a = 1, middle = [2, 3], c = 4

06. 字串拼接

Bad

letters = ['s''p''a''m']
s=""
for let in letters:
    s += let

Pythonic

letters = ['s''p''a''m']
word = ''.join(letters)

07. 真假判斷

Bad

if attr == True:
    print 'True!'

if attr == None:
    print 'attr is None!'

Pythonic

if attr:
    print 'attr is truthy!'

if not attr:
    print 'attr is falsey!'

if attr is None:
    print 'attr is None!'

08. 訪問字典元素

Bad

d = {'hello''world'}
if d.has_key('hello'):
    print d['hello']    # prints 'world'
else:
    print 'default_value'

Pythonic

d = {'hello''world'}

print d.get('hello''default_value'# prints 'world'
print d.get('thingy''default_value'# prints 'default_value'

# Or:
if 'hello' in d:
    print d['hello']

09. 操作串列

Bad

a = [345]
b = []
for i in a:
    if i > 4:
        b.append(i)

Pythonic

a = [345]
b = [i for i in a if i > 4]
# Or:
b = filter(lambda x: x > 4, a)

Bad

a = [345]
for i in range(len(a)):
    a[i] += 3

Pythonic

a = [345]
a = [i + 3 for i in a]
# Or:
a = map(lambda i: i + 3, a)

10. 檔案讀取

Bad

f = open('file.txt')
a = f.read()
print a
f.close()

Pythonic

with open('file.txt'as f:
    for line in f:
        print line

11. 代碼續行

Bad

my_very_big_string = """For a long time I used to go to bed early. Sometimes, 
    when I had put out my candle, my eyes would close so quickly that I had not even 
    time to say “I’m going to sleep.”"""


from some.deep.module.inside.a.module import a_nice_function, another_nice_function, 
    yet_another_nice_function

Pythonic

my_very_big_string = (
    "For a long time I used to go to bed early. Sometimes, "
    "when I had put out my candle, my eyes would close so quickly "
    "that I had not even time to say “I’m going to sleep.”"
)

from some.deep.module.inside.a.module import (
    a_nice_function, another_nice_function, yet_another_nice_function)

12. 顯式代碼

Bad

def make_complex(*args):
    x, y = args
    return dict(**locals())

Pythonic

def make_complex(x, y):
    return {'x': x, 'y': y}

13. 使用占位符

Pythonic

filename = 'foobar.txt'
basename, _, ext = filename.rpartition('.')

14. 鏈式比較

Bad

if age > 18 and age 60:
    print("young man")

Pythonic

if 18 60:
    print("young man")

理解了鏈式比較操作,那麼你應該知道為什麼下麵這行代碼輸出的結果是 False

>>> False == False == True 
False

15. 三目運算

這個保留意見。隨使用習慣就好。

Bad

if a > 2:
    b = 2
else:
    b = 1
#b = 2

Pythonic

a = 3   

b = 2 if a > 2 else 1
#b = 2


●編號507,輸入編號直達本文

●輸入m獲取到文章目錄

推薦↓↓↓

Java編程

更多推薦18個技術類公眾微信

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

赞(0)

分享創造快樂