In [1]:
from IPython.display import Image
Module은 확장자가 py인 파일 하나를 의미합니다.
Package는 Module이 있는 디렉토리를 의미합니다. 이 때 디렉토리에는 Package initailization file이 필요합니다. 아무런 내용이 없는 __init__.py
을 만들어 이 디렉토리가 Python에서 사용하는 Package임을 나타낼 수 있습니다.
In [62]:
!ls source/package/
In [14]:
!dir -r source\package\
In [61]:
!tree source/package/
위 트리 구조를 보면 디렉토리 안에 __init__.py
가 있음을 알 수 있습니다.
from dir1 import mod1
from mod1 import function
from mod1 import Class
from mod1 import *
import dir1.dir2.mod1
위와 같은 형식으로 Package와 Module 그리고 Module 안의 객체를 문서 안으로 가져와서 사용할 수 있습니다. 다만 import *
에서 별표(*
)는 되도록 사용하지 않고 필요한 객체를 정확히 써주는게 좋습니다.
In [15]:
from source.package.package1 import module1
In [16]:
dir(module1)
Out[16]:
In [17]:
module1.author()
Out[17]:
In [18]:
module1.__author__ = 'abcd'
In [19]:
module1.author()
Out[19]:
In [3]:
Image(filename='images/scope.png')
Out[3]:
builtins
In [20]:
import builtins
In [21]:
dir(builtins)
Out[21]:
In [22]:
len("abcd")
Out[22]:
In [23]:
sum([1, 2]) / len([1, 2])
Out[23]:
In [24]:
builtins
Out[24]:
In [25]:
builtins.dir('a')
Out[25]:
위와 같이 Built in function 객체를 볼 수 있습니다. 다만 built in function에는 무엇이 있는지 보기위해 builtins라는 모듈을 가져와서(import) 그 모듈안에 있는 함수가 무엇이 있는지 dir이라는 built in function으로 살펴본 것입니다.
In [3]:
NUM1 = 100 # Global Variable
def foo(NUM2):
print("NUM1 + NUM2 = %d" % (NUM1 + NUM2))
foo(1)
위의 예제처럼 파일(모듈) 안에 있다면 어디서든 쓸 수 있는 변수를 Global Variable 혹은 전역 변수라고 합니다.
In [26]:
NUM1 = 100 # Global Variable
def foo(NUM2):
NUM1 = NUM2 # Local Variable
print("Local NUM1 = %d" % NUM1) # Local Variable
foo(1)
print("Global NUM1 = {0}".format(NUM1)) # {0} 는 format 함수의 첫번째 argument
위에서 보듯 Local은 Function 안에서만 사용할 수 있는 객체입니다. 따라서 위 예제와 같이 Global이나 Local에서 똑같은 이름의 객체라 할지라도 Scope가 다르기 때문에 다른 값을 가지고 있는 것입니다. 즉 function 안의 NUM1과 function 밖의 NUM1은 엄연히 다른 것입니다.
Function안에서 Global Variable인 NUM1 값을 바꾸는 방법은 없을까요!?
In [41]:
NUM1 = 100 # Global Variable
def foo(NUM2):
global NUM1
NUM1 = NUM2
print("Global NUM1 = %d" % NUM1) # Global Variable
foo(1)
print("Global NUM1 = {0}".format(NUM1)) # Global Variable
In [56]:
X = 99
def f1():
X = 88
def f2():
print(X)
f2()
f1()
In [20]:
Image(filename='images/class.png')
Out[20]:
함수 VS. 메소드
위 둘은 같은 기능을 합니다. 똑같다고 보면 됩니다. 하지만 관점에 따라 다르게 부르는 차이가 있을 뿐입니다. 클래스 안에서 만들었다면 Method, 클래스 밖에서 즉, 클래스 안이 아닌 문서 내 어디에서나 만든 것을 함수라고 부릅니다.
In [23]:
Image(filename='images/class_comparison1.png')
Out[23]:
In [24]:
Image(filename='images/class_comparison2.png')
Out[24]:
In [22]:
Image(filename='images/class_state_methods.png')
Out[22]:
In [21]:
Image(filename='images/class_bicycle.png')
Out[21]:
In [25]:
Image(filename='images/class_examples.png')
Out[25]:
Python의 모든 것이 객체이다
문자일뿐인데
In [27]:
"a"
Out[27]:
숫자일뿐인데
In [28]:
1
Out[28]:
문자와 숫자도 객체이므로 객체의 특징이 있습니다. Python이 문자와 숫자에 미리 사용할 수 있는 함수와 변수를 만들어 놨기 때문입니다.
In [29]:
dir("a")
Out[29]:
In [30]:
dir(1)
Out[30]:
문자와 숫자가 진짜 객체인지 확인해봅시다.
In [15]:
type("a")
Out[15]:
In [9]:
type(1)
Out[9]:
In [10]:
isinstance("a", str)
Out[10]:
In [11]:
isinstance(1, int)
Out[11]:
In [12]:
isinstance(1, str)
Out[12]:
In [31]:
help(str)
In [16]:
help(object)
In [17]:
isinstance("a", object)
Out[17]:
class Bicycle(상속받을 부모 클래스):
COLOR = "BLACK"
def pedaling(self):
# Statements
In [30]:
class Bicycle():
COLOR = "BLACK"
def pedaling(self, speed):
print("%d 속도로 달립니다!" % speed)
In [32]:
my_bicycle = Bicycle()
my_bicycle.COLOR
Out[32]:
In [33]:
my_bicycle.pedaling(40)
In [25]:
Bicycle.pedaling('a', 30)
In [39]:
my_bicycle = Bicycle()
a = Bicycle()
b = Bicycle()
c = Bicycle()
d = Bicycle()
print(my_bicycle.COLOR)
print(d.COLOR)
In [40]:
d.COLOR = "RED"
d.COLOR
Out[40]:
In [42]:
d.pedaling(30)