카테고리 없음

python 함수

막막한 2023. 5. 26. 13:52

디버깅 

 

디버깅은 버그를 찾는 행동

 

파이썬에서 pdb라는 디버깅 도구가 있다 

import pdb
pdb.set_trace()

 

 

-> pdb.set_trace()
(Pdb)

breakpoint()만 적어도 디버깅이 가능하긴하다 (파이썬 3.7이상)

 

sum =0

breakpoint()

print(sum)


예시

num 까지 반복문 돌며 sum 증가 / 반복문 돌아갈때 변화하는 값 확인

import pdb

def simple_func(num):
	sum =0
    pdb.set_trace()
    
    for i in range(1, num +1):
    	pdb.set_trace()
        sum += i
        
     return sum 
     
simple_func(4)

 

실행화면 

-> for i in range(1, num +1):
(Pdb)

sum 과 i  쳐봐라 

sum 은 0으로 보이지만 i는 정의도 되어있지 않다는 에러 뜸 

 

기본이동 -

set_trace함수가 넘어가기 위해 n을 쳐본다 여기에서 i나 sum을 쳐보면 정상 


python 함수

함수 생성 

def print_hello_1(name):
	print(f"Hello {name}")

함수 정의 --> 

def 함수명칭 ( 파라미터 ) :

      " 함수 문서 "

         함수 내용

         return [표현식]

 

파라미터 -- 함수 정의할때 사용되는 소괄호에 들어가는 것   

파라미터를 어느 순서로 받는지에 따라 함수 호출할 때 순서 지켜 인수 넘겨야한다 

 

 

 

참조 vs 값 ?

인수들이 참조로 함수에 전달이 된다  즉 객체의 주소값을 전달한다 

참조로전달되지만 immutable = 변경 불가한 객체들은 값으로 전달된다 

 

int, str 등은 값으로 전달 - list, dict 와  같은 객체들은 참조값으로 전달 

 

 

< 인수 > 

필수 인수 : 위치지키며 전달되는 인수

키워드 인수 : 파라미터 이름을 사용해 전달되는 인수 

기본 인수 : 파라미터에서 기본으로 사용되는 값 

 

- 필수 인수 -

필수 인수와 같은 경우에는 위에서 나왔던 예시처럼 위치에 따라 전달되는 인수 

 순서를 지켜야하며 함수에서 파라미터로 정의했기 때문에 필수로 넘겨야 함 

 

def person_info(first_name, last_name):
	print (f"Hello {first_name}, {last_name} !")

^  함수가 2개의 파마리미터 정의, 2개의 인수 넘기기 

 

 

- 키워드 인수 - 

위치 인수로 전달하지 않고 키워드 사용해 전달 

person_info(last_name="bob", first_name ="sponge")

 ^ 키워드 명시해 실행, 필수 인수들은 순서 상관없음 

 

- 기본 인수 -

함수에서 받는 파라미터 값들에 대한 기본값 설정- 인수 넘기지 않느 ㄴ경우 기본값들 설정 

 

파라미터 설정시, 기본값 정하기 

def person_data(name, type_p="human"):
	print(f"hello {name}, you are {type_p}")

^ tyepe_p 인수를 넘기지 않으면 기본값은 human으로 들어간다 

 

**주의 사항 : 기본값 설정된 파라미터들은 기본값 없는 파라미터 뒤에 등장해야한다 

 

<return>

리턴은 함수종료하고 호출자에게 표현 전달 

 

리턴에 문구를 넣어 특정 결과 리턴할 수 있음 

def print_hello_4(name):
	return f"hello {name}"