파이썬 언어에는 특히 혼동하기 쉽고 실수하기 쉬운 작은 함정이 있습니다. 초보자가 조심하지 않으면 함정에 빠지기 쉽습니다. 아래에서 몇 가지에 대한 심층 분석을 제공합니다. 초보자에게 도움이 되기를 바랍니다. 도움이 필요한 친구들은 아래를 참고하세요.
1. i+=1은 ++i와 다릅니다
파이썬 언어에 대해 잘 모르는 초보자, 이런 일이 발생합니다. C++, Java를 사용하려면 언어 배경을 고려하면 ++i와 i+=1을 혼동하기 쉽습니다.
먼저 작은 예를 살펴보겠습니다.
i=0 mylist=[1,2,3,4,5,6] while i <len(mylist): print(mylist[i]) ++i
, 하나의 무한 루프 . 왜냐하면 Python 인터프리터는 ++i를
로 작동하고, 이는<🎜과 유사합니다. >
print(+1) >>>1 print(++1) >>>1 print(+++1) >>>1
이제야 Python 구문에서는 ++i가 허용되지만 우리가 알고 있는 증분 연산은 아니라는 것을 이해했습니다.+(+i)
문자열이 같은지 판단할 때 초보자는 특히 is와 ==를 혼동하게 됩니다. 프로그램은 다양한 상황에서 작동합니다.
예를 들어 먼저 간단한 예를 살펴보겠습니다.a='Hi' b='Hi' print(a is b) >>>True print(a==b) >>>True #看起来is和==好像是一样的
두 번째 예를 살펴보겠습니다.
str1='Wo shi yi ge chi huo' str2='Wo shi yi ge chi huo' print(str1 is str2) >>>False#is的结果是False print(str1==str2) >>>True #==的结果为True,看二者不一样了吧
세 번째 예
str3='string' str4=''.join(['s','t','r','i','n','g']) print(str3) >>>string print(str3 is str4) >>>False #is的结果是False print(str3==str4) >>>True #==的结果为True,看二者不一样了吧
이렇게 시작이 헷갈리기 쉽습니다. 학자로서 저는 왜 is와 ==의 출력이 같을 때도 있고, 다를 때도 있다는 것을 아주 이상하게 생각합니다.
함수를 사용합니다. 이 함수는 객체의 메모리 주소를 반환하는 데 사용됩니다.
is가 객체의 식별자인지 확인한 후에는 명확해집니다.
을 비교하는 데 사용됩니다. 동일한 공간 주소를 사용합니까?
==는 id()
두 객체의 내용을 비교하는 것입니다. 🎜> 동일한지 확인하려면
<🎜 대신 Join을 사용하는 것이 가장 좋습니다. > 문자열을 처리할 때 가장 많이 사용하는 방법은 Join입니다. Python의 문자열은 한 번 생성되면 변경할 수 없는 불변 객체입니다. 그리고 이 기능은 효율성에 직접적인 영향을 미칩니다. Python의 문자열 연결.
+ 문자열 연결 사용:str1,str2,str3='test','string','connection' print(str1+str2+str3) >>>test string connection
join 사용 문자열 연결
str1,str2,str3='test ','string ','connection'
print(''.join([str1,str2,str3]))
>>>test string connection
long_str_list=['This is a long string' for n in range(1,100000)]
문자열을 연결하려는 경우: S1+S2+ S3+....+SN, 문자열은 불변 객체이므로 실행한 후에는 새로운 메모리를 적용해야 합니다. 이 경우 N개의 문자열을 연결하는 과정에서 매 N-1개의 중간 결과가 생성됩니다. 중간 결과가 생성되면 메모리 적용이 필요하며 이는 실행 효율성에 심각한 영향을 미칩니다.그러나 조인은 전체 메모리에 대해 한 번에 적용되고 각 요소를 내부에 복사합니다.
따라서 문자열 연결은 특히
문자열 처리의 경우 Join을 사용하는 것이 가장 좋습니다
4. for 및 while 루프 뒤에 else 블록을 쓰지 마세요
Python이 제공하는 많은 프로그래밍 언어가 지원하지 않는 기능, 즉 , 루프 내부의 명령문 블록 바로 뒤에 else 블록을 작성할 수 있습니다. 예:
for i in range(3): print('Loop %d'%i) else: print('Else block') >>>Loop 0 >>>Loop 1 >>>Loop 2 >>>Else block
이 else 블록은 전체 루프가 실행된 직후 를 실행합니다. 그렇다면 왜 else라고 불리는가? 왜 전화하지 않습니까? if/else 문에서 else는 이전 if 블록이 실행되지 않으면 else 블록이 실행된다는 의미입니다.
이 구조에서 else의 의미는 이전 try 블록이 실패하지 않으면 else 블록을 실행한다는 것입니다.
여기서 문제가 발생합니다. Python을 처음 사용하는 프로그래머는 for/else 구조의 else 블록을 다음과 같이 해석할 수 있습니다. 루프가 정상적으로 실행되지 않으면 다음을 실행하세요. else 차단
.사실 그 반대입니다. 루프 초반에 break 문을 사용하면 프로그램이 else 블록을 실행하지 않게 됩니다 . 이는 익숙하지 않은 분들에게는 다소 혼란스럽습니다. for/else를 사용하면 코드를 읽는 사람들에게 꽤 혼란스럽습니다.
요약
위 내용은 Python 초보자가 자주 범하는 몇 가지 실수 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!