Python 에서 i++문법 을 지원 하지 않 는 이유 분석
정상 적 인 상황 에서 파 이 썬 의 연산 자가 아 닌+이 유 를 물 었 을 때 이 줄 은 나의 주 의 를 끌 었 다.
최초의 이 유 를 알 고 싶다 면 오래된 Python 메 일 링 리스트 를 뒤 져 보 거나 그곳 에 있 는 누 군가(예 를 들 어 Guido)에 게 물 어 봐 야 합 니 다.
이것 은 나 로 하여 금 위의 그림 처럼 생각 하 게 했다.정말 제 가 Guido 에 게 이 유 를 물 어 봐 야 하나 요?좋 습 니 다.아마도 그 전에 저 는 이 글 을 쓰 도록 해 야 합 니 다.
C/C++/자바 와 같은 언어 에 서 는 정수 변 수 를 자체 증가 또는 자체 감소 연산 하 는 것 이 표준 이 며,접두사 연산(+i 와 Ci)과 접두사 연산(i+와 iC)으로 나 눌 수 있 으 며,각각 미세한 차이 와 목적 이 있다.
이 언어의 사용자 가 Python 에 들 어 갔 을 때,그들 은 왜+또는-조작 을 제공 하지 않 는 지 알 고 싶 어 할 것 이다.
접두사+i 가 Python 에 나타 날 수 있 지만'+'자체 연산 자 는 아 닙 니 다.
이러한 상황 에서,그것 은 단지 두 개의"+"(정 호)의 중첩 일 뿐,"+"접 두 사 는 전혀 지원 되 지 않 습 니 다!(SyntaxError:문법 이 잘못 되 었 습 니 다.
그렇다면 파 이 썬 은 왜 i++증분 문법 을 지원 하지 않 습 니까?
우선,Python 은 당연히 자기 증강 효 과 를 실현 할 수 있 습 니 다.즉,i+=1 또는 i=i+1 의 형식 으로 작 성 됩 니 다.이것 은 다른 언어 에서 도 흔히 볼 수 있 습 니 다.
비록 Python 은 밑 에 서로 다른 마술 방법(add()과 를 사 용 했 지만iadd __())계산 을 마 쳤 지만 표면적 인 효 과 는 똑 같 았 다.
따라서 우리 의 문 제 는 왜 상기 두 가지 쓰기 스타일 이 i++보다 더 좋 고 Python 의 최종 선택 이 될 수 있 습 니까?
1.Python 정 수 는 가 변 적 이지 않 은 타 입
우리 가 i=1000 을 정의 할 때,서로 다른 언어 는 그것들 을 구별 할 것 이다.
예 를 들 어 C(int=1000)와 같은 언어 는 메모리 공간 에 적용 되 고'바 인 딩'을 고정 이름 i 에 기록 하 며 변수 값 1000 을 기록 합 니 다.
여기 서 i 의 주소 와 유형 은 고정 되 어 있 고 값 은 가 변 적 입 니 다.
Python(쓰기 i=1000)도 메모리 공간 을 신청 합 니 다.그러나 이 1000 의 주소 와 유형 은 변경 할 수 없습니다.
그래서 우리 가 나 로 하여 금'자아 증가'(i=i+1)를 하 게 할 때 둘 다 구별 된다.
C 와 같은 언어 는 먼저 i 주소 에 저 장 된 값 을 찾 은 다음 1 을 추가 합 니 다.작업 후 새 값 은 이전 값 파 이 썬 을 교체 하 는 작업 과정 은 i 가 가리 키 는 숫자 에 1 을 추가 한 다음 결 과 를 새로운 저장 공간 에 연결 한 다음 이름 라벨 을 새 숫자 에 붙 여 넣 는 것 입 니 다.
예 를 들 어 C 의 i 는 1000 개의 호스트 가 기생 한 것 같 고 Python 의 1000 은 i 가 기생 한 호스트 와 같다.그래서 저 는 C 언어 에서 Python 의 1000 과 같 습 니 다.
다시 말하자면 i++를 살 펴 보 겠 습 니 다.어렵 지 않 습 니 다.
C 와 같은 언어 에서 i++는 i 의 수치 속성 증 가 를 나 타 낼 수 있 습 니 다.새로운 메모리 공간 을 열지 않 을 뿐만 아니 라 Python 과 같은 언어 에서 i++가 name 속성 에 대한 조작 이 라면 아무런 의미 가 없습니다.이 를 디지털 본체 에 대한 조작 으로 이해 하면 상황 은 복잡 할 것 이다.
새로운 1 등 시민 1001 을 만 들 기 때문에 메모리 주 소 를 할당 해 야 합 니 다.이때 점용 한 주소 가 1000 이면 옛 대상 의 회수 와 관련 되 고 1000 의 원시 인용 관계 도 영향 을 받는다.따라서 1001 에 만 새로운 메모리 공간 을 열 수 있 습 니 다.
만약 에 Python 이 i++를 지원 한다 면 그 조작 과정 은 C++보다 복잡 할 것 이 고 그 의 미 는'숫자 를 1 로 늘 리 는 것'(점차 늘 리 는 것)이 아니 라'새로운 숫자 를 만 드 는 것'이 어야 한다.
Python 이론 적 으로 i+작업 을 실현 할 수 있 지만'증분 연산 자'를 다시 정의 해 야 합 니 다.이 는 다른 언어 경험 을 가 진 사람들 이 오 해 를 할 수 있 습 니 다.
모든 사람 이 i+=1 또는 i=i+1 을 직접 쓰 도록 하 는 것 이 좋 습 니 다.
2.Python 은 교체 가능 한 대상 을 가지 고 있 습 니 다.
C/C+와 같은 언어 는 i++를 주로 세 부분의 for 순환 구 조 를 편리 하 게 사용 하기 위해 설계 했다.
이런 프로그램 은 숫자 자체 의 증가 과정 과 관계 가 있다.숫자의 증 가 는 프로그램 주체 의 집행 과 관계 가 있다.
Python 에는 이러한 구조 가 없습니다.그것 은 더욱 우아 한 방법 을 제공 합 니 다.
여기 에는 서로 다른 사고방식 이 반영 되 어 있다.
예 를 들 어 Python 은 enumerate()와 상기 예제 의 값 을 사용 하여 아래 표 와 특정 값 을 동시에 옮 겨 다 닐 수 있 습 니 다.
예 를 들 어 사전 을 옮 겨 다 니 는 데 있어 Python 은 keys(),values(),item()과 다른 옮 겨 다 니 는 방법 을 제공 합 니 다.이 방법 들 은 사용 하기 쉽 습 니 다.
Python 에 서 는 i+=1 또는 i=i+1 을 거의 사용 하지 않 을 뿐만 아니 라 교체 대상 의 가용성 으로 인해 조작 치 범 위 를 쉽게 만 들 고 이 를 누적 하 라 는 요구 도 거의 없다.
따라서 우리 의 최초의 문제 로 돌아 가면 이 두 가지'자체 증가'방법 은 i++보다 별로 좋 지 않다.단지 통용 되 는 조작 이기 때문이다.
새로운 연산 자 를 도입 하지 않 아 도 파 이 썬 이 기초 지원 을 계속 하 는 이유 다.진정한 승 자 는 각양각색의 교체 대상 이다!
요약
Python 은 증가 연산 자 를 지원 하지 않 습 니 다.이 유 는 다음 과 같 습 니 다.
정수 가 변 하지 않 는 1 등 시민 이기 때문에 증분 연산(+)을 지원 하려 면 나 쁜 의 미 를 가 져 올 수 있 습 니 다.
애매 한 이유:이 이야기 에서
주로 더 적합 한 실현,즉 교체 대상 을 가지 기 때문에 옮 겨 다 니 는 작업 에 좋 은 지 지 를 가지 기 때문이다.
파 이 썬 이 i++문법 을 지원 하지 않 는 이유 에 대한 해석 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 파 이 썬 이 i+문법 내용 을 지원 하지 않 습 니 다.예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.