# 15个Pythonic的代码示例(值得收藏)

Python由于语言的简洁性，让我们以人类思考的方式来写代码，新手更容易上手，老鸟更爱不释手。

Python由于语言的简洁性，让我们以人类思考的方式来写代码，新手更容易上手，老鸟更爱不释手。

01. 变量交换

```tmp = a
a = b
b = tmp```

Pythonic

`a,b = b,a`

02. 列表推导

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

Pythonic

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

03. 单行表达式

```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. 带索引遍历

```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 = [1, 2, 3]
# a = 1, rest = [2, 3]

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

06. 字符串拼接

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

Pythonic

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

07. 真假判断

```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. 访问字典元素

```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. 操作列表

```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)```

```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. 文件读取

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

Pythonic

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

11. 代码续行

```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. 显式代码

```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. 链式比较

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

Pythonic

```if 18 < age < 60:
print("young man")```

```>>> False == False == True
False```

15. 三目运算

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

Pythonic

```a = 3

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

```

http://docs.python-guide.org/en/latest/writing/style/

https://foofish.net/idiomatic_part2.html