
def_함수 선언 함수 이름 (입력_파라미터):
함수 내용 (기능)
출력 또는
return_함수 종료
print("문장", 함수 이름(입력)_argument)
# argument를 입력하면 argument가 위 입력_파라미터로 들어가게 되어 함수가 진행되고 함수 값이 출력됨.
# 예제 1
def onion():
print("Get two onions")
def spring_onion():
print("Get a spring onion")
#함수 호출하기
onion()
spring_onion()
> 출력
Get two onions
Get a spring onion
None None
함수는 호출해야 작동된다. 아래 예시로 들여쓰기와 작동 순서를 알 수 있다.
def 수확():
print("올해 비가 많이 왔습니다.")
print("농작물 수확량이 현저히 줄었습니다.") # 선 출력
수확() # 후 함수 작동 후 실행
> 출력
농작물 수확량이 현저히 줄었습니다.
올해 비가 많이 왔습니다.
함수의 마지막 부분에서 return 다음에 오는 문장은 실행되지 않고 return에서 진행이 종료된다.
def function(x,y):
z = x+y
return z
# A 등급 10개, B 등급 2개
print('옥수수와 수박의 수확량 :', function(10,2))
> 출력
옥수수와 수박의 수확량 : 12
함수는 입력값이 없어도 출력이 가능하다.
함수는 return이 없어도 출력이 가능하다.
# 예제 1
def found():
print("그들이 고라니 2마리를 잡았습니다.")
def function(x,y):
z = x + y
print(z)
print("사자와 호랑이의 수 : ', function(5,7)) # return이 없어서 None 출력.
print(found()) # 입력이 없어도 return이 없으므로 출력 가능.
# 1. function 함수가 가장 먼저 실행되므로 print(z) 출력.
# 2. 첫 번째 print문 실행, 함수 자체 return 없으므로 None 출력.
# 3. found 함수 실행되므로 print문 출력.
# 4. 두 번째 print문 실행, 함수 자체 return 없으므로 None 출력.
> 출력
12
사자와 호랑이의 수 : None
그들이 고라니 2마리를 잡았습니다.
None
함수는 return 값으로 수식이 가능하다.
# 예제 2
def cal(price, ea):
return price * ea # return문에 수식 가능.
print(cal(1000,5),'원 입니다.')
def cal2(a, b, c):
cal_num = a*1000 + b*500 + c*100
return cal_num
print(cal2(5, 2, 3),'원 입니다.')
> 출력
5000 원 입니다.
6300 원 입니다.
함수 박의 변수 (전역변수)는 함수 내에서 바로 계산할 수 없다. global을 사용해서 전역변수를 지역변수로 호출할 수 있다.


# 예제 3
a = 100
def f():
global a # 전역변수, 지역변수 어디든 갈 수 있게 해줌.
a = a + 1
return a
f()
> 출력
101
# 예제 4
print("A")
def message() :
print("B")
print("C")
message()
> 출력
A
C
B
# 예제 5
def make_url(x):
print(f'www.{x}.com')
make_url("google")
> 출력
www.google.com
# 예제 6
def 함수0(num) :
return num * 2
def 함수1(num) :
return 함수0(num + 2)
def 함수2(num) :
num = num + 10
return 함수1(num)
c = 함수2(2) # 12 -> 14 -> 28
print(c)
> 출력
28
dict type은 지역 변수로 불러와 사용 가능하다.✨
# 예제 7
won = {'A class':1000,'B class':500, 'C class':100}
def cal3(a, b, c):
cal3_sum = a * won['A class'] + b * won['B class'] + c * won['C class']
return cal3_sum
print(cal3(1, 2, 3),'원 입니다.')
> 출력
2300 원 입니다.
전역 변수를 함수 내 입력값으로 넣어 호출하는 것이 가능하다.
# 예제 1
PI = 3.14
def circle(r, inputpi):
z = r * r * inputpi
return z
result = circle(10, PI)
print(result)
> 출력
314.0
# 예제 2
A, B, C, 유물 = 0, 0, 0, 0
def 감자():
global A
A += 1
def 양파():
global A, B, C
A += 3
B += 3
C += 4
def 옥수수():
global 유물
유물 += 1
감자()
양파()
옥수수()
합계 = A + B + C + 유물 # 4 + 3 + 4 + 1
print('오늘 수확한 수화물 :', 합계)
> 출력
오늘 수확한 수화물 : 12
# 함수 안에 함수 형태
def 함수이름_1():
코드 1
def 함수이름_2():
코드 2
# 예제 1
def print_text():
text = "콩콩팥팥 수확의 기쁨"
def txt():
print(text)
txt()
print_text()
> 출력
콩콩팥팥 수확의 기쁨
# 예제 2
def 수확철():
야채 = {'A등급':0, 'B등급':0, 'C등급':0}
def 양파():
야채['A등급'] += 1
def 대파():
야채['A등급'] += 3
야채['B등급'] += 3
야채['C등급'] += 4
def 쪽파():
야채['금'] = 1 # 새로운 key, value 값 추가.
양파()
대파()
쪽파()
return 야채
수확철() # {'A등급': 4, 'B등급': 3, 'C등급': 4, '금': 1}
sum(수확철().values())
> 출력
12
기본적으로 python이 실행되는데 연산자의 우선순위가 있다. 우선순위는 아래 그림과 같다.

클래스(class)란 똑같은 무언가를 계속 만들어 낼 수 있는 설계 도면(과자 틀), 객체(object)란 클래스로 만든 피조물(과자 틀로 찍어 낸 과자)을 뜻한다.

객체에 해당하는 것들은 예시로 게임에서 직업(궁수, 성직자, 기사 등등)이나, 집/나무/자동차, 네이버 홈페이지의 버튼들을 들 수 있다.
인스턴스는 객체와 클래스가 연결된 단어인데 클래스로 만든 객체를 인스턴스라고도 한다.
그렇다면 객체와 인스턴스의 차이는 뭘까?
즉, 인스턴스란 특정 객체(a)가 어떤 클래스(과자틀)의 객체인지를 관계 위주로 설명할 때 사용한다.
'a는 인스턴스'라는 말보단 'a는 객체'라는 표현이 어울리며,
'a는 클래스의 객체'라는 말보단 'a는 클래스의 인스턴스'라는 표현이 훨씬 잘 어울린다.
이 외에도 매서드(method)라는 것이 있는데 이는 클래스 안에서 정의된 함수를 말한다.
클래스의 자세한 설명은 점프 투 파이썬에서 확인할 수 있다.✨
기본 형태
class class_name:
def method (self):
code
클래스 안에서 속성
class class_name:
def method(self):
self.attribute = valuse

# 예제 1
class Person:
def hello(self):
print("여러분~")
호출 = Person() # 호출에 할당된 것 = instants (인스턴스)
호출.hello() # Person.hello()
> 출력
여러분~
# 클래스의 변수 및 메소드
print(dir(Person()))
> 출력
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'hello']
# 예제 2
a = int(10) # 사실 여기 a는 인스턴스, int는 매서드
print(a)
b = list(range(10)) # b도 인스턴스, dict은 클래스
print(b)
> 출력
10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 예제 3
class Person:
def __init__(self): # __ 사이에 있는 매서드는 매직 매서드 / __init__ 는 초기화.
self.hello = "안녕하세요"
def greeting(self):
print(self.hello)
호출 = Person()
호출.greeting()
> 출력
안녕하세요
__del__() : 인스턴스 삭제
__len__() : 인스턴스 길이
__repr__() : 인스턴스 출력
__str__() : 문자열로 형변환
__add__() : +
__sub__() : -
__mul__() : *
__div__() : /
__mod__() : %
__pow__() : **
__eq__() : ==
이 외 등등...

class class_name:
def __init__(self, 매개변수1, 매개변수2):
self.attribute1 = 매개변수1
self.attribute2 = 매개변수2# 예제 1
class Person:
def __init__(self, name, age, address):
self.hello = '안녕하세요.'
self.name = name
self.age = age
self.address = address
def greeting(self):
print('{0} 저는 {1} 입니다.'.format(self.hello, self.name))
# {0}에 self.hello가 들어가고 {1}에는 self.name이 들어감.
maria = Person('마리아',20,'서울시 서초구 반포동') # self -> maria / name, age, address 순으로 대입.
# 그럼 maria.name = '마리아' / maria.age = 20 / maria.address = '서울시 서초구 반포동'
maria.greeting() # 여기서도 자기자신을 부르는 매서드 greeting이 입력됐기 때문에
# greeting 매서드 아래에 있는 print문 출력됨.
print('이름:',maria.name)
print('나이:',maria.age)
print('주소:',maria.address)
> 출력
안녕하세요. 저는 마리아 입니다.
이름: 마리아
나이: 20
주소: 서울시 서초구 반포동
# 예제 1
class Car(object):
maxspeed = 300
maxpeople = 5
def move(self, x): # 여기서의 self는 Car? object?
print("스피드로 달리고 있습니다.")
def stop(self):
print("멈췄습니다.")
class HybridCar(Car): # 위에 Car(object) 기능을 가져옴.
battery = 1000
batteryKM = 300
class ElectricCar(HybridCar):
battery = 1000
batteryKM = 300
def move(self, x):
print(self.batteryKM,"만큼 달릴 수 있습니다.")
print(x, "스피드로 달리고 있습니다.")
k5 = HybridCar()
k5.maxspeed # 300
print(dir(k5)) # 'battery', 'batteryKM', 'maxpeople', 'maxspeed', 'move', 'stop'
electricCark5 = ElectricCar()
electricCark5.maxspeed # 300
electricCark5.battery # 1000
electricCark5.move(10) # 위에 있는 move 매서드와 아래 있는 매서드 중에 아래꺼만 작동. → 매서드 오버라이딩.
> 출력
300 만큼 달릴 수 있습니다.
10 스피드로 달리고 있습니다.
웹의 경우 파일 입출력 과정은 아래와 같다.
크롤링을 통해 가져오기 → 데이터 베이스에 저장 → 1차 클렌징 → 출력 후 담당자에게 전달 → 2차 클렌징 → 유용한 데이터셋 → CSV 데이터 베이스 입력 → 인공지능 학습
*CSV(comma-separated values) : 몇 가지 필드를 쉼표(,)로 구분한 텍스트 데이터 및 텍스트 파일
# 입력 방법
f = open('test.txt','w')
f.write('여러분~ 모두 부우~자 되세요~~')
f.close() # Colab Notebooks 폴더에 텍스트 파일 생성됨.
# 여러줄 입력 방법 1
f = open('test.txt','w')
f.write('''마라탕 먹고 싶다.
마라탕 먹고 싶다.
마라탕 먹고 싶다.
마라탕 먹고 싶다.
마라탕 먹고 싶다.
''')
f.close()
# 여러줄 입력 방법 2
f = open('test.txt','w')
메세지 = ''
for i in range(10):
메세지 += "탕후루 먹고 싶다.\n"
f.write(메세지)
f.close()
# 저장된 문서 읽어 오기
f = open('test.txt','r')
s = f.read()
print(s)
f.close()
# 한 줄씩 읽어오기
f = open('test.txt','r')
line = f.readline()
print(line)
print(type(line))
f.close()
# 한 줄씩 읽어오는 것으로 저장된 문서 읽기
f = open('test.txt','r')
while line: # 뭐라도 적혀 있으면 True로 아래 반복문 실행. 아무것도 없으면 False로 반복문 실행X
line = f.readline()
print(line)
f.close()
f = open('test.txt','a')
f.write('마라탕을 더 먹고 싶다.')
f.close()
#f = open close 문구의 다른 형태
with open('test.txt', 'a') as f:
f.write("다 먹으면 금방 살찌겠는데...")
# list 요소 입력 방법 1
list = [10, 20, 30]
with open('test.txt', 'w') as f:
# f.write(list) # 오류 발생. 문자열만 입력 가능.
f.write(str(list)) # 저 list 요소 그대로 저장됨.
list = [10, 20, 30]
with open('test.txt', 'w') as f:
f.write('let test =' + str(list)) # let은 변수의 성격을 나타내는 것, 변수의 한에서 중복을 허용하지 않음.(at JavaScript)
# 여기서는 저 문자 그대로 입력되도 웹상에서는 문법으로 인식되기 때문에 자동화 가능.
# list 요소 입력 방법 2
list = ['10 ', '20 ', '30 '] # 위처럼 숫자로 입력시 아래 writelines에서는 요소 하나하나를 int로 보기 때문에 문자열로 넣기.
with open('test.txt', 'w') as f:
f.writelines(list) # 10 20 30
#csv 파일 넣는 방법
list = ['10', '20', '30']
with open ('test3.csv', 'w') as f: # 별도의 파일 만듦.
f.write(','.join(list))
# 예외코드 작성 1
try:
x = int(input('10을 나눌 숫자를 입력하세요. '))
y = 10 / x
print(y)
except:
print('예외가 발생했습니다.')
> 출력
나눌 숫자를 입력하세요. 4
2.5
10을 나눌 숫자를 입력하세요. ㅏ
예외가 발생했습니다.
# 예외코드 작성 2
y = [10, 20, 30]
try:
index, x = map(int, input('나눌 숫자를 입력하세요.: ').split(',')) # 숫자 2개 입력받는데
print(y[index]/x) # 첫번째 숫자는 y list의 인덱스 위치로 들어가고, 하나는 나눌 수로 들어감.
except:
print('오류입니다.')
> 출력
나눌 숫자를 입력하세요.: 1, 2
10.0
나눌 숫자를 입력하세요.: 2, 4
7.5
나눌 숫자를 입력하세요.: ㅇ
오류입니다.
# 예외코드 작성 3
y = [10, 20, 30]
try:
index, x = map(int, input('나눌 숫자를 입력하세요.: ').split(','))
print(y[index]/x)
except ZeroDivisionError: # 숫자를 0으로 나눴을때 나오는 오류를 처리하는 기능
print('숫자를 0으로 나눌 수 없습니다.')
except IndexError: # 없는 인덱스를 입력했을 때 나오는 오류를 처리하는 기능
print('잘못된 인덱스입니다.')
> 출력
10을 나눌 숫자를 입력하세요. 4
2.5
계산 성공!!!
10을 나눌 숫자를 입력하세요. 0
예외가 발생했습니다.
# 예외코드 작성 4
try:
x = int(input('10을 나눌 숫자를 입력하세요. '))
y = 10 / x
print(y)
except:
print('예외가 발생했습니다.')
else:
print("계산 성공!!!")
finally: # 무조건 작동하는 코드
print("코드 실행이 종료되었습니다.")
> 출력
10을 나눌 숫자를 입력하세요. 4
2.5
계산 성공!!!
코드 실행이 종료되었습니다.
10을 나눌 숫자를 입력하세요. ㄴ
예외가 발생했습니다.
코드 실행이 종료되었습니다.
# 임의의 에러 만들기
try:
x = int(input('10을 나눌 숫자를 입력하세요. '))
y = 10 / x
raise # 에러 발생시키는 기능
print(y)
except:
print('예외가 발생했습니다.')
else:
print("계산 성공!!!")
finally: # 무조건 작동하는 코드
print("코드 실행이 종료되었습니다.")
> 출력
10을 나눌 숫자를 입력하세요. 5
예외가 발생했습니다.
코드 실행이 종료되었습니다.
임시 글로 저장해 놓은지 어연 5개월이나 된 것을 이제서야 작성을 완료 했다.ಥಥ
부트 캠프에서는 당일 교육 진도 나가느라 정신이 없었고 python 배울 땐 강의에서 예제 위주의 수업이었기 때문에 개념 정리를 할 생각을 못했었다. (핑계처럼 보이겠지만,,,(⊙⊙;)
그래도 이렇게 임시 글 털이를 해서 속이 시원하다!
