15개의 Pythonic 코드 예제(즐겨찾기)
5843 단어 Pythonic
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 == 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. 인덱스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 = [1, 2, 3]
# a = 1, rest = [2, 3]
a, *middle, c = [1, 2, 3, 4]
# 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 = [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. 파일 읽기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 < age < 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
참조 문서http://docs.python-guide.org/en/latest/writing/style/
https://foofish.net/idiomatic_part2.html
15개의 Pythonic에 대한 코드 예시(소장할 만한 가치가 있음)에 관한 이 글을 소개합니다. 더 많은 Pythonic 코드 내용은 저희 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!