함수¶
ex1¶
def add_start_to_end(start, end):
return sum([_ for _ in range(start, end+1)])
print(add_start_to_end(2, 8))
ex2¶
def get_abbr(arr):
return [ _[:3] for _ in arr]
print(get_abbr(['Seoul', 'Daegu', 'Kwangju', 'Jeju']))
ex3¶
def square(x):
return x**2
f = lambda x: x**2
print(square(2))
print(f(2))
ex4¶
오류 원인 : 함수가 선언된 후 사용해야 함
파이썬은 인터프리터 언어
한 줄 한 줄 차례대로 실행
C언어에서는 위에 프로토타입 선언해주면 에러 안 남
hello()
def hello():
print("Hi")
def hello():
print("Hi")
hello()
ex5¶
def message():
print("A")
print("B")
message()
print("C")
message()
# ABCAB
클래스¶
class Person:
def __init__(self, name):
self.__name = name
print(self.__name + " is initialized")
def work(self, company):
print(self.__name + " is working in " + company)
def sleep(self):
print(self.__name + " is sleeping")
obj = Person("PARK")
obj.work("ABCDEF")
obj.sleep()
print("current person object is ", obj.__name)
dir(obj)
진정한 의미의 private이 아니라 mangling해주는 것
-> Person__name
으로 저장되어 있음
singleton object
: 프로그램이 딱 하나만 실행되는 것
메모장을 띄운 뒤 또 메모장을 띄울 수 있다.
class memopad
를 클릭하니까 메모패드가 두 개 생긴 것
동영상 플레이어는 프로그램이 하나밖에 안 뜬다.
여러 번 클릭해도 객체가 하나만 생긴다.
이런 걸 singleton object라고 하고 그 때 쓰는 것이 private method
외부함수와 클래스 method name이 같은 경우 self.method_name 이렇게 호출
self를 붙이지 않으면 동일한 이름의 외부 함수가 호출된다.
예외처리¶
def calc(list_data):
sum = 0
try:
sum = list_data[0] + list_data[1] + list_data[2]
if sum < 0:
raise Exception("Sum is minus")
except IndexError as err:
print(str(err))
except Exception as err:
print(str(err))
finally:
print(sum)
회사에서 유선랜으로 할 때와 노트북으로 무선랜으로 할 때 환경을 다르게 해줘야 하는데 (예외처리)
그렇지 않으면 데모 데이의 저주. (데모할 때 꼭 안 된다.)
exception은 에러가 아니다.
상황에 따라서 에러가 될 수도, 아닐 수도 있는 경우!
어떤 상황에서 exception을 반드시 해 줘야 할까?
어떤 기준에 의해서?
내 의지와 상관없이 예상하지 못한 상황에 처했을 때 대처
- 네트워크 환경 (코드뽑힙, 와이파이 끊김, ...)
- Input - 사용자가 이상한 값을 입력했을 때
- Output - 저장공간이 꽉 찼다든지 하는 이유로 출력(저장)이 안 될 때
즉, IO 작업할 때 (2, 3)
이런 경우에는 반드시 IO처리 해 줘야 한다.
input받을 때 모든 데이터를 string으로 받은 뒤에 파싱하는 것이 깔끔하게 exception하는 것
문자로 모든 것을 받고 내부적으로 처리
C언어에서는 exception 처리해주는 것이 없음 -> 에러 처리
calc([1, 2])
calc([1, 2, -100])
with 구문¶
file이 열려 있으면 프로그램이 죽지 않는다.
with 구문을 사용하면 명시적으로 리소스 close()를 해주지 않아도 자동으로 close() 해준다.
with 블록을 벗어나는 순간 파일이나 세션 등의 리소스를 자동으로 close시킨다.
with open("./file_test", "w") as f:
f.write("Hello, Python !!!")
예제¶
ex1¶
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def setx(self, x):
self.x = x
def sety(self, y):
self.y = y
def get(self):
return (x, y)
def move(dx, dy):
self.x += dx
self.y += dy
ex2¶
class MyTest:
def hello():
print("MyTest hello method")
obj = MyTest()
dir(obj)
hello()
obj = MyTest()
obj.hello()
첫 번째 argument로 self를 지정하지 않았음!
self 말고 다른 걸 써도 될까?
class Foo:
def __init__(this, x, y):
this.x = x
this.y = y
print(x, y)
def get(this):
return this.x, this.y
f1 = Foo(1, 2)
f1.get()
다른 걸 써도 인스턴트를 그 이름으로 받아서 사용한다는 것만 기억하고 있으면 사용하는 데에는 큰 문제가 없지만, 관례적으로 self를 사용하는 듯하다.
ex3¶
class MyCalc:
def __init__(self):
self.flag = False
while not self.flag:
try:
x, y = input("입력 : ").split()
x, y = int(x), int(y)
self.flag = True
print(self.summation(x, y))
print(self.subtract(x, y))
print(self.multiply(x, y))
print(self.divide(x, y))
except ValueError as err:
self.flag = False
print(str(err))
def summation(self, x, y):
return x+y
def subtract(self, x, y):
return x-y
def multiply(self, x, y):
return x*y
def divide(self, x, y):
if y == 0:
raise Exception('Divide By Zero')
else:
return x/y
mycalc = MyCalc()
ex4¶
class MyFile:
def __init__(self):
return
def save_file(self, inputstr):
with open("./text_file.txt", 'w') as f:
f.write(inputstr)
def read_file(self):
try:
with open("./text_file.txt", 'r') as f:
for line in f:
print(line)
except FileNotFoundError as err:
raise Exception('File Not Found Error')
except OSError as err:
raise Exception('OS Error')
myfile = MyFile()
myfile.save_file("eunha\neunha2")
myfile.read_file()
dir(Exception)
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
'교육 및 강연 > 인공지능 기초' 카테고리의 다른 글
4일차 190929 - 수치미분 (0) | 2019.09.30 |
---|---|
3일차 190928 - numpy, matplotlib (0) | 2019.09.30 |