Python because of the simplicity of the language, let us write code in the way of human thinking, novices are easier to start, old birds are more reluctant to let go.
To write Pythonic (elegant, authentic, neat) code, and to observe the Daniel code more often, Github has a lot of excellent source code worth reading, such as: requests, flask, tornado, here I refer to other articles plus my own experience, collate some common Pythonic writing, hoping to help you develop the habit of writing excellent code. .
01. Variable Exchange
Bad
tmp = a a = b b = tmp
Pythonic
a,b = b,a
02. List Derivation
Bad
my_list = [] for i in range(10): my_list.append(i*2)
Pythonic
my_list = [i*2 for i in range(10)]
03. One-line expression
Although list derivation is widely praised for its conciseness and expressiveness.
But there are many expressions that can be written in one line, which is not a good idea.
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
04. Indexed traversal
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. Sequence unpacking
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
06. String splicing
Bad
letters = ['s', 'p', 'a', 'm'] s="" for let in letters: s += let
Pythonic
letters = ['s', 'p', 'a', 'm'] word = ''.join(letters)
07. Judgment of Truth and False
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. Access dictionary elements
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. List of operations
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)
10. File Reading
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. Code continuation
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. Explicit code
Bad
def make_complex(*args): x, y = args return dict(**locals())
Pythonic
def make_complex(x, y): return {'x': x, 'y': y}
13. Use placeholders
Pythonic
filename = 'foobar.txt' basename, _, ext = filename.rpartition('.')
14. Chain comparison
Bad
if age > 18 and age < 60: print("young man")
Pythonic
if 18 < age < 60: print("young man")
Having understood the chain comparison operation, you should know why the output of the following line is False
>>> False == False == True False
15. Trinomial operation
This reservation. Use as you like.
Bad
if a > 2: b = 2 else: b = 1 #b = 2
Pythonic
a = 3 b = 2 if a > 2 else 1 #b = 2