Python ํท๊ฐ๋ฆฌ๋ ๋ฌธ๋ฒ
- Python์์ ๋ณ์
_
๋ ์ต๊ทผ ์ถ๋ ฅ๋ ๊ฐ์ ์ ์ฅํ๊ณ ์์ - string์์
\
์ ๋ฌธ์๋ก ํํ์\\
๊ณผ ๊ฐ์ด\
๋ฅผ ๋๋ฒ ์ฌ์ฉํ์ฌ escape์ฒ๋ฆฌ - ์ฌ๋ฌ์ค์ string์ ์์ฑํ๋ ค๋ฉด """ ~ """ ํน์ ''' ~ ''' ์ผ๋ก ์์ฑ
- pass : ์๋ฌด ๋์๋ ์ํํ์ง ์์
- unicode string ์ฌ์ฉ์
u'~~'
๋ฌธ์์ด ๋ด๋ถ์ ์ ๋์ฝ๋ ๋ฌธ์ ์ฌ์ฉ์\nXXXX
- utf-8๋ก ์ธ์ฝ๋ฉ์
u'~~'.encode('utf-8')
- ์ค์ ์ธ์ฝ๋ฉ์ ๋ช ํํ๊ฒ ํ์ํ๊ธฐ
- utf-8๋ก ์ธ์ฝ๋ฉ์
๋ฌธ๋ฒ ์๋ฌ์ ์์ธ
Python์์ ์๋ฌ๋ ํฌ๊ฒ SyntaxErrors(๋ฌธ๋ฒ ์๋ฌ)์ Exceptions(์์ธ)๋ก ๊ตฌ๋ถํ ์ ์๋ค. Exception์ ๊ฒฝ์ฐ์๋ ์์ธ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ์ํํ ๋ฌธ์ฅ๋ค์
except [Error]: ...
๋ธ๋ฝ์ ์์ฑํด์ค๋ค. - ์๋ฌ๋ฅผ ์ง์ ๋ฐ์์ํฌ ๊ฒฝ์ฐ raise [ValueError]
try:
task ...
except [Error]:
task ...
ํจ์ ์ธ์์ ๊ธฐ๋ณธ๊ฐ ์ค์
ํจ์์ ๋งค๊ฐ๋ณ์๋ ํจ์๊ฐ import ๋ ๋ ์ด๊ธฐํ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํ ๋งค๊ฐ๋ณ์๊ฐ list, dictionary, class์ instance ์ธ ๊ฒฝ์ฐ ์ฐจ์ด์ ์ด ๋ฐ์ํ๋ค.
- f1 ํจ์์ฒ๋ผ ๋ง๋ค ๊ฒฝ์ฐ, List๊ฐ ์ฌํ ๋น ๋์ง ์๊ธฐ ๋๋ฌธ์ ์ฒ์์ ์ ์๋ L์ ๊ณ์ ์ฌ์ฉํด ๋ฆฌ์คํธ์ ์์๊ฐ์ด ๋์ ๋๋ค.
- f2 ํจ์์ฒ๋ผ ๋งค ํธ์ถ์์ ์ฌํ ๋น์ ํด์ฃผ์ด์ผ ์ด๊ธฐ๊ฐ์ ์ ์งํ ์ ์๋ค.
>>> def f1(a, L=[]):
... L.append(a)
... return L
...
>>> print f1(1), f1(2), f1(3)
[1] [1, 2] [1, 2, 3]
>>> def f2(a, L=None):
... if L is None:
... L = []
... L.append(a)
... return L
...
>>> print f2(1), f2(2), f2(3)
[1] [2] [3]
์ปค๋งจ๋๋ผ์ธ์์ ํจ์๋ฅผ defineํ๋ ๊ฒฝ์ฐ, def ๋๋ ํ, ๋งค๊ฐ๋ณ์ ์ด๊ธฐํ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
- ๋งค๊ฐ๋ณ์๋ก class instance ๋ฅผ ์์ฑํ๊ธฐ ๋๋ฌธ์, class A์ ์์ฑ์ ๋ถ๋ถ์ ์ฝ๋๊ฐ ์คํ๋๋ค.
>>> class A():
... def __init__(self):
... print("A class init")
...
>>> def f(a=A()):
... print "f function call"
...
A class init
>>> f()
f function call
ํจ์๊ฐ import ๋ ๋ ์ด๊ธฐํ๋๋ ๊ฒ์ ํ์ธํด๋ณด๊ธฐ
- class A, function f๋ฅผ function_init.py ์์ฑํ์ ๊ฒฝ์ฐ
- module์ importํ๋ฉด์ ํจ์๋ ๊ฐ์ด import ๋์ด ์ด๊ธฐ๊ฐ์ค์ ์ด ๋๋ค.
# function_init.py
class A():
def __init__(self):
print"A Class init"
def f(a=A()):
print "f function call"
>>> import function_init
A Class init
ํจ์์์์ ํจ์ import
- ์ค๋ณต import์ ๋ฌธ์ ์๊ธฐ๋์ง?
- python์ module์ ์ค๋ณต์ผ๋ก import ํ๋๋ผ๋ ์ค๋ณตํด์ ๋ก๋ํ์ง๋ ์๋๋ค.
๊ฐ๋ณ์ธ์
- Python์์๋ ์ค๋ฒ๋ก๋ฉ์ด ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์์ ์ ๋ ฅ๊ฐ์ ๋ฐ์ ์ ์๋๋ก ๊ฐ๋ณ์ธ์๋ฅผ ์ฌ์ฉํ๋ค.
- ๋งค๊ฐ๋ณ์
*args
: tuple ์๋ฃํ ํํ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ**kwargs
: ํค์๋ ๋งค๊ฐ๋ณ์, dictionary ์๋ฃํ ํํ๋ก ๋งค๊ฐ๋ณ์๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ *args
์ List๋ฅผ ์ ๋ฌํ ๊ฒฝ์ฐ์๋ tuple ๋ด๋ถ์ list๊ฐ ์ ์ฅ๋๋ค.- ๋ ๋งค๊ฐ๋ณ์๋ฅผ ํ๋ฒ์ ์ฌ์ฉํ ๊ฒฝ์ฐ
*args
,**kwargs
์์๋ก ๋ฐ์์ผํ๋ค. **kwargs
,*args
์์๋ก ์ ์ํ ๊ฒฝ์ฐ, (SyntaxError)๋ฌธ๋ฒ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
# ๊ฐ๋ณ์ธ์ ์์ - arbitrary_argument.py
def func(var, *args, **kwargs):
print "var type:", type(var), var
print "args type:", type(args), args
for arg in args:
print "- arg:", type(arg), arg
keys = sorted(kwargs.keys())
print "kwargs type:", type(kwargs)
for kw in keys:
print "- key:value =", kw, ":", kwargs[kw]
from arbitrary_argument import func
>>> func(0, [1,2,3]) # args tuple ๋ด๋ถ์ [1,2,3] list๊ฐ ์ ์ฅ๋๋ค.
var type: <type 'int'> 0
args type: <type 'tuple'> ([1, 2, 3],)
- arg: <type 'list'> [1, 2, 3]
>>> func(0, 1, "arg2", [1,2,3], key1='value1')
var type: <type 'int'> 0
args type: <type 'tuple'> (1, 'arg2', [1, 2, 3])
- arg: <type 'int'> 1
- arg: <type 'str'> arg2
- arg: <type 'list'> [1, 2, 3]
kwargs type: <type 'dict'>
- key:value = key1 : value1
ํจ์ ํฌ์ธํฐ
C์์์ ํจ์ ํฌ์ธํฐ ์์
executer
ํจ์๋ฅผ ํธ์ถํ ๋ ๋งค๊ฐ๋ณ์๋ก add ํจ์์ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๋ฅผ ์ ๋ฌํ๋ค. executer
ํจ์๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
add
: intํ a, b๋ฅผ ์ธ์๋ก ๋ฐ์์ intํ์ผ๋ก ๋ฐํํ๋ ํจ์executer
: ๋งค๊ฐ๋ณ์๋ก ํจ์ํฌ์ธํฐ๋ฅผ ์ ๋ ฅ๋ฐ์ ์ถ๋ ฅํ๋ ํจ์
#include <stdio.h>
int add(int a, int b) // intํ a, b๋ฅผ ์ธ์๋ก ๋ฐ์์ intํ์ผ๋ก ๋ฐํํ๋ ํจ์
{
return a + b;
}
void executer(int (*fp)(int, int)) // ๋งค๊ฐ๋ณ์๋ก ํจ์ํฌ์ธํฐ๋ฅผ ์
๋ ฅ๋ฐ์ ์ถ๋ ฅํ๋ ํจ์
{
printf("%d\n", fp(10, 20)); // ์ธ์๋ก ๋ฐ์ ํจ์๋ฅผ ์ฌ์ฉ
}
int main()
{
executer(add); // executer ํจ์๋ฅผ ํธ์ถํ ๋ ๋งค๊ฐ๋ณ์๋ก add์ ๋ฉ๋ชจ๋ฆฌ์ฃผ์๋ฅผ ์ ๋ฌ
return 0;
}
Python ์์์ ํจ์ ํฌ์ธํฐ ์์
Python์์ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ณ ์ถ์ ๋๋ ํจ์ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ณ์ add
๋ฅผ ํจ์ executer
์ ์ธ์๋ก ๋๊ฒจ์ค๋ค.
executer
๋ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๋ณ์๊ฐ ๊ฐ๊ณ ์๋ ํจ์ํฌ์ธํฐ๋ฅผ ์ด์ฉํด ํจ์๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
>>> def add(a, b):
... return a + b
...
>>> def executer(func, a, b):
... print "add function", func(a, b)
...
>>> executer(add, 10, 20)
add function 30
์์ฑ๊ฐ ํจ์ getattr, setattr
getattr(object, name)
- object์ ์กด์ฌํ๋ ์์ฑ๊ฐ์ ๋ฐํํ๋ค.
- name์ ํด๋นํ๋ ์์ฑ์ด ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ AttributeError๊ฐ ๋ฐ์ํ๋ค (์์ธ์ฒ๋ฆฌ ๊ฐ๋ฅ)
setattr(object, name, value)
- object์ ์กด์ฌํ๋ ์์ฑ๊ฐ์ ๋ฐ๊พธ๊ฑฐ๋, ์๋ก์ด ์์ฑ์ ์์ฑํ์ฌ ๊ฐ์ ๋์ ํ๋ค.
# class ์ ๋ํ ์ฌ์ฉ
>>> class C:
... class_var = 0
... def __init__(self, instance_var): #์์ฑ์ ๋ถ๋ถ
... self.instance_var = instance_var
...
>>> c1 = C(1) # instance_var=1 ์ ๊ฐ๋ instance c1๋ฅผ ๋ง๋ ๋ค.
>>> getattr(c1, 'instance_var') # c1.x ์ ๊ฐ์ ์ญํ ์ ํ๋ค.
1
>>> getattr(c1, 'class_var') # class ์์ฑ์ด๋ฏ๋ก instance์์ ์ ๊ทผ๊ฐ๋ฅํ๋ค.
0
# instance c1์ ์์ฑ ์ถ๊ฐ
>>> setattr(c1, 'instance_var2', 11) # instance c1์ instance_var2 ์์ฑ์ ๋ง๋ค์ด 11์ ๋์
ํ๋ค.
>>> getattr(c1, 'instance_var2') # instance c1์ instance_var2 ์์ฑ์ด ์๊ธด๋ค.
11
>>> getattr(C, 'instance_var2') # class C์๋ instance ์์ฑ์ด ์ถ๊ฐ๋์ง ์๋๋ค.
AttributeError : class C has no attribute 'instance_var2'
# class C์ ์์ฑ ์ถ๊ฐ
>>> setattr(C, 'class_var2', 2) # class C์ class_var2๋ผ๋ ์์ฑ์ ๋ง๋ค์ด 2๋ฅผ ๋์
ํ๋ค.
>>> print getattr(C, 'class_var2'), getattr(c1, 'class_var2')
2 2 # class ์์ฑ์ ์ถ๊ฐํ์ผ๋ฏ๋ก c1์์๋ ์ ๊ทผ ๊ฐ๋ฅํ ์์ฑ์ด๋ค.
# instance c2 ์์ฑ
>>> c2 = C(2) # instance_var=1์ ๊ฐ๋ instance c2๋ฅผ ๋ง๋ ๋ค.
>>> print getattr(c2, 'class_var2') # class ์์ฑ์ด๋ฏ๋ก instance c2์์๋ ์ ๊ทผ๊ฐ๋ฅํ๋ค.
3 3
# module์ ๋ํ ์ฌ์ฉ
>>> import simpleClass
>>> getattr(simpleClass, 'C') # module์ ์กด์ฌํ๋ class C์ ์ฃผ์๋ฅผ ๋ฐํํ๋ค.
<class simpleClass.C at 0x7f08ce775600>
>>> getattr(simpleClass.C, 'class_attr') # class C์ class_attr์ ๊ฐ์ ๋ฐํํ๋ค.
[]
>>> setattr(simpleClass, 'D', 0) # module์ ๋ณ์ D๋ฅผ ๋ง๋ค์ด 0๋ฅผ ๋์
ํ๋ค.
>>> getattr(simpleClass, 'D')
0
- ์ ๊ณต๊ณผ ๊ด๋ จ๋ ํฌ์คํ ์ Markdown ์ ํ์ฉํด๋ณด๋ ค๊ณ , ์ด๋ฒ ํฌ์คํ ๋ถํฐ ์์!
- ํฐ์คํ ๋ฆฌ์์ Markdown ์ฌ์ฉํ๋ ๋ฒ
'๐ Algorithm > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] class, instance ์์ฑ, class ์์๊ณผ ์์ฑ์ (0) | 2020.12.07 |
---|---|
[Python] ๋ฐ์ดํฐ ํ์ - List, Dictionary, JSON (0) | 2020.12.07 |
[Python] Lambda ํ์ฉ - map, filter, reduce ํจ์ (0) | 2020.12.07 |