3 장함수 박창이 서울시립대학교통계학과 박창이 ( 서울시립대학교통계학과 ) 3 장함수 1 / 20
학습내용 함수호출타입변환함수수학함수사용자정의함수파라미터와인자변수와파라미터의범위함수의구분함수를사용하는이유 from을이용한가져오기디버깅변수의범위재귀함수 박창이 ( 서울시립대학교통계학과 ) 3 장함수 2 / 20
함수호출 함수는어떤연산을수행하는일련의명령문들로함수이름으로호출 (call) 되는데, 인자 (argument) 를입력으로받아반환값 (return value) 를반환함 >>> type(32) <type int > 함수명 : type 인자 : 32 반환값 : <type int > 박창이 ( 서울시립대학교통계학과 ) 3 장함수 3 / 20
타입변환함수 int 함수 : 주어진값을정수로변환하거나오류메시지를출력하는데, 인자값이부동소수점값이면소수점아래의값을버리고정수값을줌 float 함수 : 주어진값을부동소수점값으로변환하거나오류메시지를출력 str 함수 : 인자값을문자열로변환 박창이 ( 서울시립대학교통계학과 ) 3 장함수 4 / 20
수학함수 Python에서모듈 (module) 은 R의라이브러리 (library) 처럼함수들의집합체임 module을사용하기위해서는 import 모듈명 을실행해야함모듈명을프린트하면 <module 모듈명 (built-in)> 과같은정보를출력모듈의함수는 math.sin과같이모듈명. 함수명으로도트기호 (dot notation) 로호출해야함삼각함수는래디언 (radian) 을인자로받고 math.pi는 15자리까지정확한 π값상수 박창이 ( 서울시립대학교통계학과 ) 3 장함수 5 / 20
사용자정의함수 I 예제 def print_lyrics(): # header print("i m a lumberjack, and I m okay.") # body print("i sleep all night and I work all day.") def: 함수정의를나타내는키워드 print lyrics는함수명으로변수명과동일한규칙으로정함괄호안에는인자가옴대화식모드에서는함수정의다음에빈줄을삽입해야하지만스크립트모드에서는상관없음 type은 function 이며호출은내장함수와동일하게 print lyrics() 함수는실행전에정의되어야함 박창이 ( 서울시립대학교통계학과 ) 3 장함수 6 / 20
사용자정의함수 II 인자전달 디폴트값설정 >>> def describe_pet(pet_name, animal_type= dog ): >>> print("\ni have a " + animal_type + ".") >>> print("my " + animal_type + " s name is " + pet_nam >>> describe_pet(pet_name= willie ) I have a dog. My dog s name is willie. >>> describe_pet(pet_name= harry, animal_type= hamster ) I have a hamster. My hamster s name is harry. 박창이 ( 서울시립대학교통계학과 ) 3 장함수 7 / 20
사용자정의함수 III 옵션인자 >>> def get_name(first_name, last_name, middle_name= ): >>> if middle_name: >>> full_name = first_name + + middle_name + >>> else: >>> full_name = first_name + + last_name >>> return(full_name) >>> musician = get_name( jimi, hendrix ) >>> print(musician) jimi hendrix >>> musician = get_name( john, hooker, lee ) >>> print(musician) john lee hooker 박창이 ( 서울시립대학교통계학과 ) 3 장함수 8 / 20
사용자정의함수 IV 입력값의갯수를모르는경우 >>> def make_pizza(*toppings): >>> print("\nmaking a pizza with the following toppings >>> for topping in toppings: >>> print("- " + topping) >>> make_pizza( peperoni ) Making a pizza with the following toppings: - peperoni >>> make_pizza( mushrooms, green peppers, extra cheese Making a pizza with the following toppings: - mushrooms - green peppers - extra cheese 박창이 ( 서울시립대학교통계학과 ) 3 장함수 9 / 20
사용자정의함수 V 매개변수앞에가두번붙으면매개변수는사전이됨 >>> def print_kwargs(**kwargs): >>> print(kwargs) >>> >>> print_kwargs(name="foo", age=3) { name : foo, age : 3} lambda로생성한함수는 return이없어도결과값반환함 >>> add = lambda a,b: a+b >>> result = add(3, 4) >>> print(result) 7 박창이 ( 서울시립대학교통계학과 ) 3 장함수 10 / 20
파라미터와인자 함수내부에서인자들이할당되는변수를파라미터라함 def print_twice(bruce): print(bruce) print(bruce) 에서 bruce는파라미터실행예 michael = Eric, the half a bee. print_twice(michael) 인자를전달하는변수명 michael과파라미터명 bruce는상관이없음 박창이 ( 서울시립대학교통계학과 ) 3 장함수 11 / 20
변수와파라미터의범위 함수내부의변수와파라미터는국소 (local) 임 def cat_twice(part1, part2): cat = part1 + part2 print_twice(cat) print(cat) 실행시에러메시지 Traceback (most recent call last): File "<pyshell#56>", line 2, in <module> print(cat) NameError: name cat is not defined traceback은오류가발생한파일, 라인등을알려줌 박창이 ( 서울시립대학교통계학과 ) 3 장함수 12 / 20
함수의구분 fruitful 함수 : 결과값을반환 x = math.cos(radians) # assign golden = (math.sqrt(5)+1)/2 math.sqrt(5) # In script mode, the return value is not dis void 함수 : 실행은되지만결과값을반환하지않음 result = print_twice( Bing ) # displays but not return print(result) print(type(none)) # None type 박창이 ( 서울시립대학교통계학과 ) 3 장함수 13 / 20
함수를사용하는이유 일련의명령문들을함수로만들면가독성과디버깅이쉬워짐코드의반복을줄임으로써프로그램의크기를줄일수있고수정이쉬움긴프로그램을함수들로만들면각함수들을하나씩디버깅하여전체로만들수있음다른프로그램에사용할수도있음 박창이 ( 서울시립대학교통계학과 ) 3 장함수 14 / 20
from 을이용한가져오기 I 모듈을가져오는방법 import math print(math) print(math.pi) 직접 pi를접근하려고하면오류가발생 print(pi) from math import pi print(pi) 모듈에서모든것을다가져오려면 from math import * cos(pi) 박창이 ( 서울시립대학교통계학과 ) 3 장함수 15 / 20
from 을이용한가져오기 II 모듈의도움말보기및정의된객체보기 import math help(math) dir(math) 함수에대한도움말 help(bin) 박창이 ( 서울시립대학교통계학과 ) 3 장함수 16 / 20
디버깅 텍스트에디터에서스크립트작성시들여쓰기등으로인한오류를 피하기위해서탭대신공백을사용하는것이좋음 실행하는코드와눈으로보고있는코드가동일한지항상주의해야함 박창이 ( 서울시립대학교통계학과 ) 3 장함수 17 / 20
변수의범위 I 함수에서전역변수에접근은가능하지만수정은안됨 >>> def func1(): print(x) >>> def func2(): x += 1 >>> x = 4 >>> func1() 4 >>> func2() Traceback (most recent call last): File "<pyshell#42>", line 1, in <module> func2() File "<pyshell#39>", line 2, in func2 x += 1 UnboundLocalError: local variable x referenced before assignment 박창이 ( 서울시립대학교통계학과 ) 3 장함수 18 / 20
변수의범위 II 함수에서 global문을사용하면수정가능 >>> def func2(): global x x += 1 >>> x = 4 >>> func2() >>> x 5 박창이 ( 서울시립대학교통계학과 ) 3 장함수 19 / 20
재귀함수 자기자신을호출하는함수를재귀함수라함계승함수 >>> def factorial(n): if n == 1: return 1 return n * factorial(n-1) >>> factorial(5) 120 박창이 ( 서울시립대학교통계학과 ) 3 장함수 20 / 20