파이썬 인터프리터가 실행할 수 있는 명령들을 Statement 이라고 한다. 독립적인 최소의 실행가능 단위. 한글로 구문이라는 번역이 널리 쓰인다. 솔직히 이 구문이라는 번역이 의미가 크게 와닿지는 않는다.
영어사전의 정의를 본다.
*Statement 이란 (Cambridge Dictionary)
- something that someone says or writes officially, or an action done to express an opinion:
누군가 공식적으로 말하거나 글을 쓰는 것, 혹은 의견을 표출하기 위해 하는 행동
외신을 보면 statement by president(대통령 성명서 혹은 의견서) , financial statement(재무재표) 등 statement에 관련된 맥락은 어떤 집단의 공식적인 구체적 실행같은 무거운 느낌이다. 그에 비해 구문이라는 다소 어색한 한글 표현은 형식적인 문장 구조같은 느낌이다.
statement는 문장,구문,표현문,명령문 등으로 번역될 수 있을 것이고 세부적으로 제어문 control statement, 선언문 declaration statement 대입문 assignment statement 등 statement의 개별 특성에 따라 나뉠 수가 있을 것이다.
이런 부분에 의문을 가질 때 프로그래밍 언어는 영어가 중요하다.
statement는 단순한 문장보다는 실질적인 action (행동이나 절차)가 진행된다는 느낌을 주는 단어이다. 미국 대통령이 statement 하면 특정 국가에 압력을 넣거나 하는 느낌이 statement 문장에 담겨있다.
프로그래밍 언어를 고안한 이들이 명령문을 sentence (문장) 이라고 하지 않고 statement 이라고 이름지은 이유가 짐작이 간다. (sentence는 법정에서 형을 선고하다라는 선언적인 뜻이 있긴 하다)
다시 컴퓨터언어의 statement로 되돌아 와서 파이썬의 statement 을 하는 쪽은 프로그래머이다. 그리고 그 statement를 받는 쪽은 컴퓨터 (H/W, S/W, 파이썬의 인터프리터) 이다. 컴퓨팅 환경이 넓어졌으니 인터넷에 연결된 네트워크 일수도 있고. 그 statement에 영향 받는 네트워크상 수많은 개체들이 있을 것이고 statement 을 하는 측은 클라이언트일 수도 서버일 수도 있다. statement의 핵심은 공식적이고 구체적이며 서로에게 무게감 있는 의미있는 내용을 전달하는 것이다. 결과로써 보내는 쪽과 받는 쪽에 대한 상호작용도 발생할 것이다.
이렇게 보면 statement이 단순히 하나의 문장이라고 하기엔 무게감이 느껴진다. 프로그래머는 statement(스테잇먼)을 통해 컴퓨터에 공식적이고 구체적인 행동을 요청할 권한을 가지는 것이다. 권한에 따라서 컴퓨터가 잘 돌아가도록 책임져야할 의무도 지게 된다. 그 프로그래머의 역량만큼 statement의 힘을 행사할 수 있을 것이다. 컴퓨터 boss의 역할이라고 할까?
무한한 컴퓨터의 능력을 끌어내는 것은 프로그래머에게 달려 있어야 하는데... 반전은 H/W와 AI등 고차원적 기술의 발달로 하위 프로그래머들의 일자리가 많이 사라지고 있다고 한다. 이것은 시대흐름에 따른 이유도 있다고 본다. 1차에서 3차산업으로 일자리를 잃어버린 시대를 우린 충분히 겼었다. 4차산업으로의 과정도 반복일 것 같다.
어쨋든 statement의 파워를 사용하는 것은 인간이고 프로그래머이다. 각 프로그래밍 언어가 자기 스타일데로 statement 를 사용한다. 파이썬은 타 언어보다 직관적이고 쉽다. 영어 사용자일 경우 그 장점이 극대화된다. 마치 영어 문장을 읽는 것 같은 statement가 많다. (의식의 흐름을 따라가다보니 어느새 완성 같은...)
- 먼저 알아볼 statement은 assignment statement (대입문) 이다. 말 그대로 값을 대입해서 넣는다.
#정수형 값 리터럴(데이터) 3 을 a 라는 변수(식별자)에 할당(assignment) 한다. 수학의 방정식(equation)아님
a = 3
#변수 두개를 하나의 statement 에 대입. 줄을 바꾸지 않는다.
a , b = 1 , 2
#변수 두개를 두개의 statement 에 대입. 줄을 바꾸지 않는다.(세미콜론 ; 으로 구분)
a = 1; b = 2
#각 라인의 마지막에 백슬레시로 여러개의 라인을 사용할 수 있다.
a= 1+2+3 \ <-- 백슬래시
+4+5+6 \
+7+8+9
#괄호를 사용하면 여러개의 라인을 사용할 수 있다.
a = (1 + 2 + 3 +
4 + 5 + 6 +
7 + 8 + 9)
#리스트도 마찬가지다.
food = ['sushi',
'ramen',
'KoreanBBQ']
*제어문, 함수호출문 등은 해당 단원에서 다룰 예정이다.
- C나 C++ 등 대부분의 언어는 { } 를 사용해서 코드 블록을 표현한다. 파이썬은 indentation 들여쓰기를 사용한다. (파이썬의 특장점) 줄을 맞춰 쓰기 때문에 코드가 깨끗하고 간결하게 보인다. 한편 파이썬이 공백문자를 인식하기 때문에 스페이스도 함부로 다룰 수 없게 된다.
#들여쓰기 예제. for문 다음줄 print함수와 if는 같은 코드 블록이다. break는 if문 코드 블록이다.
(0~9까지 출력하는 루프를 돌다가 i가 5가되면 break로 루프를 종료
for i in range(10):
print(i)
if i == 5:
break
#Line Contiuation (줄바뀜 문자 ; 세미콜론) 기능으로 indentation 이 무시될 수 있다. 그러나 indentation을 하면 코드를 읽기가 더 쉬워진다. (게다가 제어문을 두번 중첩시키면 syntax error를 출력한다)
if True:
print('it''s true')
a=5
if True: print('it''s true'); a=5
*공백의 길이는 다르게 정할수 있으나 4칸이 보통적으로 사용되는 기준이다. indentation은 제어문, 함수정의, 클래스 정의 등에 코드블록이 사용되므로
*indentaion 문법이 틀리면 IndentationError가 뜬다. 들여쓰기가 잘못되었다는 뜻이다.
오랜 경력의 프로그래머들은 주석문을 꼭 써야한다고 이야기하고 있다. 다른 사람이 그 코드를 봤을때 주석문이 잘 되어 있으면 빠르게 내용을 이해할 수 있을 것이다. 또 자신이 몇달전에 작성한 코드에 대해 내용을 다 기억하지 못해도 내용을 알 수가 있다. 그렇다고 너무 장황하게 설명을 하라는 것은 아니다. 코드줄만 늘어나고 읽기 어려워진다. 최대한 간결하고 효율적으로 내용을 전달할 수 있어야 한다.
- Comments 주석문이다. 파이썬은 hash 기호를 사용한다 (#) 인터프리터는 Comment Line을 무시한다.
#Python Comments
#first code
print('Hello World!')
- multi-line 인 경우. 여러 줄에 걸쳐서 작성할 경우 triple quote 따옴표 세개를 쓴다. 작은따옴표 ' 도 되고 큰 따옴표 " 도 된다
'''triple quote
multiple lines
using triple quote'''
- 모듈이나 클래스 함수 메소드 정의의 맨 앞에 triple quote """ 을 사용하여 그 기능이나 내용을 적어준다.
__Doc__ attribute을 사용하면 Docstring을 꺼내온다. 즉 새로운 클래스 함수를 사용할때 도움말 처럼 쓸 수 있다. 자신이 작성하는 코드보다 외부 라이브러리를 많이 활용하는 시대이므로 Docstring은 라이브러리의 설명서나 메뉴얼 같은 것이다. 자신이 작성하는 코드에 포함시키면 좋을 것이다.
def double(num):
"""Function to double the value"""
return 2*num
print(double.__doc__)