프로그램의 입력과 출력은 어떻게 해야 할까?
함수
파이썬 함수의 구조
def add(a, b): ->a,b는 매개변수(parameter)
return a + b
print(add(3, 4)) ->3,4는 인수(arguments)
def는 함수를 만들 때 사용하는 예약어
입력값과 결괏값에 따른 함수의 형태
1.일반적인 함수
>>> def add(a, b):
... result = a + b
... return result
>>> a = add(3, 4)
>>> print(a)
7
2.입력 값이 없는 함수
>>> def say( ):
... return 'Hi'
...
>>> a = say( ) -> a에 Hi 문자열이 대입
>>> print(a)
Hi
위 함수를 쓰기 위해서는 say( )처럼 괄호 안에 아무 값도 넣지 않아야 한다.
입력값은 없지만 결괏값으로 Hi라는 문자열 3.결과값이 없는 함수
>>> def add(a, b):
... print("%d, %d의 합은 %d입니다." % (a, b, a+b))
...
>>> add(3, 4)
3, 4의 합은 7입니다.->호출해도 값 돌려주지 않음(그냥 수행할 문장, 그냥 출력, 반환X)
>>> a = add(3, 4)
3, 4의 합은 7입니다.
>>> print(a)
None
4.입력값도 결괏값도 없는 함수
>>> def say( ):
... print('Hi')
...
>>> say( ) ->이거 밖에 못함//함수 이름()
Hi
매개변수 지정하여 호출하기
>>> def add(a, b):
... return a+b
... |-> b에 5, a에 3을 전달(이게 가능해서 씀)
>>> result = add(b=5, a=3)
>>> print(result)
8
입력값의 개수가 미지수
def 함수 이름(*매개변수):
수행할 문장
>>> def add_many(*args):
... result = 0
... for i in args:
... result = result + i
... return result
...
>>> result = add_many(1,2,3)
>>> print(result)
6
>>> def add_mul(choice, *args):
... if choice == "add":
... result = 0
... for i in args:
... result = result + i
... elif choice == "mul":
... result = 1
... for i in args:
... result = result * i
... return result
...
>>> result = add_mul('add', 1,2,3,4,5)
>>> print(result)
15
>>> result = add_mul('mul', 1,2,3,4,5)
>>> print(result)
120
키워드 파라미터
** 딕셔너리로 변화
>>> def print_kwargs(** kwargs):
... print(kwargs)
...
>>> print_kwargs(a=1)
{'a': 1}
>>> print_kwargs(name='foo', age=3)
{'age': 3, 'name': 'foo'}
함수의 결괏값
Return은 무조건 함수 바로 빠져나옴
>>> def add_and_mul(a,b):
... return a+b, a*b
>>> result = add_and_mul(3,4)
result = (7, 12)
>>> result1, result2 = add_and_mul(3, 4)
result1, result2 = (7, 12)가 되어 result1은 7이 되고 result2
매개변수에 초기값 미리 설정하기
매개변수에 들어갈 값이 항상 변하는 것이 아닐 경우 변수와 프린트함수 순서 바꾸면 오류
def say_myself(name, old, man=True):
print("나의 이름은 %s입니다." % name)
print("나이는 %d살입니다." % old)
if man:
print("남자입니다.")
else:
print("여자입니다.")
say_myself("박응용", 27)
say_myself("박응용", 27, True)
함수 안에서 선언한 변수의 효력 범위
함수 안에서만!
a = 1
def vartest(a):
a = a +1
vartest(a)
print(a)
->1이나옴 : return값이 없어서 첫째 줄 대로 변경법
1.return 사용
a = 1
def vartest(a):
a = a + 1
return a
a = vartest(a)
print(a)
2.global 명령어 사용
a = 1
def vartest( ):
global a
a = a + 1
vartest( )
print(a)
lambda
복잡하지 않거나, list 함수에 쓰임
>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7
mylist = [lambda a,b: a+b, lambda a,b:a*b]
print(mylist[0](1,2))
# 0번째 이므로 lambda a,b: a+b 실행
#3
print(mylist[1](1,2))
#2
사용자 입력과 출력
입력
>>> number = input("숫자를 입력하세요: ")
숫자를 입력하세요:
출력
1.큰따옴표(“)로 둘러싸인 문자열
+ 연산과 동일하다
>>> print("life" "is" "too short")
lifeistoo short
>>> print("life"+"is"+"too short")
lifeistoo short
2.문자열 띄어쓰기
콤마로 한다
>>> print("life", "is", "too short")
life is too short
3.한 줄에 결괏값 출력
한 줄에 결괏값을 계속 이어서 출력하려면 매개변수 end를 사용해 끝 문자를 지정
>>> for i in range(10):
... print(i, end=' ')
...
0 1 2 3 4 5 6 7 8 9 >>>
파일 읽고 쓰기
파일 생성하기
파일 객체 = open(파일 이름, 파일 열기 모드)
Or 디렉터리 A 저장 f = open(“A/새파일.txt”, ‘w’)
파일 열기모드
r 읽기 모드 - 파일을 읽기만 할 때 사용
w 쓰기 모드 - 파일에 내용을 쓸 때 사용
a 추가 모드 - 파일의 마지막에 새로운 내용을 추가할 때 사용
f.close( )는 열려 있는 파일 객체를 닫아 주는 역할
파일을 쓰기 모드로 열어 출력값 적기
1.모니터 화면 대신 파일에 결괏값을 적는 방법
f = open("C:/doit/새파일.txt", 'w')
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
f.write(data)
f.close( )
2.모니터 화면에 출력
for i in range(1, 11):
data = "%d번째 줄입니다.\n" % i
print(data)
프로그램의 외부에 저장된 파일을 읽는 여러 가지 방법
1.readline 함수
한 줄만
f = open("C:/doit/새파일.txt", 'r')
line = f.readline( )
print(line)
f.close( )
모든 줄
f = open("C:/doit/새파일.txt", 'r')
while True:
line = f.readline( )
if not line: break
print(line)
f.close( )
2.readlines 함수
모든 줄
f = open("C:/doit/새파일.txt", 'r')
lines = f.readlines( )
for line in lines:
print(line)
f.close( )
3.read 함수 사용하기
for없이 전체
f = open("C:/doit/새파일.txt", 'r')
data = f.read( )
print(data)
f.close( )
파일에 새로운 내용 추가
쓰기 모드(‘w’)로 파일을 열 때: 기존 내용 삭제
추가 모드(‘a’)로 파일을 열 때: 기존 내용 유지
with문과 함께 사용하기
바로 다음줄에서 지역변수 개념이 끝나서 자동 close
with open("foo.txt", "w") as f:
f.write("Life is too short, you need python")