함수¶
파이썬에서는 def를 이용해 함수를 만들 수 있다.
- 코드조각에 이름을 붙인다. 함수명
- 스크립트가 argv를 받듯이 실행 인자를 받음.
- 1번과 2번을 이용해 '작은 스크립트'나 '작은 명령'을 만든다.
함수는 작은 스크립트라고 생각하면 된다.
"함수를 실행, 호출, 사용한다는 것은 모두 같은 뜻이다."
In [1]:
# -*- coding: utf-8 -*-
# argv를 쓴 스크립트와 비슷한 함수
def print_two(*args):
arg1, arg2 = args
print("실행인자1: {}, 실행인자2: {}".format(arg1, arg2))
# 좋아요. 사실 *args는 필요가 없습니다. 그냥 이렇게 하죠.
def print_two_again(arg1, arg2):
print("실행인자1: {}, 실행인자2: {}".format(arg1, arg2))
# 이 함수는 실행인자를 하나만 받습니다.
def print_one(arg1):
print("실행인자1: {}".format(arg1))
# 이 함수는 실행인자를 하나도 받지 않습니다.
def print_none():
print("아무것도 받지 않음.")
print_two("Zed", "Shaw")
print_two_again("Zed", "Shaw")
print_one("First!")
print_none()
위 함수 뜯어보기¶
*args → argv 매개변수와 비슷함. 함수에서 사용됨.
*의 의미는 함수가 모든 실행인자를 받고 args에 리스트로 넣는다는 뜻
공백은 스페이스 네 개
$ python ex18.py
함수에서 쓴 변수는 스크립트에 쓴 변수와 연결되지 않는다.¶
In [2]:
# -*- coding: utf-8 -*-
def cheese_and_crackers(cheese_count, boxes_of_crackers):
print("치즈가 {}개 있어요!".format(cheese_count))
print("크래커가 {}상자 있어요!".format(boxes_of_crackers))
print("파티 벌이기에 충분하네요!")
print("담요 한 장 가져 오세요.\n")
print("함수에 그냥 숫자를 직접 줄 수 있습니다.")
cheese_and_crackers(20, 30)
print("스크립트의 변수를 쓸 수도 있고요.")
amount_of_cheese = 10
amount_of_crackers = 50
cheese_and_crackers(amount_of_cheese, amount_of_crackers)
print("안에서 계산을 해도 됩니다.")
cheese_and_crackers(10+20, 5+6)
print("합쳐서 변수도 쓰고 계산도 할 수도 있습니다.")
cheese_and_crackers(amount_of_cheese+100, amount_of_crackers+1000)
치즈와 크래커의 수를 묻고 싶을 경우¶
raw_input 으로 받은 값을 정수로 변환해준다.
int()를 사용해서
함수 local변수명과 global변수명은 같아 지지 않도록 주의하자.
함수의 실행인자의 개수는 5개정도가 좋다.
함수와 파일¶
ex20.py 스크립트를 아래와 같이 작성하자.
In [ ]:
# -*- coding: utf-8 -*-
from sys import argv
script, input_file = argv
def print_all(f):
print(f.read())
def rewind(f):
f.seek(0)
def print_a_line(line_count, f):
print(line_count, f.readline())
current_file = open(input_file)
print("파일 전체를 출력해 봅시다.\n")
print_all(current_file)
print("이번에는 테이프처럼 되감아 봅시다.")
rewind(current_file)
print("세 줄을 출력해 봅시다.")
current_line = 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
스크립트를 실행시키면 다음과 같다.¶
+=를 써서 스크립트 수정¶
In [ ]:
# -*- coding: utf-8 -*-
from sys import argv
script, input_file = argv
def print_all(f):
print(f.read())
def rewind(f):
f.seek(0)
def print_a_line(line_count, f):
print(line_count, f.readline())
current_file = open(input_file)
print("파일 전체를 출력해 봅시다.\n")
print_all(current_file)
print("이번에는 테이프처럼 되감아 봅시다.")
rewind(current_file)
print("세 줄을 출력해 봅시다.")
## +=를 써서 스크립트 수정
current_line = 0
for i in range(3):
current_line += 1
print_a_line(current_line, current_file)
seek¶
파일의 읽기 헤드를 원하는 위치로 이동(seek)시켜 작업할 수 있다.
In [ ]:
f.seek(0) # 파일 처음으로 이동
f.readline() # 파일에서 한 줄 읽어 드리고, 읽기 헤드를 \n 바로 다음으로 옮긴다.
+= 연산¶
아래 연산은 같은 연산이다.
In [ ]:
x = x + y
x += y
반환하는 함수¶
In [4]:
# -*- coding: utf-8 -*-
def add(a, b):
print("덧셈 {} + {}".format(a,b))
return(a + b)
def subtract(a, b):
print("뺄셈 {} - {}".format(a, b))
return(a - b)
def muliply(a, b):
print("곱셈 {} * {}".format(a, b))
return(a * b)
def divide(a, b):
print("나눗셈 {} / {}".format(a, b))
return(a / b)
print("함수만으로 계산해 봅시다!")
age = add(30, 5)
weight = subtract(78, 4)
height = muliply(90, 2)
iq = divide(100, 2)
print("나이: {}, 키: {}, 몸무게: {}, IQ: {}".format(age, height, weight, iq))
# 추가 점수 문제. 일단 써 보세요.
print("문제가 있어요.")
what = add(age, subtract(height, muliply(weight, divide(iq, 2))))
print("결과:", what, "손으로 계산할 수 있나요?")
cf) raw_input( )¶
In [ ]:
## 정수로 값을 입력 받음
int(raw_input())
## 부동소수점으로 값을 입력 받음
float(raw_input())