조건문을 이용해 코드를 간단히 제어해 봤고, 반복문을 사용하여 코드를 제어할 수도 있습니다. 동일한 코드를 일정 수만큼 반복해서 수행해야 할 경우 반복문을 사용하며, 리스트의 모든 요소를 출력하는 등의 일이 여기에 속합니다. Python은 반복문을 위해 for를 지원합니다.

for문 작성하기

for는 Python에서 반복문을 작성하기 위한 키워드로, 기본적으로 for-each(iterable 자료형 참조) 형태를 띱니다. 따라서 for-in으로 알고 있는 것이 좋습니다.

위는 List의 값을 순차적으로 접근하는 형태의 전형적인 for문이며, 아래는 unpacking을 활용한 for문의 응용을 나타냅니다. 사실 타 프로그래밍 언어의 반복문을 경험해 보았다면, n부터 m까지 반복 형태의 반복문이 더 익숙할 것입니다. Python의 반복문은 for-each 방식이기 때문에, range라는 함수를 사용해야 합니다.

위처럼, range(n)0부터 n-1까지의 숫자를 가지고 있고, range(n, m)n부터 m-1까지의 숫자를 가지고 있습니다. 사실 Python 3에서의 range() 함수는 range 객체를 반환하는 것이지만, 여기서는 그냥 iterable 자료형, List 등 편한 대로 이해하고 넘어갑시다.

break, continue statement

breakcontinue를 이용해서 반복문을 제어할 수 있습니다. break는 반복문을 종료하고, continue는 현재 루프를 건너뛰고 다음 루프로 제어를 넘깁니다.

for - else

Python은 for문에서도 else를 사용할 수 있습니다. for문에서 break가 발생하지 않고 모든 루프가 성공적으로 돌면 else 블럭 내부의 코드가 실행되는 형태입니다.

특정 작업을 수행하는 for문에서 break가 발생하지 않았다는 것은 암시적으로 '모든 작업에 성공했다'는 것을 의미합니다. 따라서 이와 같은 판단을 위해 for-else문은 꽤 필요성이 많은 문법이라고 볼 수 있습니다.

List Comprehension

1부터 100까지의 수 중 짝수만으로 이루어진 리스트를 만들어야 한다면, 아래처럼 코드를 작성할 수 있을 것입니다.

충분히 괜찮은 코드지만, 해당 로직은 결국 1부터 100까지 반복하며 - 조건을 판단하고 - 리스트에 값을 누적하는 형태입니다. Python에서는 nested(포함된) for문을 이용해 iterable 객체를 만드는 comprehension이라는 개념을 지원하고, 아래와 같이 사용합니다.


'Python 계열 > Python 레거시 글' 카테고리의 다른 글

[Python] pass statement  (0) 2018.06.24
[Python] 반복문 - while  (0) 2018.06.23
[Python] 조건문 - if  (0) 2018.06.21
[Python] Iterable 자료형 - Dictionary, Set  (0) 2018.06.20
[Python] Iterable 자료형 - List, Tuple  (1) 2018.06.19

이제 제어라는 주제로 넘어갑니다. 그동안 제어가 없는 코드를 작성했는데, 이 경우 위에서 아래로 멈추지 않고 코드가 진행됩니다. 프로그래밍 분야에서 '제어'는 어느 코드를 실행할지를 결정하는 주체인데, 이번에는 if를 이용해 조건문을 작성하고, 코드의 흐름을 제어해 봅시다. if [condition] 형태로 작성합니다.

if문 작성하기

if는 Python에서 조건문을 작성하기 위한 키워드로, 조건을 판단하여 해당 조건에 맞는 작업을 수행하는 데 쓰입니다.

다른 프로그래밍 언어에서 블럭을 표현하기 위해 중괄호({})를 사용하는 데에 반해, Python에서는 콜론(:)들여쓰기로 블럭을 표현합니다. 조건문은 if, elif, else를 혼합해서 사용할 수 있으며, elif는 타 언어의 else if 구문과 동일한 역할입니다. elif와 else는 상위의 if문 없이 단독으로 사용 불가능합니다.

비교 연산자

조건문은 True나 False로 평가되는 condition을 판단합니다. a가 10보다 큰 경우와 같은 조건식을 작성하려면, 비교 연산자를 사용할 수 있습니다.

  • x < y : x가 y보다 작은 경우 True
  • x <= y : x가 y보다 작거나 같은 경우 True
  • x > y : x가 y보다 큰 경우 True
  • x >= y : x가 y보다 크거나 같은 경우 True
  • x == y : x와 y가 같은 경우 True
  • x != y : x와 y가 다른 경우 True

비교 연산자는 chaining(이어 붙이기) 가능합니다. a가 5 이상, 10이하인 경우5 <= a and a <= 10이라는 조건식을 사용할 수도 있지만, 아래처럼 비교 연산자를 체이닝하는 것이 더 직관적입니다.

논리 연산자

a가 10보다 크고 짝수인 경우와 같은 조건식을 작성하려면, 논리 연산자를 사용할 수 있습니다. 타 언어에선 &&, ||, !와 같은 키워드로 사용되는데, Python은 이들을 and, or, not과 같이 키워드로서 표현합니다.

in 키워드

Python은 iterable 자료형을 정말 잘 지원하고 있다고 했습니다. 특정 값 x가 iterable 자료형에 들어 있는지를 검사하려면 in 키워드를 사용하면 됩니다. 또한, Bool 연산자인 not은 in에도 적용 가능하므로 '해당 값이 들어 있지 않은지'도 검사할 수 있습니다.

삼항 연산자

True일 때 x 리턴, False일 때 y 리턴과 같은 로직을 작성하려면, 아래처럼 if문을 작성할 수 있습니다.

'nickname' 이라는 key가 딕셔너리에 있으면 d['nickname']을 출력하고, 없으면 d['name']을 출력하는 코드입니다. Python은 삼항 연산자를 지원하며, 아래처럼 사용할 수 있습니다.

[condition이 True일 때의 리턴값] if [condition] else [condition이 False일 때의 리턴값] 형태로 사용합니다. 물음표와 콜론을 사용하는 타 언어의 삼항 연산자와 비교하더라도 의외로 가독성이 높습니다.

이전에 List와 Tuple을 다뤄 봤습니다. 이 둘은 값의 나열을 다루며, 순서가 보장되기 때문에 인덱싱과 슬라이싱이 가능했죠. 이번에 다뤄 볼 Dictionary와 Set도 Iterable 자료형이지만, List나 Tuple과는 조금 다릅니다.

Dictionary

Dictionary는 Key-value 쌍으로 표현되는 자료형입니다. 사람에 대한 정보는 이름=조민규, 닉네임=PlanB처럼 표현할 수 있듯, Dictionary라는 단어의 뜻처럼 사전처럼 데이터를 관리합니다.

값 조회하기

List와 Tuple은 인덱스로 값을 조회했던 것에 비해, 딕셔너리는 key를 통해 값을 조회합니다.

값 추가, 수정, 제거하기

Dictionary는 값 추가, 수정, 제거가 자유롭습니다.

Set

Set은 수학의 집합과 비슷한 자료형입니다. 중복을 허용하지 않고, 순서가 없습니다. 사실 수학의 집합 개념을 사용하거나, 중복을 제거하는 용도가 아니면 자주 사용하지는 않습니다.

값 추가, 수정, 제거하기

Set은 Tuple과 다르게 mutable(가변) 자료형이기 때문에 값을 자유롭게 추가, 수정, 제거할 수 있습니다. 그러나 다른 iterable 자료형에 비해 문법적으로 조금 다릅니다.

List에서 중복된 값 없애기

Set은 중복을 허용하지 않기 때문에, List와 같은 자료형에서 중복된 값을 없애기 위해서 자주 사용됩니다.

문자열 이야기

문자열도 Iterable이며 순서가 보장되는 자료형입니다. 따라서 인덱싱과 슬라이싱, 합과 곱 연산이 가능합니다.

Unpacking

Iterable에는 unpacking이라는 개념이 있습니다. 객체의 각 요소들을 풀어 변수에 대입하는 것입니다. Python 3에는 확장 언패킹(extended unpacking)이라는 개념도 존재합니다.

Unpacking의 반대 개념으로 packing이 있는데, 사실 우리가 위에서 Iterable 객체에 리터럴로 값을 대입했던 것들이 모두 packing에 속합니다.

타입 캐스팅

Iterable 타입 간 타입 캐스팅도 자유롭습니다. 단, list/tuple/set을 dictionary로 캐스팅할 수는 없습니다.

Iterable 타입의 참과 거짓

Iterable 타입의 참과 거짓을 판단하는 기준은 정말 간단합니다. 비어 있으면 False, 비어 있지 않으면 True입니다.

'Python 계열 > Python 레거시 글' 카테고리의 다른 글

[Python] 반복문 - for  (0) 2018.06.22
[Python] 조건문 - if  (0) 2018.06.21
[Python] Iterable 자료형 - List, Tuple  (1) 2018.06.19
[Python] 변수와 기본 자료형  (0) 2018.06.18
[Python] 주석  (0) 2018.06.17

+ Recent posts