함수는 1급 객체이다 정수나 문자열은 1급 객체(first-class object)이다. 따라서 변수, 매개변수, 반환값 등에 정의해서 사용할 수 있다. 함수 또한 1급 객체로 다른 객체와 같은 방식으로 사용할 수 있다. 직접 함수를 정의해서 예를 들어보자. def func(x, y): return x + y var = func var is func # 두 변수는 같은 함수를 참조하므로 레퍼런스가 같다. [결과] True def func(x, y): return x + y func = 10 # 함수가 정의된 func 변수에 숫자를 할당하면 기존 함수 객체가 사라진다. func [결과] 10 이 상태에서 만약 func에 인자를 주면 오류가 난다. def func(x, y): return x + y func..
삼항 연산자로 더 짧은 코드를 만들자 var = int(input("숫자를 입력하세요 : ")) if var < 10: print("10보다 작습니다") else: print("10보다 크거나 같습니다") if-else문을 보통 위와 같이 쓰지만, 한 줄로 더 짧게 만들 수 있다. var = int(input("숫자를 입력하세요 : ")) print("10보다 작습니다") if var < 10 else print("10보다 크거나 같습니다") 이와 같은 삼항 연산자는 코드가 더 짧아진다는 장점 외에도 if-else문보다 메모리도 적게 차지한다. 또한 본인은 함수에서 return할 때 자주 사용한다. 참고하면 좋을 링크도 첨부한다. https://tpgns.github.io/2018/04/24/nested..
반복형(iterable)과 반복자(Iterator)은 다르다! 반복형(iterable)이란? 말 그대로 '반복 가능한 객체'를 말한다. 특징으로 원소를 여러 개 가진 정적인 객체를 만든다. 반복자(Iterator)이란? 반복자 객체는 값을 차례대로 꺼낼 수 있는 객체를 말한다. 동적 처리를 하기 위해 별도의 핸들러를 만든 후 내부의 원소를 하나씩 꺼내 처리하는 기능을 제공한다. 사실 이렇게 봐도 다른 점이 잘 보이지 않는다. 예제로 보자. 우선 Iterable인지 Iterator인지 구별하기 위해 collections 모듈을 import한 후 상속 관계를 파악하는 issubclass 함수를 이용해 Iterable 클래스를 상속받는지, Iterator 클래스를 상속받는지 알아보자. import collec..
단순 제어문 단선 제어문은 if 예약어만 사용해서 참일 경우 해당 문장을 처리하거나 else와 겸용해서 참과 거짓에 따라 문장을 선택해 처리할 수 있다. if False: # if문이 참일 때 실행됨 print("참") else: # if문이 거짓일 때 실행됨 print("거짓") [결과] 거짓 한 가지 유의할 점은 조건식을 판단하기 전에 예외처리가 먼저 진행되므로 if 조건문에 예외가 발생하지 않도록 조심해야 한다. 또한 자료형에서 빈 값은 Flase로 처리한다. 즉 리스트, 딕셔너리, 집합 등이 비어있을 때 False를 반환한다. 복합 제어문 조건이 많아지면 판단해야 하는 경우가 많아지고, 이를 위해서 각 조건을 분리해 제어문을 작성해야 한다. 이런 경우에 elif를 사용한 복합 제어문이 필요하다. ..
변수에 값을 할당(assignment)하다 파이썬은 변수를 정의하면 이름공간에 변수의 이름을 Key로 만들고 객체를 값으로 저장한다. 이름공간이 딕셔너리이기 때문! 이러한 할당문은 모듈, 함수, 클래스 등 다양한 곳에 정의할 수 있다. 여러 값을 여러 변수에 할당하려면 원소의 개수가 같아야 한다. 개수가 같지 않다면 예외가 발생한다! x, y, z = 1, 2, 3 x, y, z = [1, 2, 3] x, y, z = (1, 2, 3) 물론 변수와 원소의 개수가 같지 않아도 패킹을 이용해 남는 원소를 리스트로 묶어버릴 수 있다. x, *y = 1, 2, 3 x, y [결과] (1, [2, 3]) 사용하지 않는 변수는 어떻게 처리할까? 보통 파이썬에서는 관용적으로 사용하지 않는 변수를 _로 처리한다. 이는..
프로그램을 실행해서 원하는 결과가 나와도 프로그램이 완성된 것은 아니다. 프로그램을 유지하려면 프로그램에 대한 설명이 필요하기 때문이다. 특히 모듈, 클래스, 함수에 관한 설명은 긴 문장으로 작성된다. 함수와 클래스의 문서화(docstring) 파이썬 프로그램의 기준은 함수, 클래스, 모듈이다. 이 단위 기능을 설명하기 위해 문서화를 제공한다. 문서화로 작성된 것은 도움말 함수 help로 조회할 수 있다. 아무 모듈이나 import해보자. import math 모듈의 문서화는 속성 __doc__에 저장되고 이를 다른 변수에 할당한 후 print로 출력할 수 있다. import math a = math.__doc__ print(a) [결과] This module provides access to the m..
제어문이나 순환문 등 에 여러 문장을 묶어 작성해야 할 때가 있다. 이 경우 다른 프로그램 언어는 중괄호를 통해 블록 문장으로 구분하지만 파이썬은 들여 쓰는 방식을 사용한다. 또한 한 문장이 길어지는 경우 여러 줄을 사용할 수 있는데 한 문장으로 연결하는 방식에는 역슬래시, 괄호 등을 사용한다. 여러 문장을 한 줄에 쓸 때는 문장의 끝에 세미콜론을 붙인다. 문장의 끝은 한 줄에 여러 문장을 쓸 경우에만 사용한다. 블록 문장의 줄 들여쓰기 (Lines and Indentation) 조건문, 순환문, 함수 정의문 등에 머리부와 몸체부를 콜론(:)으로 구분한다. 몸체부는 들여쓰기 후 한 장 또는 여러 문장의 블록 문장을 작성한다. 들여쓰기 알아보기 순환문인 for문의 머리부를 작성한 후 콜론 다음에 문장을 들..
자바 등의 프로그램 언어는 변수를 정의할 때 변수에 저장될 자료형(Data Type)을 지정하지만, 파이썬의 경우 변수는 단순히 값을 관리한다. 모든 값을 객체로 만들어 사용하는 차별점을 지니기 때문이다. 이는 객체 내부에 객체를 생성한 클래스인 자료형을 항상 가지기 때문에 가능하다. 정수를 실수로 변환하는 형 변환은 정수 객체를 실수 객체로 바꾸는 것이다. 변수에 객체를 바인딩한 후 자료형 결정하기 파이썬의 변수는 실행할 때 값을 보관해서 관리하는 역할만 수행한다. 변수에 값을 할당해서 변수를 정의하면 실제 변수에 객체가 할당되는데, 이를 변수에 객체를 바인딩(binding)한다고 한다. 이는 곧 객체 할당이 자료형을 결정하는 것과 같다. 이런 방식을 동적 자료형(Dynamic typing)이라고 한다..
프로그램을 작성하면 컴퓨터는 작성된 표현식과 문장을 실행하고 계산된 결과를 변수에 저장해 프로그램을 실행한다. 이는 표현식과 문장을 평가해서 처리하는 것과 같다. 즉시 실행해 결과 출력하기 표현식이나 문장을 바로 계산해서 결과를 반환하거나 내부에 바로 사용할 수 있게 구성하는 것을 탐욕스러운 평가(greedy evaluation) 또는 엄격 평가(eager evaluation)라고 한다. 연속적 변수 할당 연속적인 변수 할당과 변수 참조는 다음과 같이 실행된다. a = b = c = d = 5 print(a + b + c + d) print(a.__add__(b).__add__(c).__add__(d)) [결과] 20 20 이처럼 연산자를 연속해서 사용하면 내부적으로 스페셜 메소드를 연속으로 실행해 처리..
파이썬에서 변수는 값을 할당할 때 만들어진다. 변수에 할당되는 모든 값은 객체이다. 객체를 간단하게 숫자, 문자열 등을 리터럴 표기법으로 작성할 수도 있다. 또한 클래스를 사용해서도 생성할 수 있다. 리터럴 표기법은 객체를 직접 만든다 텍스트를 작성하는 방식을 리터럴 표기법이라고 하는데, 이런 표기법으로 작성해도 내부에서는 각각 자료형에 맞는 객체로 저장한다. 우선 상수와 리터럴의 차이를 알아야 한다. 두 용어를 혼동해서 쓰는 사람이 제법 있다. 상수(constant)란? 상수는 변하지 않는 변수를 의미한다. 즉 상수는 숫자나 문자와 같은 데이터가 될 수도 있지만 클래스같은 객체나 구조체도 넣을 수 있다. 주의할 점은 참조 변수를 상수로 지정할 때 상수니까 데이터가 변하지 않겠지? 라고 생각할 수도 있지..
문법에 사용하는 예약어(keyword)의 종류 예약어 관리 모듈은 keyword다. 이 모듈을 import하고 모듈 내 변수 kwlist를 조회하면 예약어의 종류를 알 수 있다. print(keyword.kwlist) [결과] ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', '..