>  기사  >  백엔드 개발  >  Python 초보자가 자주 범하는 몇 가지 실수 요약

Python 초보자가 자주 범하는 몇 가지 실수 요약

Y2J
Y2J원래의
2017-04-20 09:11:021750검색

파이썬 언어에는 특히 혼동하기 쉽고 실수하기 쉬운 작은 함정이 있습니다. 초보자가 조심하지 않으면 함정에 빠지기 쉽습니다. 아래에서 몇 가지에 대한 심층 분석을 제공합니다. 초보자에게 도움이 되기를 바랍니다. 도움이 필요한 친구들은 아래를 참고하세요.

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

이 코드는 문제가 없는 것으로 간주합니다. 이는 루프 출력이므로 실제로는 그렇지 않습니다. 출력 1

, 하나의 무한 루프 . 왜냐하면 Python 인터프리터는 ++i를

로 작동하고, 이는


print(+1)
>>>1
print(++1)
>>>1
print(+++1)
>>>1

이제야 Python 구문에서는 ++i가 허용되지만 우리가 알고 있는 증분 연산은 아니라는 것을 이해했습니다.+(+i)

2. 포인트 ==와 is의 사용법을 명확히 하세요


문자열이 같은지 판단할 때 초보자는 특히 is와 ==를 혼동하게 됩니다. 프로그램은 다양한 상황에서 작동합니다.

예를 들어 먼저 간단한 예를 살펴보겠습니다.

a=&#39;Hi&#39;
b=&#39;Hi&#39;
print(a is b)
>>>True
print(a==b)
>>>True #看起来is和==好像是一样的

두 번째 예를 살펴보겠습니다.

str1=&#39;Wo shi yi ge chi huo&#39;
str2=&#39;Wo shi yi ge chi huo&#39;
print(str1 is str2)
>>>False#is的结果是False
print(str1==str2)
>>>True #==的结果为True,看二者不一样了吧


세 번째 예

str3=&#39;string&#39;
str4=&#39;&#39;.join([&#39;s&#39;,&#39;t&#39;,&#39;r&#39;,&#39;i&#39;,&#39;n&#39;,&#39;g&#39;])
print(str3)
>>>string
print(str3 is str4)
>>>False #is的结果是False
print(str3==str4)
>>>True #==的结果为True,看二者不一样了吧

이렇게 시작이 헷갈리기 쉽습니다. 학자로서 저는 왜 is와 ==의 출력이 같을 때도 있고, 다를 때도 있다는 것을 아주 이상하게 생각합니다.

내장된

함수를 사용합니다. 이 함수는 객체의 메모리 주소를 반환하는 데 사용됩니다.


is가 객체의 식별자인지 확인한 후에는 명확해집니다.

두 객체의 메모리 공간

을 비교하는 데 사용됩니다. 동일한 공간 주소를 사용합니까?

==

id()두 객체의 내용을 비교하는 것입니다. 🎜> 동일한지 확인하려면

Python 초보자가 자주 범하는 몇 가지 실수 요약

3. 문자열, 특히 대규모 문자열을 연결하려면 +

문자열을 처리할 때 가장 많이 사용하는 방법은 Join입니다. Python의 문자열은 한 번 생성되면 변경할 수 없는 불변 객체입니다. 그리고 이 기능은 효율성에 직접적인 영향을 미칩니다. Python의 문자열 연결.

+ 문자열 연결 사용:

str1,str2,str3=&#39;test&#39;,&#39;string&#39;,&#39;connection&#39;
print(str1+str2+str3)
>>>test string connection

join 사용 문자열 연결

str1,str2,str3=&#39;test &#39;,&#39;string &#39;,&#39;connection&#39;
print(&#39;&#39;.join([str1,str2,str3]))
>>>test string connection
하지만 대규모 문자열을 연결하려는 경우, 예를 들어 약 100,000개의 문자열을 연결하려는 경우 조인 방법은 다음과 같습니다. 훨씬 빠릅니다(심지어 100배 다름). 예를 들어 다음과 같은 100,000개의 문자열 연결이 있습니다.


long_str_list=[&#39;This is a long string&#39; 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(&#39;Loop %d&#39;%i)
else:
 print(&#39;Else block&#39;)
>>>Loop 0
>>>Loop 1
>>>Loop 2
>>>Else block

이 else 블록은 전체 루프가 실행된 직후 를 실행합니다. 그렇다면 왜 else라고 불리는가? 왜 전화하지 않습니까? if/else 문에서 else는 이전 if 블록이 실행되지 않으면 else 블록이 실행된다는 의미입니다.

이 구조에서 else의 의미는 이전 try 블록이 실패하지 않으면 else 블록을 실행한다는 것입니다.


try/finally도 매우 직관적입니다. 여기서 finally는 이전 try 블록을 실행한 후에는 무슨 일이 있어도 항상 finally 블록이 실행된다는 의미입니다.
  • 여기서 문제가 발생합니다. Python을 처음 사용하는 프로그래머는 for/else 구조의 else 블록을 다음과 같이 해석할 수 있습니다. 루프가 정상적으로 실행되지 않으면 다음을 실행하세요. else 차단

    .
  • 사실 그 반대입니다. 루프 초반에 break 문을 사용하면 프로그램이 else 블록을 실행하지 않게 됩니다 . 이는 익숙하지 않은 분들에게는 다소 혼란스럽습니다. for/else를 사용하면 코드를 읽는 사람들에게 꽤 혼란스럽습니다.

    요약

위 내용은 Python 초보자가 자주 범하는 몇 가지 실수 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.