파이썬 - 함수 2 (docsrting, scopelambda 함수, map함수, list comprehension)

JiWOn·2023년 1월 4일
0

6. 함수를 도와주는 docstring

함수의 설명을 작성하는 것!
help() 함수로 docstring을 출력할 수 있다!

👩‍💻 내 코드 설명해줄게!

📝로또출력기를 설명해주자

def display_lotto(count, start=1, end=45):
    '''
    This function is a lotto output.

    paramters
    -----------------------
    count : int : Lotto number count
    start : int : Random start number
    end : int : Random end number
    
    return 
    -----------------------
    list : Lotto numbers
    '''
    lotto = []
    while 1:
        num = random.randint(start,end)
        lotto.append(num)
        lotto = list(set(lotto))
        if len(lotto)==6:
            lotto.sort()
            return lotto

간단하게 설명한.. 나의 소중한 로또 생성기... 💙

😎 내 코드 설명 한번볼래?

다른 방법으로 코드 설명보기

ctrl + space

Scope

함수 밖 : 전역영역 - global
함수 안 : 지역영역 - local

실수 할만한 코드3

data = 10
def change():
	data = 20

change()
print(data) 

답은 얼마일지❓

정답은 10이다

풀이를 해보자면
1. change 함수 밖에 data=10 이미 선언되어있음
2. change 함수를 실행 > 하지만 함수안에서만 data=20이 되고 함수를 빠져나오게 되면 다시 data=10이 됨.
3. 따라서 출력값이 10이됨

지역영역에서 전역영역의 변수를 사용하는 방법 : global

data = 10
def change():
	global data
	data = 20

change()
print(data) 

global data 라고 선언해주기!

지역영역에서 사용되는 변수(식별자)는 지역영역 없으면, 전역영역의 변수를 가져와 사용한다

🙃무슨 말?🙃

함수 안에 사용되는 변수가 없는데 사용되어야 한다면 함수 밖의 데이터를 가져와 사용한다는 것!

📝예제

data = 10
def change():
	print(data)

change()

이러면 출력값이 10이 나온다는 말!

return : 전역영역에서 지역영역의 변수 사용하는 방법

return 값으로 data를 받아서
data를 함수로 받아오면 됨!

lambda 함수

1회성 함수로 간단한 함수(파라미터, 리턴)를 함수 선언 없이 사용 가능하다!

  • 메모리 절약, 가독성 증대

함수는 데이터 타입이 function

아까 만든 로또 생성기의 데이터 타입을 확인해보면
type(display_lotto) => fuction

lambda로 간단한 함수를 만들어보자!

📝 n1과 n2를 받아 덧셈하는 간단한 함수

fun_sum = lambda n1,n2 : n1+n2
fun_sum(1,2) #3

메모리 절약?

📝 함수가 두~개

def plus(n1,n2):
	return n1+n2

def calc(func,n1,n2):
	return func(n1,n2)
    
result = calc(plus,1,2)
  • 저장공간도 두~개

📝 함수가 한~개

def calc(func,n1,n2):
	return func(n1,n2)

result = calc(lambda n1,n2:n1+n2, ,1,2)
  • 저장공간이 한~개

결과는 같지만 저장공간이 줄어들 수 있는 방법!
간단한 함수일 때 가능하지만 한눈에 함수를 파악하기도 좋고 저장공간도 줄어들어서 많이 사용함!

list comprehension

  • 간단한 반복문, 조건문을 사용해서 리스트 데이터를 만들 때 사용하는 문법
  • 주로 리스트 데이터를 필터링하거나 데이터를 변경할 때 사용

🔗프로그래머스 예제

어제 내가 풀었던 문제에서 다른사람의 코드에서 위의 내용이 발견되었다.

즉 간단한 반복문과 조건문에서 결과값을 리스트로 받을 때 사용

n값의 약수를 구할 때

n + sum([i for i in range(1,n//2+1) if n%i==0])

map()

iterable한 데이터의 모든 value에 특정 함수를 적용한 결과를 리스트로 출력

백준 문제에서 가져와볼게요

문제

  • 문제 설명
    두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

  • 입력
    첫째 줄에 A와 B가 주어진다. (0 < A, B < 10)

  • 출력
    첫째 줄에 A+B를 출력한다.

이런 간단한 문제에서

코드

a,b=map(int, input().split(' '))
print(a+b)

즉, map() 함수는
map(함수, 리스트)
리스트를 함수로 실행해 나온 값을 리스트로 받아줌

0개의 댓글