#!/usr/bin/env python # coding: utf-8 # ## 04-1 함수 # # ### 파이썬 함수의 구조 # # ``` # def 함수명(입력 인수): # <수행할 문장1> # <수행할 문장2> # ... # ``` # In[1]: def sum(a, b): return a+b a = 3 b = 4 c = sum(a, b) print(c) # ### 입력값과 결과값에 따른 함수의 형태 # # - 일반적인 함수: 위 예제의 sum 함수 # - 입력값이 없는 함수 # - 결과값이 없는 함수 # - 입력값도 결과값도 없는 함수 # In[2]: # 입력값이 없는 함수 def say(): return 'Hi' a = say() print(a) # In[3]: # 결과값이 없는 함수 def sum(a, b): print("%d, %d의 합은 %d입니다." % (a, b, a+b)) sum(3, 4) # In[4]: a = sum(3, 4) print(a) # In[5]: # 입력값도 결과값도 없는 함수 def say(): print('Hi') say() # ### 입력값이 몇 개가 될지 모를 때는 어떻게 해야 할까? # # - 괄호 안의 입력 인수 부분이 __*입력변수__ 로 바뀐다. # - 입력변수 앞에 * 를 붙이면 입력값들을 전부 모아 튜플로 만들어서 전달해 준다. # # ``` # def 함수이름(*입력변수): # <수행할 문장> # ... # ``` # In[7]: # 여러 개의 입력값을 받는 함수 만들기 def sum_many(*args): sum = 0 for i in args: sum = sum + i return sum # In[8]: result = sum_many(1, 2, 3) print(result) # In[9]: result = sum_many(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) print(result) # In[14]: # 고정 인자와 유동 인자 같이 사용하기 def sum_mul(choice, *args): if choice == "sum": result = 0 for i in args: result += i elif choice == "mul": result = 1 for i in args: result *= i return result # In[15]: result = sum_mul("sum", 1, 2, 3, 4, 5) print(result) # In[16]: result = sum_mul("mul", 1, 2, 3, 4, 5) print(result) # ### 함수의 결과값은 언제나 하나이다 # # - return 문이 하나이다. # In[17]: # 결과값을 튜플로 반환하게 된다. def sum_and_mul(a, b): return a+b, a*b result = sum_and_mul(3, 4) print(result) # In[18]: # 별도의 변수로 받기 sum, mul = sum_and_mul(3, 4) print(sum) print(mul) # In[19]: # return 문이 두개일 경우 오류는 발생하지 않고, 첫번째 return 문만 실행한다. def sum_and_mul(a, b): return a+b return a*b result = sum_and_mul(3, 4) print(result) # ### 입력 인수에 초기값 미리 설정하기 # # - 입력값을 주지 않는 경우 초기값을 설정하는 방법 # - 초기값을 설정해 놓은 인수 뒤에 초기값을 설정하지 않은 입력 인수는 사용할 수 없다. # In[1]: def say_myself(name, old, man=True): print("나의 이름은 %s 입니다" % name) print("나이는 %d 살입니다" % old) if man: print("남자입니다") else: print("여자입니다") say_myself("박응용", 27) # In[2]: say_myself("박응용", 27, True) # In[3]: say_myself("박응용", 27, False) # ### 함수 안에서 선언된 변수의 효력 범위 # In[4]: a = 1 def vartest(a): a = a + 1 vartest(a) print(a) # 2가 아니고 1 # #### 함수 안에서 함수 밖의 변수를 변경하는 방법 # # 1. return 이용하기 # 2. global 키워드 이용하기 # In[5]: # return 이용하기 a = 1 def vartest(a): a = a + 1 return a a = vartest(a) print(a) # In[8]: # global 키워드 이용하기 a = 1 def vartest(): global a a = a + 1 vartest() print(a) # --- # ## 04-2 사용자 입력과 출력 # # ### 사용자 입력 # # - input의 사용 # - 프롬프트를 띄워서 사용자 입력 받기 # In[9]: # input의 사용 a = input() print(a) # In[10]: # 프롬프트를 띄워서 사용자 입력 받기 number = input("숫자를 입력하세요: ") print(number) # ### print 자세히 알기 # # - 큰 따옴표(")로 둘러싸인 문자열은 + 연산과 동일하다. # In[11]: print("life" "is" "too short") print("life"+"is"+"too short") # - 문자열 띄어쓰기는 콤마로 한다. # In[13]: print("lift", "is", "too short") # - 한 줄에 결과값 출력하기 # In[14]: for i in range(10): print(i, end=' ') # --- # ## 04-3 파일 읽고 쓰기 # # ### 파일 생성하기 # # - 파일을 생성하기 위해서는 open 이라는 파이썬 내장함수를 사용한다. # - open 함수는 "파일 이름"과 "파일 열기 모드"를 입력값으로 받고 파일 객체를 돌려준다. # # > 파일 객체 = open(파일 이름, 파일 열기 모드) # # - 파일 열기 모드 # # | 파일 열기 모드 | 설명 | # | :---: | :---: | # | r | 읽기모드 - 파일을 읽기만 할 때 사용 | # | w | 쓰기모드 - 파일에 내용을 쓸 때 사용 | # | a | 추가모드 - 파일의 마지막에 새로운 내용을 추가 시킬 때 사용 | # # - 파일을 쓰기 모드로 열게 되면 해당 파일이 이미 존재할 경우 원래 있던 내용이 모두 사라지고, 해당 파일이 존재하지 않으면 새로운 파일이 생성된다. # # ``` # f = open("C:/Python/새파일.txt", 'w') # f.close() # ``` # ### 파일을 쓰기 모드로 열어 출력값 적기 # In[1]: for i in range(1, 11): data = "%d 번째 줄입니다.\n" % i print(data) # In[2]: get_ipython().run_line_magic('ls', '') # In[3]: # 위 프로그램을 파일로 쓰면 다음과 같다. f = open("04-새파일.txt", 'w') for i in range(1, 11): data = "%d 번째 줄입니다.\n" % i f.write(data) f.close() # In[4]: get_ipython().run_line_magic('ls', '') # In[5]: get_ipython().run_line_magic('more', '04-새파일.txt') # In[7]: with open("04-새파일.txt", "r") as f: print(f.read()) # In[8]: get_ipython().system('more 04-새파일.txt') # In[9]: get_ipython().system('ls') # ### 프로그램의 외부에 저장된 파일을 읽는 여러가지 방법 # In[10]: # readline() 함수 이용하기 f = open("04-새파일.txt", "r") line = f.readline() print(line) f.close() # In[12]: f = open("04-새파일.txt", "r") while True: line = f.readline() if not line: break print(line, end="") f.close() # In[15]: # readlines() 함수 이용하기 f = open("04-새파일.txt", "r") lines = f.readlines() for line in lines: print(line, end="") f.close() # In[16]: # read() 함수 이용하기 f = open("04-새파일.txt", "r") data = f.read() print(data) f.close() # ### 파일에 새로운 내용 추가하기 # In[17]: f = open("04-새파일.txt", "a") for i in range(11, 20): data = "%d 번째 줄입니다.\n" % i f.write(data) f.close() # In[18]: get_ipython().system('more 04-새파일.txt') # ### with 문과 함께 사용하기 # # ``` # f = open("foo.txt", 'w') # f.write("Life is too short, you need Python") # f.close # ``` # # - 파일을 열면 위와 같이 항상 close 해 주는 것이 좋다. # - 아래와 같이 with 문을 사용하면 with 블록을 벗어나는 순간 자동으로 close 된다. # # ``` # with open("foo.txt", 'w') as f: # f.write("Life is too short, you need Python") # ``` # ### [sys 모듈로 입력 인수 주기] # In[28]: get_ipython().run_cell_magic('writefile', '04-sys1.py', 'import sys\n\nargs = sys.argv[1:]\n\nfor i in args:\n print(i)\n') # In[29]: get_ipython().system('ls') # In[30]: get_ipython().run_line_magic('run', '04-sys1.py aaa bbb ccc ddd eee') # In[31]: get_ipython().run_cell_magic('writefile', '04-sys2.py', "import sys\nargs = sys.argv[1:]\nfor i in args:\n print(i.upper(), end=' ')\n") # In[32]: get_ipython().system('ls') # In[33]: get_ipython().run_line_magic('run', '04-sys2.py life is too short, you need Python')