Pythonic을 중국어로 번역하면 매우 Python적입니다. 중국에서는 "very girly", "very national football team", "very CCTV" 등과 같이 명사 구조 "very +"를 많이 사용합니다. ·
아래에서는 단순화를 위해 파이썬 쓰기 방식을 P로, 비파이썬 쓰기 방식을 NP로 사용합니다. 물론 이 P-NP가 그 P-는 아닙니다. NP.
파이썬을 추구하는 이유는 무엇입니까?
NP에 비해 P의 작성 방법은 간결하고 명확하며 우아합니다. 대부분의 경우 실행 효율성이 높고 코드가 적을수록 오류도 줄어듭니다. - 경향이 있습니다. 좋은 프로그래머는 코드를 작성할 때 코드의 정확성, 단순성, 가독성을 추구해야 한다고 생각합니다. 이것이 바로 Pythonic의 정신입니다.
다른 프로그래밍 언어에 대한 경험이 있고 Python을 처음 접하는 프로그래머(예:)의 경우 Python 작성 방법을 인식하면 Python 코드를 작성할 때 더 편리하고 효율적일 수 있습니다. 이 프로그래머 그룹도 될 것입니다.
독자의 참고를 위해 아래에 P와 NP의 N개 예가 나와 있습니다.
P 대 NP의 예
체인 비교
P:
a = 3 b = 1 1 <= b <= a < 10 #True
NP:
a = 3 b = 1 b >= 1 and b <= a and a < 10 #True
P는 초등학생도 이해할 수 있는 구문으로 간단하고 직접적이며 코드를 절약합니다. ~
진실 테스트
P:
name = 'Tim' langs = ['AS3', 'Lua', 'C'] info = {'name': 'Tim', 'sex': 'Male', 'age':23 } if name and langs and info: print('All True!') #All True!
NP:
if name != '' and len(langs) > 0 and info != {}: print('All True!') #All True!
간단히 말하면 P를 쓰는 방식은 판단 조건을 쓰지 않고 어떤 물건의 진위 여부를 직접 판단하는 것입니다. 이는 정확성을 보장할 수 있을 뿐만 아니라 양을 줄일 수도 있습니다. 암호.
True 및 False 값 표 (false를 기억하면 코드가 많이 절약됩니다!)
True False
True False
비어 있지 않은 문자열, 빈 문자열''
0이 아닌 숫자, 숫자 0
비어 있지 않은 컨테이너, 빈 컨테이너[] () {} set()
False가 아닌 기타 없음
문자열 역방향
P:
def reverse_str( s ): return s[::-1]
NP:
def reverse_str( s ): t = '' for x in xrange(len(s)-1,-1,-1): t += s[x] return t
P는 작성이 간단하고, 테스트한 후에는 더 효율적입니다.
회문을 감지하는 데 사용하면 input == input[::-1]이라는 문장이 되는데, 얼마나 우아한가!
문자열 목록 연결
P:
strList = ["Python", "is", "good"] res = ' '.join(strList) #Python is good
NP :
res = '' for s in strList: res += s + ' ' #Python is good #最后还有个多余空格
string.join()은 목록에서 문자열을 결합하는 데 자주 사용됩니다. NP와 비교할 때 P 방법은 매우 효율적이고 오류가 없습니다. .
목록 합계, 최대, 최소, 곱
P:
numList = [1,2,3,4,5] sum = sum(numList) #sum = 15 maxNum = max(numList) #maxNum = 5 minNum = min(numList) #minNum = 1 from operator import mul prod = reduce(mul, numList, 1) #prod = 120 默认值传1以防空列表报错
NP:
sum = 0 maxNum = -float('inf') minNum = float('inf') prod = 1 for num in numList: if num > maxNum: maxNum = num if num < minNum: minNum = num sum += num prod *= num # sum = 15 maxNum = 5 minNum = 1 prod = 120
간단한 테스트 후 numList의 길이가 10000000일 때, 목록을 합산하려면 내 컴퓨터에서 P는 0.6초가 걸리고 NP는 1.3초가 걸리며 이는 거의 두 배의 차이입니다. 그러므로 자신의 바퀴를 재발명하지 마십시오.
목록 이해
P:
l = [x*x for x in range(10) if x % 3 == 0] #l = [0, 9, 36, 81]
NP:
l = [] for x in range(10): if x % 3 == 0: l.append(x*x) #l = [0, 9, 36, 81]
보세요, P의 목록 이해력을 사용하면 새 목록을 작성하는 것이 얼마나 간단하고 직관적인지 알 수 있습니다!
사전 기본값
P:
dic = {'name':'Tim', 'age':23} dic['workage'] = dic.get('workage',0) + 1 #dic = {'age': 23, 'workage': 1, 'name': 'Tim'}
NP:
if 'workage' in dic: dic['workage'] += 1 else: dic['workage'] = 1 #dic = {'age': 23, 'workage': 1, 'name': 'Tim'}
dict의 get(key,default) 메소드는 키가 존재하지 않는 경우 사전에서 키 값을 가져오는 데 사용됩니다. , 키에 기본값이 할당됩니다. 값은 기본값입니다.
NP에 비해 P가 if...else...라고 적게 적혀 있는데, 정말 if...else...를 싫어하는 분들의 첫 번째 선택입니다...!
for…else… 문
P:
for x in xrange(1,5): if x == 5: print 'find 5' break else: print 'can not find 5!' #can not find 5!
NP :
find = False for x in xrange(1,5): if x == 5: find = True print 'find 5' break if not find: print 'can not find 5!' #can not find 5!
for...else...의 else 부분은 for 루프가 중단되지 않는 상황을 처리하는 데 사용됩니다. 이를 사용하면 for 루프가 중단되는지 확인하기 위해 상태 변수를 설정할 필요가 없으므로 간단하고 편리합니다.
삼항 기호 교체
P:
a = 3 b = 2 if a > 2 else 1 #b = 2
NP :
if a > 2: b = 2 else: b = 1 #b = 2
C 프로그래밍 경험이 있다면 A ? B ? A와 B 또는 C는 괜찮아 보이지만 실제 의도는 False를 반환해야 하는데 b = a > 1이고 False 또는 True가 True를 반환하는 것을 볼 수 있습니다.
a > 1인 경우 b = False를 사용하면 else True는 False를 올바르게 반환하므로 진정한 삼항 기호 대체입니다.
열거
P:
array = [1, 2, 3, 4, 5] for i, e in enumerate(array,0): print i, e #0 1 #1 2 #2 3 #3 4 #4 5
NP:
for i in xrange(len(array)): print i, array[i] #0 1 #1 2 #2 3 #3 4 #4 5
enumerate를 사용하면 인덱스를 사용하여 값을 가져올 필요 없이 인덱스와 값을 한 번에 꺼낼 수 있으며, enumerate의 두 번째 매개변수는 인덱스 첨자의 시작 위치를 조정할 수 있습니다. 기본값은 0입니다.
zip을 사용하여 키-값 쌍 생성
P:
keys = ['Name', 'Sex', 'Age'] values = ['Tim', 'Male', 23] dic = dict(zip(keys, values)) #{'Age': 23, 'Name': 'Tim', 'Sex': 'Male'}
NP:
dic = {} for i,e in enumerate(keys): dic[e] = values[i] #{'Age': 23, 'Name': 'Tim', 'Sex': 'Male'}
zip 메소드는 간단하고 명확한 키-값 쌍을 만드는 데 사용되는 튜플을 반환합니다.