문서:Python/문법

문서의 이전 버전(r13)을 보고 있습니다.

역사 raw
대문 랜덤 문서 최근 토론



1. 개요2. 편집 지침3. 자료형4. 입출력5. 들여쓰기6. 함수
6.1. 람다 함수
7. 변수
7.1. 리스트, 튜플7.2. 스트링 변수7.3. 딕셔너리7.4. 부울
8. 슬라이싱

1. 개요

Python의 문법을 설명한다. 기준은 3.x대이다.

2. 편집 지침

소스 코드로 예시를 들 때
{{{#!syntax python (소스코드) }}}
문법을 활용하여 소스코드를 써 주시기 바랍니다.

예시:
print("Hello, Python!")

3. 자료형

파이썬은 변수를 선언할 때 따로 자료형을 지정하지 않는다.[1] 하지만 변수 간 형변환을 할 때에는 필요하다.
  • str() - float형이나 int형을 변환할 때 사용한다. 제일 기본적으로 쓰인다.
  • int() - 정수형이다. float형은 반올림한다.[3]
  • float() - 실수형이다.

list()tuple()은 서로간 형 변환을 할 때 사용된다.

4. 입출력

기본적으로 출력은 print(), 입력은 input()을 사용한다.
input()은 기본적으로 str 형태로 값을 받으며, 특정 자료형 함수를 이용하면 다른 형으로 값을 받을 수 있다. 만약 그 형으로 값이 나오지 않으면 예외 오류를 뿜는다.

print("Hello World!")
print("%d" %int)
print("%s" %str)

a = input("input")
b = int(input("input"))
c = float(input("input"))

5. 들여쓰기

Python 특유의 디자인 철학에 따라 Python은 분기문과 반복문 등을 사용할 때 들여쓰기를 행해야 한다. 보통 권장되는 것은 4번 띄어쓰기이며, Tab은 권장되지 않으나 일부 텍스트 에디터에서 Tab의 스페이스 개수를 설정할 수 있기 때문에 큰 문제는 아니다. 2번이든 4번이든 한 번 했으면 그걸로 계속 써야 한다. 그렇지 않으면 예외 오류가 일어난다.
<예시>
if True:
    print("Hello world")
for n in range(0, 10):
  print(n) #문법 오류

6. 함수

Python의 함수 정의 키워드는 def이다. 예시를 보자.
<예시>
def multiply(a, b):
    return a*b

6.1. 람다 함수

람다 함수도 사용 가능하다.
lambda square n: n**2

7. 변수

파이썬에서 딱히 변수구분을 하지않는다.

7.1. 리스트, 튜플

파이썬의 리스트는 말 그대로 순서대로 저장하는 시퀀스이자 변경 가능한 목록(Mutable List)을 말한다. 입력 순서가 유지되며, 내부적으로는 동적 배열로 구현되어 있다.

타 언어의 배열처럼 파이썬도 array라는 배열에 해당하는 모듈을 제공하긴 하지만 기본적인 기능만을 제공하며, 사실상 리스트가 배열의 역할을 대체한다. 파이썬의 리스트는 다른 언어에서 제공하지 않는 매우 다양하고 편리한 기능을 제공한다. 리스트를 사용하면 사실상 스택(자료구조)을 사용할지 큐(자료구조)를 사용할지를 고민하지 않아도 되며, 스택과 큐에서 사용 가능한 모든 연산을 동시에 제공한다. 리스트는 객체로 되어 있는 모든 자료형을 다음 그림과 같이 포인터로 연결하는 구조로 되어 있다.


파이썬은 모든 것이 객체며, 파이썬의 리스트는 이들 객체에 대한 포인터 목록을 관리하는 형태로 구현되어 있다. 사실상 연결 리스트에 대한 포인터 목록을 배열 형태로 관리하고 있으며, 그 덕분에 파이썬의 리스트는 배열과 연결리스트를 모두 합친 듯이 강력한 기능과 문법을 제공한다.

리스트는 수정 가능하지만, 튜플은 최초 생성 이후 수정이 불가능하다. list()tuple() 함수를 통해 서로 형 변환이 가능하다. 고차원 리스트도 가능하다.
<예시>
l = [1, 2, 3] #일차원 리스트
t = tuple(l) #튜플로 변환
li = list(t) #리스트로 변환
l = [[1, 2, 3], [1, 2, 3]] #이차원 리스트
li = l[0][2] #li = 3

7.2. 스트링 변수

글자로 이루어진 변수를 스트링 변수라고 한다.
<예시>
>>> a = 'text'

따옴표를 이용하지 않으면 오류가 걸린다.
>>> a = text

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'text' is not defined

7.3. 딕셔너리

파이썬의 딕셔너리는 키/값 구조로 이뤄진 딕셔너리를 말한다. 파이썬 3.7 이상에서는 입력 순서 또한 유지되며, 내부적으로는 해시 테이블(Hash Table)로 구현되어 있다. 3.6 이하에서는 입력 순서를 보장하지 않으므로 유의해야 한다. 중괄호를 사용해서 선언한다.
a = {}

다음과 같이 key1, key2는 초기값으로 지정해 선언하거나 key3처럼 나중에 별도로 선언하여 value3라는 값을 할당할 수 있다.
>>> a = {'key1':'value1', 'key2':'value2'} 
>>> a
{'key1': 'value1', 'key2': 'value2'}
>>> a['key3'] = 'value3'
>>> a
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

값에는 리스트 뿐만 아니라 집합 자료형 등도 모두 가능하다.
>>> a = {'key1':[1, 2, 3], 'key2': (4, 5, 6)}
>>> a
{'key1': [1, 2, 3], 'key2': (4, 5, 6)}

7.4. 부울

부울이란 참(True)과 거짓(False)으로만 이루어진 자료형이다. 예를 들어서
a == 1

이라고 입력하면 a가 1이라면 'True',그 외의 것이라면 'False'가 출력된다.
while True:
    code

처럼 무한루프를 만들 수도 있다.

8. 슬라이싱

파이썬에서는 슬라이싱이라는 매우 편리한 기능을 제공한다. 무엇보다 내부적으로 매우 빠르게 동작한다. 위치를 지정하면 해당 위치의 배열 포인터를 얻게 되며 이를 통해 연결된 객체를 찾아 실제 값을 찾아내는데, 이 과정은 매우 빠르게 진행되므로 리스트나 문자열을 조작할 때는 항상 슬라이싱을 우선으로 사용하는 편이 속도 개선에 유리하다.


문법
결과
설명
S[1:4]
녕하세
인덱스 1에서(0부터 시작) 4 이전까지(4는 포함하지 않는다) 표현한다. 4개를 의미하는 게 아니므로 유의해야 한다.
S[1:-2]
녕하
인덱스 1에서 -2 이전까지(-2는 포함하지 않는다) 표현한다. 뒤에서부터는 음수로 접근이 가능하다.
S[1:]
녕하세요
문자열의 시작 또는 끝은 생략 가능하다.
S[:]
안녕하세요
둘 다 생략하면 사본을 리턴한다. 파이썬은 a=b와 같은 형태로 할당하면 변수의 값이 할당되는 것이 아니라 a 변수가 b 변수를 참조하는 형태가 된다.
참조가 아닌 값을 복사하기 위해[:]를 사용할 수 있으며, 이 방식은 문자열이나 리스트를 복사하는 파이썬다운 방식(Pythonic Way)이기도 하다.
S[1:100]
녕하세요
인덱스가 지나치게 클 경우 문자열의 최대 길이만큼만 표현된다. S[1:] 과 동일하다.
S[-1]
마지막 문자(뒤에서 첫 번째)
S[-4]
뒤에서 4번째
S[:-3]
안녕
뒤에서 3개 글자 앞까지
S[-3:]
하세요
뒤에서 3번째 문자에서 마지막까지
S[::1]
안녕하세요
1은 기본값으로 동일하다.
S[::-1]
요세하녕안
뒤집는다.
S[::2]
안하요
2칸씩 앞으로 이동한다.
[1] 자료형이 없는 게 아니라 인터프리터가 알아서 지정한다[2] 정확히 말하자면 뱅커스 라운딩을 사용하기 때문에 상황에 따라 다르다. 원하는 대로 반올림이나 내림이 필요하다면 math 모듈을 이용해야 한다.[3] 정확히 말하자면 뱅커스 라운딩을 사용하기 때문에 상황에 따라 다르다. 원하는 대로 반올림이나 내림이 필요하다면 math 모듈을 이용해야 한다.