선미 파이썬 0327 12일차
azuremei
# 09_fonction ''' [함수] '반환'<<<<매우중요 - '특정 작업'을 '수행'하는 코드들을 '하나로 묶은 것' >특정 작업 - 함수를 사용하는 이유 : 1. 높은 재사용성 >한 번 만들어놓으면 언제든지 사용('호출')할 수 있다. 2. 중복된 코드 제거(한 번에 묶는것이므로) 3. 프로그램의 구조화(굴조적인 프로그램 설계가 가능해진다) [함수의 기본 구조] def 함수이름(매개변수) : 수행문 return #def(define) 정의되어 있다. >print()와 같이 이러한 구조들이 이미 만들어져 있는 것도 있다. -우리가 만드는 함수 : 사용자 정의 함수 -이미 파이썬에서 사용할 수 있도록 만들어진 함수 : print(), input().... >이러한 함수들은 기본구조에 맞춰ㅗ 이미 만들어져 있다. >>>우리는 굳이 실제 어떤 식으로 만들어졌는지 알 필요는 없다. 어떻게 사용하는 지만 알면 됨(앞서 문자열, 리스트 등의 함수 배운것처럼) [1. 매개변수] : 함수 입장에서는 입력받는 값, 함수를 사용하는(호출하는) 입장에서는 입력하는 값 - 함수의 기능 수행을 위해 함수가 소출될 때 받을 값을 담는 '변수' >내가 함수를 만들 때 변수를 만들듯 이름을 지으면 됨(변추처럼) - 갯수 제한이 없고, 필요없으면 생략도 가능하다. >매개변수1, 매개변수2, 매겨변수3.....같이 나열하여 사용. [2. 반환값] : 함수 입장에서는 함수 기능 수행을 다 하고 반환해주는 값이고, 사용자 입장에서는 돌려 받는 값 - return 뒤에 오는 '값'은 함수의 수행이 끝나고 전달되는 값 - 'return'이라는 것을 사용하면 함수의 수행이 끝남(반복문의 break처럼) -매개변수와 반환값의 유/무에 따른 함수 종류 1. 둘 다 있거나 2. 둘 다 없거나 3. 둘 중 하나만 있다(2가지 경우) >>총 4 가지 경우가 있는데 어떻게 만들지는 누가 정해주는 것이 아니라 함수 기능의 목적에 따라 만드는 사람(개발자)가 결정하는 것. ''' print("===========function=================") # function : 다른 언어에서 기능, 함수, 매소드 등으로 불리기도 함 #1. 매개변수와 반환값이 둘 다 있는 함수 #def : define >>함수를 정의하는 것, 즉 만들겠다! def add(a, b) : return a+b #함수는 def정의만 해놓으면 아무런 효력이 없다. 단지 이런 기능(함수)가 있다고 만들어놓기만 한 것이고 반환된 결과를 호출해줘야 수행문이 수행된다. #↓↓↓↓호출 result = add(1, 2) #add(1, 2) 호출하면 add함수의 수행문으로 코드가 점프!이동~1)이 때 매개변수 a, b에는 차례대로 1, 2가 대입된다 2)리턴 뒤에 값이 있으면 그 값을 반환하는데 리턴값이 +이므로 #에드 함수 호출이 끝나면 원래 호출했던 위치로 돌아온다. 반환된 값이 있으면 그 값을 들고온다 >>>>3 #결국 반환된 값에 의해 리절트=3과 같은 코드가 된 것(코드가 변한것은 아니고 저런 연산과정을 거쳤다는 것) print(result) ''' my_str = input("입력 : ") #내부적으로는 리턴"입력된 문자열" print(my_str) #잘못 이해한 예씨 : 1. 변수에 인풋 함수가 대입, 2. 프린트에서 인풋 함수가 수행 ''' #2. 매개변수와 변환값이 둘 다 없는 함수 def say_ho() : print("ho! ho!") #>>기능 : 호출되면 hoho 라는 문자열을 출력하고 끝, #수행문 자체에 print함수를 사용한 1줄밖에 없다. #따로 규칙이 없이 리턴을 사용한다/안한다의 차이 say_ho() # print를 이용해 따로 출력하지 않아도 미리 정의된 매개변수(print("hoho"))에 따라 값이 출력된다. #반환값이 있는 것과 잘못 지어서 연관하는 오류가 있다. result = say_ho() #세이호 함수는 반환값이 없다. #리절트 변수에 무언가 값을 대입하는 행위를 했다 print("result의 값 : ", result) ''' ho! ho! ho! ho! result의 값 : None 라고 뜨는데 이는 반환을 아무것도 하지 않았는데 아무것도 없는 행위를 대입 >>> 리절트 변수에는 none이라는 값이 생기는것 ''' print("=====") print(say_ho()) # 1)프린트 함수에서 툴력할 값으로 say_ho를 넣었다. #프린트로 sayho를 출력하려면 세이호라는 함수를 수행해야 하는데 세이호가 호출되면서 수행문을 수행하러 이동 #이떄 수행문에 있는 호호가 수행되면서 출력이 됨. # 수행문이 끝나고 원래 위치로 돌아왔지만 반환된 값이 없어서 none(값이 없다)이 되는 것, 프린트는 반환된 값이 없는 값none을 출력하는 것(print(none)) #3. 반환값만 있는 함수 def get_ho() : #수행문 자리인데 수행문을 넣지 않음(왜? 내 마음. 규칙은 따로 없음) return "ho[[사용자:Shanmei|Shanmei]] ([[사용자토론:Shanmei|토론]]) 2018년 3월 27일 (화) 21:22 (KST)!" # 리턴도 일종의 수행문으로 볼 수 있다. (별도의 수행문을 넣지 않았을 뿐이지 수행문(반환값) 자체가 없는 것은 아님) print("==3==") print(get_ho()) #겟호가 수행되는것까지는 동일하고 반환값을 만나면서 겟호는 끝이 났다. #원래 위치로 되돌아오면서 반환값을 들거왔으므로 반환값이 있다>>>>print에서 출력할 것(ho~~)가 생겨서 print(ho~~)rk tngod # 반환값이 없는 함수는 그 반환값을 1)변수에 '대입'하여 사용하거나 2)특정 코드에서 '사용'하는 개념 #4. 매개변수만 있다. def say(talk) : print(talk) #return을 사용하ㅓ지 않음>>반환값이 없다. print("==4==") say("ho! ho[[사용자:Shanmei|Shanmei]] ([[사용자토론:Shanmei|토론]]) 2018년 3월 27일 (화) 21:22 (KST)") #반환값이 없는 함수는 그냥, 어디에 사용하거나 대입하지 않고 단독적으로 호출만 하면 됨(프린트로 출력 할 필요가 없다.) #함수 연습 ''' 1. 홀짝 판별기 - 함수로 전달된 값에 홀/짝 판별하는 함수 정의 - 함수 이름은 : is_even_number >> 내가 전달한 값이 짝수가 맞니? 1)함수에서 결과를 출력(반환 없음) is_even_number1 2)함수에서 결과를 반환(출력 없음) is_even_number2 [출력결과] 숫자 입력 : 3 홀수입니다. (입력은 미리 받아야 한다.) input_num(int(~~)) 우리가 만든 함수(input_num)~~ 2. 큰 수에서 작은 함수를 뺀 결과를 반환하는 함수를 정의 >매개변수로 2개의 숫자를 전달받음 >2개의 숫자는 함수 외부에서 입력받음 [출력 결과] 두 수 입력 : 2 19 결과 : 17 3. 1) 1~10 사이의 두 수를 입력받음 2) 1~100까지 1)에서 입력받은 두 수의 공배수를 출력 >매개변수로 두 개의 숫자를 전달받음 >함수에서 바로 출력(반환없음) [출력 결과] 두 수 입력 : 3 5 결과 : 15 30 45 60 75 90 ''' print("1-1)") inp_n = int(input("숫자 입력 : ")) ''' def is_even_number1(inp_n) : if inp_n % 2 == 0 : print("짝수") else : print("홀수") is_even_number1(inp_n) ''' print("1-2)") def is_even_number2(inp_n) : if inp_n % 2 == 0 : print("짝수") else : print("홀수") return result = is_even_number(inp_n) print(result) ''' #2번의 경우 뭘 반환한느냐에 따라 결과값이 달라님 #2-1)결과값이 문자열이 경우 result = is_even_number2(input_num) print(result) #반환된게 "짝수"와 같은 문자열 #2-2) 결과를 t/f로 변환 result = is_even_number2(input_num) if result == True : print("짝수") ''' #변수에 어떤 형태도 대입할 수 있는 것처럼 반환도 형태를 가리지 않는다. 단 반환된 형태가 그 자료형이 되기 때문에 출력할 때 형태에 맞게 써야 함 def test1() : return 1 def test2() : return "ㅋㅋㅋ" def test3() : return [1, 2, 3] a = test1() b = test2() c = test3() print("====") print(a) print(b) print(c)