Difference between r1.3 and the current
@@ -1,25 +1,24 @@
Python 의 For Statement 에 관한 글입니다.
----
=== 질문 ===
{{{
def acb(a):
for i in a:
print i
acb(a)
약간..변형으로..
{{{
def acd(a):
for d in a:
print d
acd(a)
어떻게 같은 동작을 하는지 이유를 모르겠다고 했지.
----
=== 질문 ===
{{{#!python
a = [ 'h','e','l','l','o','w','o','r','l','d']def acb(a):
for i in a:
print i
acb(a)
}}}
}}} 약간..변형으로..
{{{#!python
a='hello world'def acd(a):
for d in a:
print d
acd(a)
}}}
결과는 위에것이랑.완전 같음..이유는 당연히 모르겠어요...난감...;;;;
}}} 결과는 위에것이랑.완전 같음..이유는 당연히 모르겠어요...난감...;;;;
=== 답변 1 ===어떻게 같은 동작을 하는지 이유를 모르겠다고 했지.
Python 의 For Statement 에 관한 글입니다.
질문 ¶
약간..변형으로..
결과는 위에것이랑.완전 같음..이유는 당연히 모르겠어요...난감...;;;;
답변 1 ¶
어떻게 같은 동작을 하는지 이유를 모르겠다고 했지.
이유는 hello world라는 문자열 a 역시 C++의 배열과 비슷하게 쓸 수 있기 때문이야. h는
a[0]
, e 는 a[1]
... 이런식으로 말이야. 하지만 배열 원소의 값을 바꿀 수는 없다는 점이 C++의 배열하고 다른 점이지.
비슷한 것을 찾자면 C++의 배열보다는 C++의 string 클래스, Java의 String 클래스와 비슷하다는 점을 알 수 있어. -- Leonardong
답변 2 ¶
python의 for statement 문법의 근원적인 차원으로 접근해 봅시다.
python은 다릅니다.
~cpp for i in 'helloworld':print i, for i in [ 'h','e','l','l','o','w','o','r','l','d']:print i,질문과 같은 맥락의 이 두동작이 같은지 따져 볼까요?
우선 for 문의 정의를 알아 봅시다.
시퀀스의 정의는 다음과 같습니다.
{{|
Sequences
These represent finite ordered sets indexed by non-negative numbers. The built-in function len() returns the number of items of a sequence. When the length of a sequence is n, the index set contains the numbers 0, 1, ..., n-1. Item i of sequence a is selected by ai.
...
~cpp for statement definition for_stmt ::= "for" target_list "in" expression_list ":" suite ["else" ":" suite] --- 알아먹게 적어보자면, for 타겟객체리스트(target) in 시퀀스형(expression_list==sequence): 식(expression)in 다음에 와야할 문은 시퀀스형 입니다.
시퀀스의 정의는 다음과 같습니다.
{{|
Sequences
These represent finite ordered sets indexed by non-negative numbers. The built-in function len() returns the number of items of a sequence. When the length of a sequence is n, the index set contains the numbers 0, 1, ..., n-1. Item i of sequence a is selected by ai.
...
친절한 해석
시퀀스
음수가 아닌수로 제한되어 있으며 순서가 매겨진 집합. 내장함수인 len()는 시퀀스의 아이템 갯수를 반환한다. 시퀀스의 길이라 n이면, 인덱스는 0..n-1 까지의 범위를 가진다. 시퀀스의 아이템 i는 ai로 선택된다.
음수가 아닌수로 제한되어 있으며 순서가 매겨진 집합. 내장함수인 len()는 시퀀스의 아이템 갯수를 반환한다. 시퀀스의 길이라 n이면, 인덱스는 0..n-1 까지의 범위를 가진다. 시퀀스의 아이템 i는 ai로 선택된다.
... 슬라이싱 관련 정의...후략
|}}
내장형의 시퀀스는 2.3 기준으로 여섯가지가 미리 정의 되어 있습니다.
{{|There are six sequence types: strings, Unicode strings, lists, tuples, buffers, and xrange objects|}}
내장형인 strings 도 시퀀스 형이며,
|}}
내장형의 시퀀스는 2.3 기준으로 여섯가지가 미리 정의 되어 있습니다.
{{|There are six sequence types: strings, Unicode strings, lists, tuples, buffers, and xrange objects|}}
내장형인 strings 도 시퀀스 형이며,
a[i]
형태로 접근할수 있습니다. 따라서, for i in 'helloworld': print i,
에서 i는 반복적으로 'h','e'... 을 반환하며
위에 기술된대로 list형 역시 시퀀스 형이며,
a[i]
형태로 접근할수 있습니다.for i in [ 'h','e','l','l','o','w','o','r','l','d']:print i,도 역시 i가 'h','e'.. 를 반복하게 됩니다.
여기까지 알아 보시려면, Python Language Reference에서 sequence, for statement로 열심히 찾아 보시면 됩니다. 열혈강의 파이썬에도 잘 나와있습니다. 그리고 다음의 이야기들은 다른 언어를 좀 아시면 이해가실 겁니다.
C / Java 1.4 이하버전 의 for 제어문은 객체의 특성을 따라 동작하지 않습니다. 이 언어들에서 for문은 정해진 조건문을 검사하면서, 탈출합니다. 즉, while문을 사람이 읽기 쉽게 약간 고차원으로 추상화된 형태에 불과합니다.
C/Java1.4이하 와 Python의 for문에 대한 관점이 전혀 다릅니다. 그리고 유용하지요. C의 for문과 구분하기 위하여 python의 이러한 for문을 보통 for each 문이라고 부릅니다. 이게 진짜 for문 이라고 이야기들 하지요.
왜 C++에 안되느냐면, C++의 제어문이 C문법에 종속되어 있고, C에서는 배열과 같이 주소를 통한 인덱스로 접근하는 형들이 종료 인덱스에 대한 정보가 없어서 구현이 불가능합니다. 추상화 시켜 C++에서는 STL에 for_each(..) 라는 함수로 비슷한 것이 구현되어 있기는 합니다.
Java 1.5 에 advanced for statement 라는 이름으로 비슷한 것이 추가되었고, C#에는 언어가 탄생 될때 부터 있었습니다. Java 1.5에서는 수년간 논의 끝에 도입을 했는데, 언어에 녹이기 위해서는 Autoboxing/Unboxing과 편리성을 위해 Template과 같은 여러 필수불가결하고 복잡다난(?)한 개념이 함께 추가되었습니다.
ref : Python Lib ref, Python Language ref, 열강파이썬
--NeoCoin
--NeoCoin