Python【15個代碼示例】

 

 

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

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

Python

變量交換

  • Bad
tmp = a
a = b
b = tmp
  • Pythonic
a,b = b,a

 

列表推導

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

 

單行表達式

  • 雖然列表推導式由於其簡潔性及表達性,被廣受推崇。
  • 但是有許多可以寫成單行的表達式,並不是好的做法。
  • Bad
複製代碼
print 'one'; print 'two'

if x == 1: print 'one'

if <complex comparison> and <other complex comparison>:
# do something
複製代碼
  • Pythonic
複製代碼
print 'one'
print 'two'

if x == 1:
print 'one'

cond1 = <complex comparison>
cond2 = <other complex comparison>
if cond1 and cond2:
# do something 
複製代碼

 

帶索引遍歷

  • Bad
for i in range(len(my_list)):
print(i, "-->", my_list[i])
  • Pythonic
for i,item in enumerate(my_list):
print(i, "-->",item)

 

序列解包

  • Pythonic
複製代碼
a, *rest = [1, 2, 3]
# a = 1, rest = [2, 3]

a, *middle, c = [1, 2, 3, 4]
# a = 1, middle = [2, 3], c = 4
1
複製代碼

 

字符串拼接

  • Bad
letters = ['s', 'p', 'a', 'm']
s=""
for let in letters:
s += let
  • Pythonic
letters = ['s', 'p', 'a', 'm']
word = ''.join(letters)

 

真假判斷

  • 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!'
複製代碼

 

訪問字典元素

  • 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']
複製代碼

 

操作列表

  • Bad
a = [3, 4, 5]
b = []
for i in a:
if i > 4:
b.append(i)
  • Pythonic
a = [3, 4, 5]
b = [i for i in a if i > 4]
# Or:
b = filter(lambda x: x > 4, a)
  • Bad
a = [3, 4, 5]
for i in range(len(a)):
a[i] += 3
  • Pythonic
a = [3, 4, 5]
a = [i + 3 for i in a]
# Or:
a = map(lambda i: i + 3, a)

 

文件讀取

  • 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

 

代碼續行

  • 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)
複製代碼

 

顯式代碼

  • Bad
def make_complex(*args):
x, y = args
return dict(**locals())
  • Pythonic
def make_complex(x, y):
return {'x': x, 'y': y}

 

使用佔位符

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

 

鏈式比較

  • Bad
if age > 18 and age < 60:
print("young man")
  • Pythonic
if 18 < age < 60:
print("young man")
  • 理解了鏈式比較操作,那麼你應該知道爲什麼下面這行代碼輸出的結果是 False
>>> False == False == True 
False

 

三目運算

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

  • Bad
if a > 2:
b = 2
else:
b = 1
#b = 2
  • Pythonic
a = 3

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章