Python 문법 - Sizuha/devdog GitHub Wiki
int형
>>> print 123
long형
>>> print 123L
float형
>>> print 123.4
복소수형 : 허수(i) 부분을 j문자로 표현한다.
>>> print 1+2j
C 문자열 스타일과 비슷하다. 백슬러시(\)로 이스케이프 문자를 넣을 수 있는 것도 마찬가지. 다만 " "와 ' ' 두가지 형식의 따옴표를 모두 사용할 수 있다.
>>> print "문자열"
>>> print '문자열'
여러줄로 구성되는 문자열의 경우, 따옴표 3개(""" 혹은 ''')로 묶을 수 있다.
>>> print """
... 여러줄
... 문자열
... """
문자열 내용은 수정 불가능.
>>> print u'유니코드 문자열'
유니코드 문자열
Python 코드에 유니코드 문자가 포함될 경우 소스 파일의 첫번째나 두번째 줄에 다음과 같이 적어둔다.
# -*- coding: utf-8 -*-
유니코드는 왠만하면 utf-8로 인코딩하는게 정신건강에 좋다.
백슬러시(\)를 이스케이프 문자로 인식하지 않고 그대로 인식.
>>> print r'\n\r'
\n\r
버그? 인터프리트 환경에서, 문자열 마지막에 백슬러시(\)문자가 오는 경우는 제대로 인식하지 못하고 오류를 낸다. 다른 경우는 아직 확인을 못함.
>>> print ur'유니코드\n'
유니코드\n
>>> print 'help' + ' me'
help me
print "=" * 20
print " Title"
print "=" * 20
====================
Title
====================
C처럼 0 base 인덱싱.
>>> sample = '0123456789'
>>> print sample[0]
0
역방향은 1 base가 된다.
>>> sample = '0123456789'
>>> print sample[-1]
9
인덱싱을 범위형으로 지정하면, 문자열에서 부분 문자열을 추출해 낼 수 있다.
[시작인덱스:끝인덱스]
>>> sample = '0123456789'
>>> print sample[1:4]
123
시작인덱스 ~ 끝인덱스-1 까지의 문자열이 추출된다.
[시작인덱스:]
>>> sample = '0123456789'
>>> print sample[3:]
3456789
시작인덱스부터 마지막까지의 문자열을 추출.
[:끝인덱스]
>>> sample = '0123456789'
>>> print sample[:-3]
0123456
처음부터 끝인덱스-1 까지의 문자열 추출.
[:]
>>> sample = '0123456789'
>>> print sample[:]
0123456789
문자열 전부.
"format-string".format(var, ...)
format string은 C# 스타일로 지정.
"{0} ... {1} ...".format(v1, v2, ...)
문자열에 % 연산을 쓰면 C의 printf 형식의 포맷팅을 사용할 수 있다.
>>> num = 7
>>> message = "lucky number is %d" % num
>>> print message
lucky number is 7
다수의 인자를 포맷팅할 경우, % 다음에 튜플 형태로 인자를 넣어야 한다.
>>> print "Copy from %s to %s." % ("A", "B")
Copy from A to B.
format | 説明 |
---|---|
%s | 문자열 (String) |
%c | 문자 한개(character) |
%d | 정수 (Integer) |
%f | 부동소수 (floating-point) |
%o | 8진수 정수 |
%x | 16진수 정수 |
%% | %문자 |
함수 | 설명 |
---|---|
a.upper() | 문자열 a를 모두 대문자로 바꾸어 준다. |
a.count(x) | 문자열 a중 x와 일치하는 것의 갯수를 반환한다. |
a.find(x) | 문자열 a중 문자 x가 처음으로 나온 위치를 반환한다. 없으면 -1을 반환한다. |
a.index(x) | 문자열 a중 문자 x가 처음으로 나온 위치를 반환한다. 없으면 에러를 발생시킨다. |
a.join(s) | s라는 문자열의 각각의 요소 문자사이에 문자열 a를 삽입한다. |
a.lower() | 문자열 a를 모두 소문자로 바꾸어 준다. |
a.lstrip() | 문자열 a의 왼쪽 공백을 모두 지운다. |
a.rstrip() | 문자열 a의 오른쪽 공백을 모두 지운다. |
a.strip() | 문자열 a의 양쪽 공백을 모두 지운다. |
a.replace(s, r) | 문자열 a의 s라는 문자열을 r이라는 문자열로 치환한다. |
a.split([s]) | 문자열 a를 공백으로 나누어 리스트값을 돌려준다. |
a.swapcase() | 문자열 a의 대문자는 소문자로, 소문자는 대문자로 각각 바꾸어 준다. |
리스트는 [ ] 안에 배열처럼 열거한다.
>>> a = [1, 2, 3]
>>> print a
[1, 2, 3]
리스트에는 어떤 자료형이든 담을 수 있다.
리스트 내용은 수정 가능하다.
>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]
>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
문자열의 인덱싱과 슬라이싱 방식을 그대로 쓸 수 있다.
>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2]
>>> c = a[2:]
>>> b
[1, 2]
>>> c
[3, 4, 5]
함수 | 설명 |
---|---|
a.append(x) | 리스트 a의 마지막에 x추가 |
a.sort() | 리스트 a를 정렬 |
a.reverse() | 리스트 a의 순서를 거꾸로 만든다. |
a.index(x) | 리스트 a에서 x를 찾아서 그 위치 반환 |
a.insert(i, x) | 리스트 a에서 i 위치에 x 삽입 |
a.remove(x) | 리스트 a에서 처음 나오는 x 삭제 |
a.pop() | 리스트 a의 맨 마지막 요소 반환하고 마지막 요소 삭제 |
a.pop(i) | i위치의 요소를 반환하고 해당 요소를 삭제 |
a.count(x) | 리스트 a 안에 x가 몇 개 있는지를 반환 |
a.extend(x) | 리스트 a에 리스트 x를 더함(확장) |
리스트와 거의 동일한 형태지만, 내용 수정이 불가능한 자료형.
>>> t1 = ()
>>> t2 = (1,)
>>> t3 = (1,2,3)
>>> t4 = 1,2,3
>>> t5 = ('a', 'b', ('ab', 'cd'))
내용이 하나만 있는 tuple을 정의할 때 반드시 끝에 콤마(,)를 붙여야 한다.
바깥의 괄호( )는 경우에 따라 생략 할 수 있다.
>>> t2 = (3, 4)
>>> t1 + t2
(1, 2, 'a', 'b', 3, 4)
>>> t2 * 3
(3, 4, 3, 4, 3, 4)
>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
>>> t1[3]
'b'
>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:]
(2, 'a', 'b')
사전 자료형은 다음과 같은 형식으로 정의된다.
{Key1:Value1, Key2:Value2, Key3:Value3,,,,}
Key는 상수형 자료형이어야 한다.
Value는 어떤 자료형이어도 된다.
오로지 Key에 의해서만 값을 참조할 수 있다.
>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a[2]
'b'
in 연산자로 딕셔너리에 key가 존재하는지 확인할 수 있다. 결과는 True or Fasle로 반환.
'key' in dic_var
함수 | 설명 |
---|---|
a.keys() | 딕셔너리 a의 Key들을 모아놓은 리스트를 돌려준다. |
a.values() | 딕셔너리 a의 Value들을 모아놓은 리스트를 돌려준다. |
a.items() | 딕셔너리 a의 (Key, Value)쌍의 터플을 모아놓은 리스트를 돌려준다. |
a.clear() | 딕셔너리 a의 모든 Key:Value 쌍들을 삭제한다. |
a.get(x) | 딕셔너리 a의 Key가 x인 것의 Value를 돌려준다. |
a.has_key(x) | 딕셔너리 a에 x라는 Key가 있는지 조사하여 참, 거짓을 돌려준다. (v2.7) |
int([x[, radix]])
여기서 x는 문자열(string), int, float 등의 아무 타입.
값 | 결과 |
---|---|
True | 참 |
False | 거짓 |
"python" | 참 |
"" | 거짓 |
[1, 2, 3] | 참 |
[] | 거짓 |
() | 거짓 |
{} | 거짓 |
1 | 참 |
0 | 거짓 |
None | 거짓 |
정리: 1과 True와 비어있지 않는 자료형에 대해서 참(True)으로 판정된다.
산술연산: + - * / **
몫: //
나머지: %
몫과 나머지를 동시에 구하려면
>>> divmod( 5, 3 ) # (1, 2)
=
+= -= /= *= //= %= **=
C언어처럼 += 이나 -= 같은 대입 연산자와 결합된 산술연산을 제공한다. 단, ++ 이나 -- 같은 증감연산은 제공하지 않으니 주의!!
& | ^ ~ << >>
> < >= <= == !=
is
not, and, or
and와 or가 포함된 논리식은 식의 결과 값을 판정하는데 최종적으로 기여한 객체의 값을 식의 값으로 리턴
in
not in
list1 = [0, 1, 2, 3, 4, 5]
print( 3 in list1) # True
print( 7 not in list1) # True
문자열과 리스트, 튜플, 딕셔너리 등의 컬렉션에 쓸 수 있다.
del(변수이름)
>>> a = 3
>>> b = 3
>>> del(a)
>>> del(b)
tuple로 대입
>>> a,b = 'aaa', 'bbb'
>>> a
'aaa'
>>> b
'bbb'
list로 대입
>>> [a,b] = [10,20]
>>> a
10
>>> b
20
여러 변수에 같은 값을 대입
>>> a = b = 100
>>> a
100
>>> b
100
변수에 리스트를 대입하는 것은 참조 형태로 대입된다.
>>> a = [1,2,3]
>>> b = a
>>> a += [4]
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 4]
>>> b = a[:]
</syntaxhighlight>
<syntaxhighlight lang="python">
>>> from copy import copy
>>> b = copy(a)
if 조건문:
...
...
else:
...
...
이때 주의할 것은, 들여쓰기가 반드시 필요하고 들여쓰는 방식 또한 일치해야 한다.
수행할 문장이 하나일 경우는 다음과 같은 형식으로 쓸 수 있다.
if 조건문: ...
else: ...
if 조건문:
...
...
elif 조건문:
...
...
elif 조건문:
...
...
...
else:
...
...
C에서의 삼항연산자(a ? b : c)와 비슷한 기능을 하나, 문법에 주의.
expression_if_true if condition else expression_if_false
if와 else가 반드시 같이 나와야 하고, 조건식이 가운데에 온다는 점이 특징.
조건이 참일 동안 반복 실행.
while 조건문:
...
...
C에서 처럼, while이나 for 같은 반복문 안에서 continue, break 키워드를 쓸 수 있다.
list, tuple, string의 요소를 반복
for 변수 in list(or tuple, string):
...
...
dictionary의 요소를 반복
for key, value in dictionary:
...
...
tuple로 구성된 리스트를 반복
li = [(e1, e2, ...), ...]
for el1, el2, ... in li:
...
...
list안의 list
li = [[e1, e2, ...], ...]
for el1, el2, ... in li:
...
...
tuple이나 list 결국 본질은 list.
숫자 범위를 반복
for i in range(start, end[, step]):
i가 end값 이상이 될때까지 반복. 즉, i가 end 이상이 되는 순간에 루프 종료.
아무것도 하지 않고 다음 문장으로 넘긴다.
pass
해당 object에 어느 속성이 존재하는지 확인
if hasattr(obj, 'attr'):
doStuff(obj.attr)
else:
otherStuff()
모듈은 python 코드로 작성된 .py 파일이다.
# 기본형: 사용할 때는 모듈이름을 네임스페이스로 표기해 줘야 한다.
import 모듈이름
# 모듈이름을 네임스페이스로 쓰지 않고, 함수나 변수명으로 바로 참조.
from 모듈이름 import 함수_or_변수
# 위와 동일하나, 모듈내의 모든 함수와 변수들에 적용됨. 왠만하면 자제를...
from 모듈이름 import *
# 모듈을 별칭(alias)으로 참조
# import하는 대상을 as 이후에 나오는 별칭으로 참조한다.
import 모듈이름 as 별칭
from 모듈이름 import 함수_or_변수 as 별칭
import시, 기본적으로 현재 경로나 미리 등록된 경로에서만 모듈을 찾는다.
다른 경로에 있는 모듈을 import하려면, 사전에 경로를 등록해 두자.
import sys
sys.path.append(모듈_경로)