10. 함수 와 메소드 구별
파이썬은 메소드는 일반 함수와 차이점은 첫번째 인자가 context를 받
아야 한다. 함수를 정의 후 클래스의 정의에 메소드로 할당해서 사용가
능함
self : 인스턴스 메소드
cls: 클래스 메소드
class Foo() :
def __init__(self,name=None) :
self.name = name
bar = external_bar
def external_bar(self,lastname):
self.lastname = lastname
return self.name+ " " + self.lastname
내부 인스턴스 메소드로 사용
할 함수를 외부에 정의
함수로 인식
클래스에서 외부함수를 메소
드로 정의
인스턴스 메소드로 인식
13. 함수 구조
함수가 정의되면 바로 함수를 객체로 구조화
함수
코드
함수
인자
함수
명
참조
def add(x,y) :
return x+y
add def add(x,y) :
return x+y
{‘x’ : None, ‘y’:None}내부주소
전환
14. 함수 내부 구조 조회
함수는 객체이므로 함수의 내부 구조를 속성으로 구
성한 function type과 code type 이 존재
function type 내부 속성
code type func_code
.
func_code 일 경우 : code type
함수명
.함수명
내부 속성
.
15. function type
함수 내부의 정보 조회
Attribute Description
__doc__ doc에 대한 정보 조회
__name__ 정의된 함수의 이름
__code__ byte code 형태 code로 세분화
__defaults__ arguments 내의 default 조회
__globals__ 정의된 함수의 글로벌 영역
__closure__ closure context 내의 자유변수
17. Code type
실제 code에 대한 조회
Attribute Description
co_argcount number of arguments (not including * or ** args)
co_code string of raw compiled bytecode
co_consts tuple of constants used in the bytecod
co_filename name of file in which this code object was created
co_firstlineno number of first line in Python source code
co_flags bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg
co_lnotab encoded mapping of line numbers to bytecode indices
co_name name with which this code object was defined
co_names tuple of names of local variables
co_nlocals number of local variables
co_stacksize virtual machine stack space required
co_varnames tuple of names of arguments and local variables
18. Code type : 예시
__code__가 code type을 생성하므로 그 내부의 정
보를 조회
19. inspect 모듈 : 함수 구조 조회
Inspect 모듈을 이용한 함수 구조 조회
function Description
inspect.getdoc(object) object 내부의 doc을 출력
inspect.getsourcefile(object) object에 대한 소스파일(모듈이름0을 출력
inspect.getmodule(object) object에 대한 모듈 이름을 출력
inspect.getsource(object) object 내부의 소스를 출력
inspect.getsourcelines(object) object 내부의 소스를 라인별로 분리해서 출력
inspect.getargspec(func) 함수의 argument에 대한 정보 출력
inspect.getcallargs(func[, *args][, **kwds]) 함수 실행을 정의할 경우 실제 argument 연결 정보를 출력
20. inspect 모듈 : 조회 예시
Inspect 모듈을 이용해서 함수에 대한 정보 조회
23. 함수 구조
함수가 정의되면 바로 함수를 객체로 구조화하고 파
라미터를 함수 로컬변수로 처리
함수
코드
함수
변수
함수
명
참조
def add(x,y) :
return x+y
add def add(x,y) :
return
x+y
{‘x’ : None,
‘y’:None}
내부
주소
전환
23
24. 함수 내부 구조 : 조회 방법
함수는 객체이므로 함수의 내부 구조를 속성으로 구
성한 function type과 code type 이 존재
function type 내부 속성
code type func_code
.
func_code 일 경우 : code type
함수명
.함수명
내부 속성
.
24
26. Function class 속성
3버전으로 바뀌면서 function 정보의 변수들이
사라지고 스페셜 기준으로 통합됨
Python 2 Python 3
a_function.func_name/__name__ a_function.__name__
a_function.func_doc/__doc__ a_function.__doc__
a_function.func_defaults/__defauts__ a_function.__defaults__
a_function.func_dict/__dict__ a_function.__dict__
a_function.func_closure/__closure__ a_function.__closure__
a_function.func_globals/__globals__ a_function.__globals__
a_function.func_code/__code__ a_function.__code__
26
27. 함수 내부 구조
함수는 special 속성(code, closure, globals 등)
을 가지고 있음
27
28. inspect 모듈 : 함수 구조 조회
Inspect 모듈을 이용한 함수 구조 조회
function Description
inspect.getdoc(object) object 내부의 doc을 출력
inspect.getsourcefile(object) object에 대한 소스파일(모듈이름0을 출력
inspect.getmodule(object) object에 대한 모듈 이름을 출력
inspect.getsource(object) object 내부의 소스를 출력
inspect.getsourcelines(object) object 내부의 소스를 라인별로 분리해서 출력
inspect.getargspec(func) 함수의 argument에 대한 정보 출력
inspect.getcallargs(func[, *args][, **kwds]) 함수 실행을 정의할 경우 실제 argument 연결 정보를 출력
inspect.signature(함수명) 함수에 대한 시그너처 정보를 출력
inspect.getframeinfo(frame) 함수가 실행시 frame에 대한 정보 확인
28
29. inspect 모듈 : argument 조회
Inspect 모듈을 이용해서 함수에 대한 argument
명세에 조회
29
33. Code 클래스
실제 code에 대한 조회
Attribute Description
co_argcount number of arguments (not including * or ** args)
Co_cellvars ?
co_code string of raw compiled bytecode
co_consts tuple of constants used in the bytecod
co_filename name of file in which this code object was created
co_firstlineno number of first line in Python source code
co_flags bitmap: 1=optimized | 2=newlocals | 4=*arg | 8=**arg
co_freevars 클로저의 자유변수
co_kwonlyargcount ?
co_lnotab encoded mapping of line numbers to bytecode indices
co_name name with which this code object was defined
co_names tuple of names of local variables
co_nlocals number of local variables
co_stacksize virtual machine stack space required
co_varnames tuple of names of arguments and local variables
33
34. Code 클래스 확인
함수를 정의 하면 함수들의 내부 객체가 생성되
며, __code__(code 객체) 내의 속성들로 함수
들의 구조를 확인 할 수 있음
34
37. 함수 실행
함수명은 함수 인스턴스를 저장하고 있어 실행연
산자( ( ) )를 만나면 인자를 받아 실행
함수명(인자)
def 함수명 (함수 파라미터) :
함수 로직
함수결과처리(return/yield)
object
function code
인스턴스
객체 생성
실행
37
38. 함수 – 메모리 생성 규칙
함수 호출 시 마다 Stack에 함수 영역을 구성하
고 실행됨
함수를 재귀호출 할 경우 각 호출된 함수 별로
stack영역을 구성하고 처리
함수정의
함수호출 1
함수호출 2
함수호출 3
함수호출 4
Stack
제일 마지막 호출된 것을 처리가 끝
나면 그 전 호출한 함수를 처리load
38
40. frame class 내부 속성
메모리에 올라갈 때 구성되는 frame class 속성
f_back next outer frame object (this frame’s caller)
f_builtins builtins namespace seen by this frame
f_code code object being executed in this frame
f_globals global namespace seen by this frame
f_lasti index of last attempted instruction in bytecode
f_lineno current line number in Python source code
f_locals local namespace seen by this frame
f_trace tracing function for this frame, or None
40
45. First Class Object 조건
일반적으로 First Class 의 조건을 다음과 같이 정의한다.
변수(variable)에 담을 수 있다
인자(parameter)로 전달할 수 있다
반환값(return value)으로 전달할 수 있다
함수는 function 객체
45
46. First Class Object : 실행
1급 클래스(first class object) 는
런타임(runtime) 생성이 가능
익명(anonymous)으로 생성이 가능
46
47. First Class Object : 변수할당
함수도 객체이므로 변수에 할당이 가능
함수 객체
함수
인자
객체
함수명
(참조주소)
함수 정의
변수
변수에 할당
47
52. 함수 변수 Scoping
함수에 실행하면 함수 내의 변수에 대한 검색을 처리.
검색 순은 Local > global > Built-in 순으로 호출
Global/nonlocal 키워드를 변수에 정의해서 직접 상위 영역을 직접 참조할 수 있다
globalBuilt-in
함수 Scope
함수 Namespace
local
내부함수
local
52
53. 함수-scope 관리 기준
함수내의 인자를 함수 이름공간으로 관리하므로
하나의 dictionary로 관리
함수 인자는 이름공간에 하나의 키/값 체계로 관
리
함수의 인자나 함수내의 로컬변수는 동일한 이름
공간에서 관리
locals() 함수로 함수 내의 이름공간을 확인할
수 있음
#
53
59. 함수 인자 종류
함수 인자 처리하는 방법으로는 4가지가 있음
고정인자
가변인자
위치
키/값
위치
키/값
(x,y,z) 처럼 위치를 고정해서 의미를 확정하는 것
고정인자이지만 키/값으로 구성되므로 위치에 상
관없이 이름으로 인식해서 처리
위치에 대한 인자 수를 고정하지 않고 실제 매핑
되는 것을 모두 처리
가변위치는 아무것도 없거나 인자가 있을 경우 처
리
키/값으로 매핑되는 인자 수를 고정하지 않고 실
제 매핑되는 것을 모두 처리
가변 키/값은 아무것도 없거나 인자가 있을 경우
처리
59
66. Default 파라미터 관리 기준
함수가 정의되면 함수를 객체로 전환할 때
파라미터 중에 default값이 정해지면
__defaults__ (tuple타입)속성에 값을 저장
def 함수명(k= 10)
__defaults__
(10,)
66
67. 함수 인자 -초기값 할당
함수 내의 인자를 별도의 이름공간에 관리하므로 고
정인자일 경우에도 이름에 값을 할당 가능
add 함수 내의 로컬 영역에 인자를 관리
하는 사전이 생기고
{‘x’: 10, ‘y’:None}
# 초기값을 무시하고 입력값을 사용
add 함수 내의 로컬 영역에 인자에 매핑
{‘x’: 1, ‘y’: 20}
# 초기값과 입력값을 사용
add 함수 내의 로컬 영역에 인자에 매핑
{‘x’: 10, ‘y’: 20}
67
69. Default 값에 따른 처리 방식
함수가 실행시 함수 실행을 위한 프레임을 하나를 가지고 실행
반복적으로 함수를 호출 시 인자의 값이 참조 객체일 경우는 지속
적으로 연결
인자에 참조형을 기본 인자로 사용하면 원하지 않는 결과가 생기므
로 None으로 처리한 후 함수 내부에 참조형을 추가 정의해야 함
def f(a, l=[]) :
l.append(a)
return l
f(1)
f(2)
f(3)
함수
정의
함수
실행
{ ‘a’:1, ‘l’ :[1]}
함수 내부이름공간
{ ‘a’:2, ‘l’ :[1,2]}
{ ‘a’:2,
‘l’ :[1,2,3]}
f(1)
실행
f(2)
실행
f(3)
실행
실제 List
객체
참조객체를 함수
인자에 초기값으로
받을 경우 함수 호
출시에 연결된게
남아있는다.
def f(a, l=None) :
l = []
l.append(a)
return l
함수정의
인자에 변경가능한 값을 할당하지 않
음
69
70. Default 값에 따른 처리 예시
함수 인자의 defaults 값은 함수 호출과 상관업
이 항상 값을 유지하고 있고 tuple이므로 동일
한 tuple로 갱신하면 변경됨
70
71. Default를 mutable처리 이슈
함수의 default 값은 함수 정의 영역에서 보관하
므로 함수가 계속 호출되면 default 영역에 추가
되므로 초기값으로는 리스트를 사용시 주의해야
함.
71
101. Global영역 함수 직접 참조: 예시
외부 함수 정의(global 영역)하고 함수를 정의해
서 내부 로직으로 외부함수 호출처리
{“add”: “function “}
{‘x’:None, ‘y’:None}
{‘x’:5, ‘y’:5}
global
local(함수정의)
local(함수실행)
101
102. 함수 인자로 참조
외부 함수(global영역)에 정의된 함수를 함수의
인자로 받아 내부 로직으로 처리
{“add”: function ,
“add_args”: function}
{‘func’:None, ‘x’:None,
‘y’:None}
{‘func’: “add”, ‘x’:5, ‘y’:5}
global
local(함수정의)
local(함수실행)
102
106. 함수 반복 호출
함수도 호출 방법에 따라 다양한 구현 및 처리가 가
능
연속(재귀)호출
특정 시점 호출
부분 호출
함수를 인자값을 바꿔가면 처리가 완료 될
때까지 연속해서 호출하여 처리
함수를 구동시켜 필요한 시점에 호출하여
결과 처리(iteration, generation)
함수를 인자별로 분리하여 호출하면서 연
결해서 결과를 처리
106
107. 함수 재귀호출
함수 정의시 함수가 여러 번 호출될 것을 기준으로
로직을 작성해서 동일한 함수를 연속적으로 처리할
도록 호출
자신의 함수를 계속
호출하면 stack에
새로운 함수 영역이
생겨서 처리한다
107
108. Iteration : 함수 처리
sequence 타입 등을 iter()로 처리하면 iterator
객체가 만들어지고 실행됨
108
109. Iteration : 메소드 처리
sequence 타입 등을 iter()로 처리하면 iterator
객체가 만들어지고 메소드로 실행
109
133. Lambda에서 단축 비교 연산
Lambda 함수 표현식에서 and/or를 이용한 표
현식에 대한 단축비교연산으로 로직 처리
표현식 and 표현식 : 첫번째 표현식 참이면
두번째 표현식이 리턴
표현식 or 표현식 : 첫번째 표현식이 거짓이면
두번째 표현식이 리턴
133
134. Lambda 함수 실행 : 예시
축약 처리는 표현식 조건에 따라 두개를 비교하지
않고 처리
134
146. 함수부분호출 : Curry
함수의 인자를 점진적으로 증가하면서 처리하는 법
으로 외부함수에서 내부함수로 처리를 위임해서 점
진적으로 실행하도록 처리하는 함수
f11(1) 함수 실행하면
g11(2) 함수가 실행되
고 h11 (3,4,5)가 최종
적으로 실행되여 결과
는 (1,2,3,4,5) 출력
146
158. High Order Function 란
고계 함수(higher-order function)란, 함수를 다
루는 함수를 뜻하며,
인자로 전달 : 정수를 함수의 인수로 전달할 수 있
듯이 어떤 함수도 다른 함수의 인수로 전달할 수 있
다.
결과로 전달 : 마찬가지로 함수의 결과 값으로 정수
를 반환할 수 있듯이 함수를 반환도 가능
158
159. 함수 인자/결과 값 처리
고계 함수(higher-order function)란, 함수를 다
루는 함수를 뜻하며,
159
161. map 함수
map(f, iterable)은 함수(f)와 반복가능한 자료형
(iterable)을 입력으로 받아 입력 자료형의 각각의
요소가 함수 f에 의해 수행된 결과를 묶어서 리턴
하는 함수
161
162. map 함수 : 버전 변경사항
map 처리결과도 객체로 변경되어 list로 전환해야
함
Notes Python 2 Python 3
①
map(a_function, 'PapayaWhip') list(map(a_function, 'PapayaWhip'))
②
map(None, 'PapayaWhip') list('PapayaWhip')
③
map(lambda x: x+1, range(42)) [x+1 for x in range(42)]
④
for i in map(a_function, a_sequence): no change
⑤
[i for i in map(a_function, a_sequence)] no change
162
168. filter 함수 : 버전 주요 변경 사항
처리결과가 객체로 변경되어 list로 변경해서 처리
하면 됨
Notes Python 2 Python 3
①
filter(a_function, a_sequence) list(filter(a_function, a_sequence))
②
list(filter(a_function, a_sequence)) no change
③
filter(None, a_sequence) [i for i in a_sequence if i]
④
for i in filter(None, a_sequence): no change
⑤
[i for i in filter(a_function, a_sequence)] no change
168
176. 함수 – Closure 란
외부함수 내의 자유변수를 내부함수에서 사용하면 기존 외부함
수도 내부함수가 종료 시까지 같이 지속된다.
함수 단위의 variable scope 위반이지만 현재 함수형 언어에서는
함수 내의 변수를 공유하여 처리할 수 있도록 구성하여 처리할
수 있도록 구성이 가능하다.
외부함수
내부함수
외부함수
이름공간
내부함수
이름공간
Closure context 구성
내부함수 변수 검색 순
서는 내부함수 이름공
간 -> 외부함수 이름
공간
176
177. 함수 – Closure context
내부 함수를 함수의 결과로 외부에 전달 할 경우
Closure 환경 확인 하는 법
__closure__
func_closure
Closure
context cell_contents
177
178. 함수 – Closure : 자유변수
자유변수란 외부함수의 로컬변수에 있는 변수
외부함수
Context
내부함수
Context
Local Local
Int
Float
string
Immutable 객체자유변수
외부에서 사용
함수
호출
178
179. 함수 – Closure : __closure__
파이썬은 클로저 환경에 대해서도 별도의 객체로
제공하며 이 환경에 대해서도 접근이 가능함
179
195. help함수
함수, 클래스, 메소드 등에 대한 내부 정보를 확인할 때 사용
>>>help(vars)
vars(...)
vars([object]) -> dictionary
Without arguments, equivalent to
locals().
With an argument, equivalent to
object.__dict__.
197. Type 처리 함수
파라미터를 하나 받아 객체를 실행하면 타입전환 처
리함
>>> int
<type 'int'>
>>> float
<type 'float'>
>>> str
<type 'str'>
>>> list
<type 'list'>
>>> dict
<type 'dict'>
>>> tuple
<type 'tuple'>
>>> set
<type 'set'>
>>> complex
<type ‘complex’)
int()
float()
str()
list()
dict()
tuple()
set()
complex()
198. 타입처리 함수
함수 설명
bytearray() 갱신가능한 문자열 처리 타입
bytes() Str가 같은 처리
frozenset() 갱신불가한 set 처리
object() Object 타입을 생성하기
199. Type 함수
파이썬은 실제 리터럴 즉 값이 객체이므로 기본
객체의 구성을 이해해야
>>> type(1.1)
<class ‘float'>
>>>
>>> type(17)
<class 'int'>
값을 type() 함수를 이용해 데이터 타
입을 확인
reference
type
value
float
주소
1.1
reference
type
value
int
주소
17
데이터 관리 방안(예시)
205. zip 함수로 seq를 결합하기
Sequence 내장함수(zip)를 이용해서 내부 원소
들을 묶음 단위 처리
Zip 함수 내의 인자 전달
시 unpack 처리해서 2개
의 인자를 전달
Python 2 Python 3
zip(a, b, c) list(zip(a, b, c))
d.join(zip(a, b, c)) no change
205
206. zip : 3.x 버전 변경이유
Sequence 내장함수(zip)를 이용해서 내부 원소
들을 묶음 단위 처리하며 zip 클래스 생성하지만
한번 사용하면 사라지므로 사용할 때마 호출해야
함
206
207. zip : 3.x 버전 처리 : zip
Sequence 내장함수(zip)를 이용해서 내부 원소
들을 묶음 단위 처리하며 zip 클래스 생성
Python 2 Python 3
zip(a, b, c) list(zip(a, b, c))
207
208. zip : 3.x 버전 list 처리
Zip 함수를 가지고 내부에 다시 zip을 넣고 처리
하면 원래 형태로 변경됨
208
209. zip : 3.x 버전 처리 : join
Sequence 내장함수(zip)를 이용해서 내부 원소
들을 묶음 단위 처리 다시 문자열로 처리시는
join 함수 사용 필요
Python 2 Python 3
d.join(zip(a, b, c)) no change
209
218. Class Member
Class Object는 클래스 메소드, 정적메소드, 클래스 내부 변수 등을 관
리한다.
class Class_Member :
cls_var = 0
@classmethod
def cls_method(cls) :
cls.cls_var = 1
print("call cls_method ", cls.cls_var)
@staticmethod
def sta_method() :
cls_var = 100
print("call sta_method ", cls_var)
def ins_method(self) :
self.ins_var = 1
print('call ins method ', self.ins_var)
c = Class_Member()
c.ins_method()
print(c.__dict__)
클래스 변수
클래스 객체 메소드
클래스 정적 메소드
# 처리결과
('call cls_method ', 1)
('call sta_method ', 100)
#Class_Member 내부 관리 영역
{'sta_method': <staticmethod object at 0x0215A650>, '__module__': '__main__', 'ins_method': <function ins_method
at 0x029D2270>, 'cls_method': <classmethod object at 0x01D92070>, 'cls_var': 1, '__doc__': None}
인스턴스 메소드
219. Super() 함수(2.x)
Super(클래스, 서브클래스 또는 인스턴스)
Class변수를 호출하였지만 mro() 순성 따라 A.bar가
호출되어 처리됨
class A(object) :
bar = 100
def foo(self) :
pass
class B(object) :
bar = 0
class C(A,B) :
xyz = 'abc'
print " super function ", super(C,C())
print C.mro()
print super(C,C()).__self__
print super(C,C()).bar
print super(B,B()).__self__
print super(B,B()).__self__.bar
# 실행 결과
super function <super: <class 'C'>, <C object>>
[<class '__main__.C'>, <class '__main__.A'>, <class
'__main__.B'>, <type 'object'>]
<__main__.C object at 0x0F01BA10>
100 A.bar의 값
<__main__.B object at 0x0F01B6B0>
0 B.bar의 값
220. Super() 함수의 binding(2.x)
Super(클래스, 인스턴스).메소드()은 클래스.메소
드(인스턴스)로 연결되는 구조이므로 파라미터가
빠지면 binding이 되지 않는다.
print super(C) # 실행 결과
<super: <class 'C'>, NULL>
print super(C).foo
Foo는 인스턴스 함수이라서 binding 에러
# 실행 결과
AttributeError: 'super' object has no attribute 'foo'
221. Super() 을 이용한 접근(2.x)
Super(클래스, 인스턴스) 객체에 __get__ 메소드
가 구현되어 있어 재상속 후에 처리시 에러없이
상위 클래스를 접근 가능
class A(object) :
bar = 100
def foo(self) :
pass
class B(object) :
bar = 0
class C(A,B) :
xyz = 'abc‘
class D(C) :
sup = super(C)
print D().sup
print D().sup.foo
print super(C,D()).foo
print D().sup.bar
# 실행 결과
<super: <class 'C'>, <D object>>
<bound method D.foo of <__main__.D object at
0x0F01BF90>>
<bound method D.foo of <__main__.D object at
0x0F01BF90>>
100
D().sup 일때 상위 클래스 C와 하위 인스턴스 D()가 있어
매핑되어 처리 가능
D().sup.foo == Super(C,D()).foo로 바인딩한 것과 같
다
Super(C).__get__(D(), ‘foo’) 처럼 인식
222. Property 함수- 객체 직접 정의(1)
인스턴스 객체의 변수 접근을 메소드로 제약하기 위해서는
Property 객체로 인스턴스 객체의 변수를 Wrapping 해야 함
property(fget=None, fset=None, fdel=None, doc=None)
class P:
def __init__(self,x):
self.x = x
def getx(self) :
return self.x
def setx(self, x) :
self.x = x
def delx(self) :
del self.x
x = property(getx,setx,delx," property test ")
Getter, setter, deleter 메
소드를 정의
인스턴스 객체의 변수명과
동일하게 Property 객체 생
성(내부에 _x 생김)
225. all()/ any()
all(iterable) 함수는 iterable 내부에 연속적인
원소들을 모두 가지고 있을 경우 :True
Any(iterable) 함수는 iterabe 내부에 연속적인
원소가 없어도 true 처리
i=[1,2,3]
all(i) # True
any(i) # True
j=[[],[],[]]
all(j) # False
any(i) # True
226. Iterable 처리 함수 – 시점 호출
sequence 객체 등을 반복해서 사용할 수 있도
록 지원하는 객체처리 방식
>>> l= [1,2,3,4]
>>> iter(l)
<listiterator object at 0x06585090>
>>> li = iter(l)
>>> li.next()
1
>>> li.next()
2
>>> li.next()
3
>>> li.next()
4
>>> li.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
227. Iterable 처리 함수 – range
range(첫번째, 마지막번째, 간격) 함수는 범위에
대해 리스트 객체로 리턴
range(10) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1,10) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
range(1,10,2) #[1, 3, 5, 7, 9]
232. 객체접근 함수
내장함수를 이용하여 객체의 속성에 대한 접근
object.x getattr()
object.x = value setattr()
del(object.x) delattr()
함수 구조
getattr(object, name[, default])
setattr(object, name, value)
delattr(object, name)
hasattr(object, name) # 객체내의 속성(변수나 메소드)
callable(object) # 메소드 및 함수 여부 점검
233. 객체접근 함수: 예시 1
객체의 속성을 접근하고변경
class A():
def __init__(self, name,age) :
self.name = name
self.age = age
a = A('dahl',50)
if hasattr(a,"name") :
print getattr(a,"name")
setattr(a,"name","Moon")
print getattr(a,"name")
else :
pass
if hasattr(a,"age") :
print getattr(a,"age")
else :
pass
#처리결과값
dahl
Moon
50
234. 객체접근 함수: 예시 2
메소드 및 함수여부 확인 후 실행
class A():
def __init__(self, name,age) :
self.name = name
self.age = age
def in_set(self,name,default) :
self.__dict__[name] = default
print self.__dict__[name]
a = A('dahl',50)
def add(x,y) :
return x+y
if callable(add) :
add(5,6)
else :
pass
if callable(a.in_set) :
a.in_set('age',20)
else:
pass
#처리결과값
dahl
Moon
50
20
236. __import__함수
Import한 원 파일에 대한 위치를 확인
>>>__import__('inspect')
<module 'inspect' from 'C:Python27libinspect.pyc'>
237. Vars() 함수
Var(object)를 넣으면 현재 관리되는 속성들을 표시
vars(...)
vars([object]) -> dictionary
Without arguments, equivalent to locals().
With an argument, equivalent to object.__dict__.
def add(x,y) :
print(" vars : ",vars())
print(" locals : ", locals())
return x + y
add(5,5)
vars : {'y': 5, 'x': 5}
locals : {'y': 5, 'x': 5}
238. dir함수
클래스, 모듈 등의 관리하는 내부 정보를 확인할 때 사용
>>>dir(B)
['__doc__', '__init__', '__module__', 'name']
241. eval : Expression 실행
Eval 함수는 컴파일 및 표현식을 평가하고 실행 처리
>>> eval("1+2")
3
>>>
242. exec : Statement 실행
Exec함수는 컴파일하여 문장을 평가하고 실행하기
>>> exec('print "hello world"')
hello world
>>>
243. Run-time function 처리
Exec함수는 컴파일한 문장을 평가하고 실행하기
# 함수를 문자열에 정의
code_str = '''
def add(x=1,y=1) :
""" add x, y """
print(" vars : ",vars())
print(" locals : ", locals())
return x + y
a = add(5,5)
print(a)
''‘
#컴파일 처리
code_obj = compile(code_str, '<string>', 'exec')
print(type(code_obj))
# 실행
exec(code_obj)
#처리 결과
<type 'code'>
vars : {'y': 5, 'x': 5}
locals : {'y': 5, 'x': 5}
10
244. reload/execfile
함수
함수 설명
reload()
reload(...)
reload(module) -> module
Reload the module. The module must have been successfully imported before.
reload(inspect_sor_test) : import inspect_sor_test 한 모듈을 reload
execfile()
execfile(...)
execfile(filename[, globals[, locals]])
execfile(“xxxx.py”) : filenam에 스트링으로 모듈명을 입력하여 실행
246. Input/format/print 함수
>>>format("12345678","8.4s") # '1234’
‘1234’
>>>print(“Hello World “)
Hello World
>>>len([1,2,3,4])
4
>>> #
>"Hello World"
Hello World
Format/print/input 처리
a = input(">")
print(a)
Input으로 값을 받고 출력
247. Repr 함수
개체의 표준적인 캐릭터 라인 표현을 처리
repr(...)
repr(object) -> string
For most object types, eval(repr(object)) == object.
>>> # str 처리시 다른 결과가 발생. 객체를 str로 처리하기
>>> repr('123')
"'123'"
>>> str(123)
'123‘
>>>repr(123)
'123'
>>> str(123)
'123'
253. 파일 관리 함수
Open()/file()은 파일을 오픈
함수 설명
file()
파일 생성
file('test.txt','w') <open file 'test.txt', mode 'w' at 0x107EDC80>
파일 존재시 첨가 모드로
file('test.txt','a') <open file 'test.txt', mode 'a' at 0x107EDE90>
open()
f = open("새파일.txt", 'w')
f.close()