Python의 함수는 으로서 관리됩니다. 쉽게 말하면, 변수에 할당할 수 있다는 것입니다

이를 프로그래밍 언어 디자인 측에선 일급 객체라고 부릅니다. 이는 다른 객체들에 적용 가능한 일반적인 연산을 모두 지원하는 객체를 가리킵니다. 함수에 매개변수로 넘기기, 변수에 대입하기와 같은 연산들이 여기서 말하는 일반적인 연산의 예입니다. 다음과 같은 조건을 만족할 때 일급 객체라고 말할 수 있습니다.

  • 변수나 데이터 구조안에 담을 수 있다.
  • 파라미터로 전달 할 수 있다.
  • 반환값(return value)으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 동적으로 프로퍼티 할당이 가능하다.

Python의 함수는 해당 조건을 모두 만족하며, 따라서 일급 객체입니다.

lambda

그러나 Python의 함수는 JavaScript의 함수처럼 런타임 생성과 익명 생성이 불가능하므로 일급 함수라고 분류할 수는 없습니다. 런타임 생성은 그때 그때 함수를 만든다는 의미인데, Python은 이 일이 불가능합니다. return def ...와 같은 표현을 할 수 없다는 것입니다. 이를 위해 Python에서는 lambda를 지원합니다.

lambda는 함수를 생성할 때 사용하는 예약어로, def와 동일한 역할을 합니다. 이는 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳(런타임 또는 익명으로 생성해야 하는 경우)에 주로 쓰입니다.

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

[Python] 객체지향  (0) 2018.06.29
[Python] 빌트인 함수  (0) 2018.06.28
[Python] docstring  (0) 2018.06.26
[Python] 함수  (0) 2018.06.25
[Python] pass statement  (0) 2018.06.24

주석에 대해서 설명한 적이 있었고, 기본 자료형에서 문자열을 이야기할 때 샘플 코드에서 큰 따옴표 3개는 함수의 docstring에서 사용한다라고 한 적 있었습니다. docstring모듈, 함수, 클래스, 메소드 정의의 최상단에 위치하는 문자열입니다. 주석의 일종이지만, 컴파일 타임에 제외되는 # 주석과 다르게 하나의 특수 속성이 됩니다. 아래는 함수에 대한 docstring의 예입니다.

함수 정의 최상단에 큰 따옴표 3개로 묶인 문자열로 docstring을 정의했습니다. 함수에 대한 설명, 파라미터 정보, 반환값에 대한 정보가 포함되어 있습니다. 이를 통해 각 파라미터에는 어떤 타입의 값을 전달해야 하는지, 함수가 어떤 작업을 하고, 어떤 값을 반환하는지 등을 바로 이해할 수 있습니다. 한가지 신기한 점은, help라는 함수에 sum 함수를 전달하고 반환받은 docstring에 대한 정보와, __doc__이라는 함수의 속성입니다. docstring은 # 주석처럼 컴파일 타임에 제외되지 않는다는 것입니다. 따라서 Python의 docstring은 최소한의 노력으로 코드를 문서화할 수 있는 강력한 무기입니다.

docstring은 작은 따옴표 3개로 묶인 문자열로 작성해도 상관 없으나, Python docstring 제안서에서는 큰 따옴표를 권고하고 있습니다. docstring은 함수만이 아니라 모듈, 클래스, 메소드 등에 모두 작성 가능하며 docstring을 작성하는 스타일은 Google의 Python docstring guide가 가장 대표적입니다. 주석과 docstring이 필수는 아니지만, 지금의 내가 아닌 내 코드를 보는 다른 사람을 위해 꼭 적어주는 것이 좋습니다.

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

[Python] 빌트인 함수  (0) 2018.06.28
[Python] 값으로서의 함수와 lambda  (0) 2018.06.27
[Python] 함수  (0) 2018.06.25
[Python] pass statement  (0) 2018.06.24
[Python] 반복문 - while  (0) 2018.06.23

입력값을 가지고, 특정 작업을 수행한 다음에 결과물을 내어 놓는 것이 함수입니다. 프로그래밍을 하다 보면 동일한 내용을 반복해서 작성하는 경우가 있습니다. 이렇게 '특정한 목적의 작업을 수행하며 재사용성이 큰 부분'을 묶어 함수로서 작성할 수 있습니다. 예로 두 수의 합이나, 두 수의 몫과 나머지를 구하는 것 등을 함수로 정의할 수 있습니다.

함수 정의하기

간단하게, 두 수를 입력받아 합을 리턴하는 함수를 작성하겠습니다.

Python에서는 함수를 정의하기 위해 def라는 키워드를 사용하며, 각 함수에는 이름0개 이상의 인자를 명시해야 합니다. def [func_name](params) 형태이며, 이를 함수의 signature라고 합니다. 위 함수의 이름은 sum이며, 입력 인수는 a와 b로 2개이고, 리턴 값은 a + b입니다. 따라서 sum(1, 5)의 결과값은 6이 됩니다.

위의 sum(1, 5)와 같은 구문을 함수 호출이라고 부릅니다. 함수의 이름 뒤에 소괄호를 붙이고, 인자를 필요로 하는 경우에는 콤마(,)로 구분하여 전달합니다. 함수를 호출하게 되면 도로에서 차선을 이동하듯 제어가 넘어가고, 함수가 종료되면 다시 제어가 되돌아옵니다.

Python의 함수는 0개 이상의 인자를 받고, 0개 이상의 값을 리턴할 수 있습니다. 그러므로 함수의 리턴은 있을 수도 있고 없을 수도 있으며, 여러 개의 값을 리턴할 수도 있습니다.

리턴이 없는 함수

위의 say_hello 함수는 아무 인자도 받지 않고, 'hello'를 출력하며 리턴이 없습니다. 그러나 함수의 리턴 값은 None으로 처리됩니다. 함수에 리턴이 없다면, 자동으로 return None 처리가 되는 것입니다.

여러 개의 값을 리턴하는 함수

위의 divmod 함수는 두 개의 인자를 받고, floor div의 결과값(몫)나머지를 리턴합니다. Python은 함수에서 2개 이상의 값을 리턴할 경우 Tuple 타입으로 처리되며, 따라서 위의 예처럼 함수의 리턴 값을 unpacking할 수 있습니다.

함수 인자의 기본값

함수의 인자에 기본값을 설정할 수 있습니다.

함수 호출 시, 위처럼 기본값이 설정된 인자(a, b)에 별도로 값을 전달하지 않으면 기본값으로 처리됩니다. 인자를 전달하든 전달하지 않든 상관 없으므로, 기본값이 설정된 인자를 선택 인자라고 부릅니다. 위 함수의 경우 a와 b 모두 기본값이 0으로 설정되어 있고, 따라서 sum()처럼 별도의 인자 전달 없이 호출하면 a와 b 모두 기본값인 0을 갖습니다.

함수 인자의 종류

위에선 함수 호출 시 모든 인자를 순차적으로 전달했고, 이를 위치 인자로 부릅니다. 인자를 키워드와 함께 명시적으로 전달할 수도 있으며, 이를 키워드 인자라고 부릅니다.

만약 전달된 모든 문자열을 이어붙여 리턴하는 함수를 작성하려면, 인자의 갯수가 동적이어야 합니다. 이를 위해 가변 인자(variable argument)를 사용합니다.

변수 앞에 asterisk(*) 기호를 붙이면, 해당 변수는 가변 인자로 관리되며 전달된 인자들은 Tuple로 처리됩니다. 따라서 위 함수는 인자의 갯수가 자유롭습니다. 위치 인자를 가변적으로 받으며 이를 튜플로 처리하므로, 이를 가변 위치 인자 튜플이라고 부릅니다. 키워드 인자도 가변으로 정의할 수 있는데, 아래처럼 변수 앞에 asterisk(*)를 두 개 이어붙이면 됩니다.

해당 변수는 가변 인자로서 관리되며 전달된 인자들은 Dictionary로 처리됩니다. 따라서, 함수의 인자는 아래 4종류가 있습니다.

  • 필수 인자
  • 선택 인자
  • 가변 위치 인자 Tuple
  • 가변 키워드 인자 Dictionary

함수에 이 4종류의 인자를 모두 사용하는 경우, 위치 인자 - 키워드 인자 - 가변 위치 인자 튜플 - 가변 키워드 인자 딕셔너리 순으로 정의해야 합니다. 이 순서를 지키지 않을 경우, 인자 할당에 애매함이 생기므로 가변 인자는 맨 뒤쪽에 정의해야 문제가 생기지 않습니다.

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

[Python] 값으로서의 함수와 lambda  (0) 2018.06.27
[Python] docstring  (0) 2018.06.26
[Python] pass statement  (0) 2018.06.24
[Python] 반복문 - while  (0) 2018.06.23
[Python] 반복문 - for  (0) 2018.06.22

pass'아무 것도 하지 않게'하는 키워드입니다. continue는 현재 루프를 건너뛰고 다음 순번으로 넘어가도록 하지만, pass는 수행할 코드가 없다는 것을 명시적으로 나타내주기 위한 역할을 합니다. null statement라고도 표현합니다.

위와 같이 if, for, while에 모두 적용 가능하며, 이후 배울 함수클래스에도 pass statement를 적용할 수 있습니다. 콜론(:)과 들여쓰기로 표현되는 코드 블럭이라면 모두 적용할 수 있다는 것입니다.

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

[Python] docstring  (0) 2018.06.26
[Python] 함수  (0) 2018.06.25
[Python] 반복문 - while  (0) 2018.06.23
[Python] 반복문 - for  (0) 2018.06.22
[Python] 조건문 - if  (0) 2018.06.21

while조건식이 속해 있는 반복문입니다. 조건 반복문이라고도 부릅니다. 아래 코드는 무한루프를 발생시킵니다.

위처럼 while [condition] 형태로 반복문을 표현하며, condition이 True인 동안 블럭 내부의 코드를 반복하며 실행합니다. while문을 이용해 1부터 100까지의 수를 누적하여 출력하는 코드를 작성하겠습니다.

사실 이 코드는 for문으로도 표현 가능합니다.

대부분의 while문은 이처럼 for문으로 대체 가능하며, for문은 비교적 더 간결하고, iterable 자료형을 쉽게 다룰 수 있기 때문에 더 유연하기도 합니다. 대부분의 스타일 가이드에서도 while보단 for를 장려하고 있으니, while을 통해 코드를 매우 직관적으로 작성할 수 있는 상황이 아니라면 for를 사용하는 편이 더 좋습니다.

break, continue statement

while문도 반복문으로 분류되므로, for처럼 breakcontinue를 사용할 수 있습니다.

while - else

for-else가 있는 것처럼, while문에서도 else를 사용할 수 있습니다. for에 붙은 else는 for가 break되지 않고 정상 종료되었을 때 해당 블럭의 코드가 실행되는 것처럼, while의 else도 조건식이 거짓인 경우(while이 break되지 않고 정상 종료될 때) 해당 블럭의 코드가 실행됩니다.

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

[Python] 함수  (0) 2018.06.25
[Python] pass statement  (0) 2018.06.24
[Python] 반복문 - for  (0) 2018.06.22
[Python] 조건문 - if  (0) 2018.06.21
[Python] Iterable 자료형 - Dictionary, Set  (0) 2018.06.20

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

프로그래밍을 하다 보면 서로 연관된 연속적 데이터를 하나의 변수에 모아 두면 좋은 상황이 생깁니다. Java와 같은 언어에서 List, Map과 같은 Collections API를 지원하는 것처럼, Python에서는 이를 위해 Iterable 자료형을 지원합니다. Iterable 자료형을 보면, '파이썬답다'라는 생각이 가장 먼저 듭니다. Iterable은 반복 가능한이라는 뜻인데, Python은 반복(iteration)이라는 개념을 정말 잘 지원하고 있고, Python의 간결함은 Iterable 자료형에서 오는 경우가 많으므로 잘 알고 있어야 합니다.

Iterator pattern(반복자 패턴)이 떠오를 수 있는데, 이는 사실 이미 디자인 패턴으로 정형화되어 있기 때문입니다. 연속된 데이터를 포함하고 있는 자료의 요소들을 순회할 수 있는 방법을 제공하는 패턴을 Iterator pattern이라고 합니다. 대부분의 언어에서 Iterator pattern을 문법적인 요소들로 제공(Java의 Collections 등)하고 있기는 하지만, Python만큼 언어에 자연스럽게 녹아 있는 경우는 많지 않습니다.

Python의 대표적인 iterable 자료형은 아래처럼 분류됩니다.

  • List : 가장 일반적인 iterable 자료형입니다. 값 접근, 추가, 수정, 삭제가 자유롭습니다.
  • Tuple : List와 유사하지만, Tuple은 한 번 정의하고 나면 값 접근은 가능하지만 추가, 수정, 삭제가 불가능합니다. Read-only List라고 생각할 수 있습니다.
  • Dictionary : key-value 쌍으로 이루어진 자료형입니다.
  • Set : 수학의 집합 개념과 비슷합니다. 중복을 허용하지 않으며, 순서가 보장되지 않습니다.

Python의 모든 iterable 자료형은 각 요소의 데이터 타입이 자유롭습니다. 하나의 List에 정수, 실수, 문자열 등이 함께 들어갈 수 있다는 것입니다.

List

가장 일반적인 iterable 자료형이라고 했습니다. List는 값을 다루는 부분에 있어 매우 자유롭습니다. List를 만들 때는 아래처럼 대괄호([ ])로 감싸 주고 각 요소들은 쉼표로 구분합니다.

인덱싱과 슬라이싱

Python에선 List에 접근하기 위해 타 프로그래밍 언어들의 배열 접근 방식과 비슷한 인덱싱이라는 개념을 지원하고, 추가적으로 슬라이싱이라는 개념도 있습니다. 이 둘을 이용해 각 요소에 접근하고, 특정 집합을 잘라낼 수 있습니다. 대부분의 프로그래밍 언어에서 이와 같은 인덱싱은 보통 zero-based numbering(0부터 시작)한다는 것을 참고하기 바랍니다.

del이라는 키워드를 사용했는데, 제대로 이해하려면 매직 메소드라는 개념을 알아야 하므로 여기서는 'Iterable 객체의 특정 요소를 제거하기 위한 키워드'라고만 이해하고 넘어가도록 합시다.

합과 곱

Python의 List는 서로 합하고, 정수와 곱할 수 있습니다.

값이 모두 n이고 길이가 m인 리스트 만들기

List의 곱을 이용해 값이 모두 n이고 길이가 m인 리스트를 만들 수 있습니다. [n] * m 코드를 사용하면 됩니다.

Tuple

Tuple은 Read-only(불변) List라고 생각할 수 있습니다. List처럼 나열된 값을 다루지만, 한 번 선언되고 나면 값의 생성, 수정, 삭제가 불가능합니다.

인덱싱과 슬라이싱

Tuple도 List와 동일한 형태의 인덱싱과 슬라이싱이 가능합니다.

합과 곱

Tuple도 서로 합하고 정수와 곱할 수 있습니다. 합과 곱은 해당 연산의 결과를 리턴하므로, 실제 튜플에는 변동이 생기지 않기 때문에 Read-only의 룰을 위반하지 않으므로 가능한 것입니다.


프로그래밍의 기본은 변수로부터 시작됩니다. 변수는 을 저장하는 공간이며, 이 값은 변수의 타입에 따라 숫자, 문자열, 리스트 등이 될 수 있습니다. Python은 동적 타이핑을 사용하므로, 변수에 일단 값을 할당해 두고 나면 런타임에 타입 검사를 수행합니다. 변수의 값 할당은 assign(=) 기호를 사용합니다.

변수의 assign은 단순한 바인딩 구문이며, 이는 등호의 우변을 먼저 평가한 후 그 평가값을 좌변에 할당하게 됩니다. 따라서 우변 평가 -> 좌변 할당이라는 순서를 알고 있으면 좋습니다. Python의 변수는 기본 자료형Iterable 자료형으로 나누는 것이 좋고, 여기서는 기본 자료형에 대해서 다뤄 보도록 하겠습니다.

숫자형

Python의 숫자형은 정수, 실수를 포함해 숫자 형태로 이루어진 자료형입니다. Python의 모든 숫자 자료형은 최소값과 최대값에 대한 제한이 없습니다. Python의 숫자형은 아래처럼 나눌 수 있습니다.

  • 정수(int) : 말 그대로 정수 자료형입니다.
  • 실수(float) : 소수점이 포함된 숫자를 말하며, e 표기법도 사용할 수 있습니다. 다른 언어에서 실수를 다루기 위해 float과 double 타입이 따로 있는 것에 비해, Python은 float 타입만 사용합니다.
  • 8진수(int) : 0o로 시작되며 8진법으로 표현되는 정수를 뜻합니다.
  • 16진수(int) : 0x로 시작되며 16진법으로 표현되는 정수를 뜻합니다.

아래는 각 숫자형 데이터 타입들을 변수에 할당하는 예입니다.

사칙연산

다른 프로그래밍 언어들처럼, Python에서도 보편적으로 사용되는 사칙연산들이 당연히 지원됩니다.

  • + : 두 항의 합
  • - : 좌측 항에서 우측 항을 뺀 값
  • * : 두 항의 곱
  • / : 좌측 항에서 우측 항을 나눈 값(Python 2에선 무조건 소수점을 버리고 int를 리턴하지만, Python 3에선 최대 소수점 16번째 자리까지 표현된 float가 리턴됩니다. true div라고 부릅니다.)
  • % : 죄측 항에서 우측 항을 나눈 나머지

아래는 각 연산자의 예입니다.

Python은 사칙연산을 위한 몇 가지의 연산자를 더 지원하고 있습니다.

  • // : 좌측 항에서 우측 항을 나누어 소수점 아랫 자리를 버린 값(floor div라고 부릅니다.)
  • ** : 좌측 항에서 우측 항 만큼 제곱한 값

아래는 floor div와 제곱 연산자의 예입니다.

문자열

문자열(String)은 문자, 단어 등으로 구성된 문자들의 집합을 의미합니다. C, Java에서는 문자(char)문자열(string)을 따로 분류하고 있지만, Python은 문자를 다루는 경우 길이에 상관 없이 문자열로 통일하고 있습니다. 아래는 모두 문자열입니다.

  • PlanB
  • a

마지막은 blank를 뜻합니다. 아무 문자도 들어가 있지 않더라도 문자열로 취급할 수 있다는 것입니다. 다른 언어에서 작은 따옴표(')로 감싸는 형태의 char 자료형이 없는 만큼, 문자열을 감싸는 방식은 여러가지가 있습니다.

문자열 포매팅

문자열 포매팅은 문자열 안에 특정 값을 삽입하는 것을 말합니다. 여기서 특정 값은 대체적으로 변수입니다. 포맷 코드를 이용할 수도 있고, 문자열의 format 메소드를 사용할 수도 있습니다.

보편적으로 인덱스가 제거된 포매팅 문자열과 format 메소드를 사용하는 3번을 사용합니다.

문자열을 서로 더하거나, 정수와 곱하거나, 일부를 자르는 등 수많은 작업들을 할 수 있지만 여기선 자료형에 대해서만 알아보기로 했으므로(이후의 Iterable 객체와 연관되기도 하므로) 다음으로 미루도록 하겠습니다.

bytes

Python은 byte로 이루어진 문자열을 위해 bytes라는 타입을 지원합니다. Python에서는 바이트 문자열을 b'abcd'와 같은 방식으로 표현합니다. 실제로 변수에는 인코딩된 상태로 할당됩니다.

Bool

불린(Boolean)참(True) 또는 거짓(False)만을 값으로 가질 수 있는 자료형입니다. 참고로 다른 언어의 boolean 자료형과 다르게 첫 문자가 대문자로 시작되는 True, False를 사용한다는 점입니다.

None

None'아무 데이터를 가지고 있지 않다'라는 것을 표현하기 위해 사용합니다. Java의 null과 다르게, None이라는 값도 하나의 객체(NoneType)입니다.

타입 캐스팅

문자열 '1'을 숫자 1로 변환하고 싶다면, 타입 캐스팅을 이용할 수 있습니다. 파이썬에서 제공되는 빌트인 함수들을 사용할 수 있습니다.

자료형의 참과 거짓

bool('hello')가 True, bool('')가 False인 이유는 Python의 모든 자료형엔 참과 거짓이 있기 때문입니다.

  • 숫자 : 0, 0.0, 0o0, 0x0은 거짓이며, 나머지는 모두 참입니다.
  • 문자열 : 빈 문자열('')은 거짓이며, 나머지는 모두 참입니다.
  • bool : True는 참이며, False는 거짓입니다.


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

[Python] Iterable 자료형 - Dictionary, Set  (0) 2018.06.20
[Python] Iterable 자료형 - List, Tuple  (1) 2018.06.19
[Python] 주석  (0) 2018.06.17
[Python] Hello World로 Python 둘러보기  (0) 2018.06.16
[Python] 설치  (0) 2018.06.15

+ Recent posts