파이썬 심화(함수)

오상윤·2022년 12월 30일
0

파이썬 심화

목록 보기
3/9

함수 심화학습

함수

  • 입력값을 받아서 출력값을 내어놓는 것
  • 수학에서는 f(x) = y로 표현
  • 프로그램에서의 함수는 입력 값이 있을 수도 있고 없을 수도 있음
  • 입력값과 결과값이 꼭 '숫자'가 아닐 수도 있음(문자열, 리스트, 딕셔너리 등 어떤 자료형)
  • 함수의 입력값이 또 다른 함수가 될 수 있음
  • 출력값은 한개다.(여러 개일 경우, tuple형태로 변환)
  • return이 있어야 반환값이 나온다.
def 함수이름(x1,x2,x3):
    문장1
    문장2
    return y
# 거스름돈 예시
def calculate_change(payment, cost):
    money = payment - cost
    unit = [50000,10000,5000,1000]
    for i in range(len(unit)):
        print('{}원 지폐 : {}장'.format(unit[i],money//unit[i]))
        money = money % unit[i]
calculate_change(100000, 33000)
print("=============")
calculate_change(500000, 378000)

매개 변수와 글로벌 변수

  • 함수에 들어가는 입력변수들
  • local 변수 : 함수 안에서 만든 변수는 함수 안에서만 살아있다가 함수 코드가 실행 종료되면 변수도 같이 사라짐
  • global 변수 : 함수 외부에서 만든 변수는 프로그램이 실행되어 있는동안에 계속 살아있음
# args에 들어간 인수들이 tuple 형태로 변환되어 args라는 매개변수에 들어간다.
def func(*args):
    for i in args:
        print(i)
func(1,2,3,4)
# kwargs에 들어간 인수들이 dictionary 형태로 변환되어 kwargs라는 매개 변수에 들어간다.
# 이 때 반드시 func(k1=v1, k2=v2)와 같은 형태로 매개변수 이름을 지정해 주어야 한다.
def func(**kwargs):
    for i in kwargs:
        print(i)
func(a=1, b=2, c=3)
# 글로벌 변수
a = 3
def f():
    global a
    a += 1
    print(a)
f()
print(a)

파이썬 함수 작성 규칙들

  • 변수 이름과 함수 이름은 소문자로, 여러 단어일 경우_로 나눔.
  • 적당한 띄어쓰기로 가독성을 높임.
  • 적당한 변수명 및 함수명 선언으로 남이 봐도 이해할 수 있도록 하기.

generator 와 yield

  • yield를 통해 생성된 값들은 바로 계산되지 않고 호출 되었을 때 비로소 계산됨(lazy operation)

재귀함수

  • 자기 스스로를 호출하는 함수
  • 재귀 호출의 단계가 깊어질 수록 메모리를 추가적으로 사용하므로 종료조건을 분명히 해야함
# 재귀함수 예시
def func(count):
    if count>0:
        print(count,'현재')
        func(count-1)
    print('결과', count)
func(10)
# 재귀함수
def fat1(num):
    if num>0:
        return fat1(num - 1) * num
        # fat1(4)*5 -> fat1(3)*4*5 ->
        # fat1(2)*3*4*5 -> fat1(1)*2*3*4*5
        # fat1(0)*1*2*3*4*5 -> 1*2*3*4*5
    else:
        return 1
print(fat1(5))

중첩함수

  • 함수 안에 정의된 함수
  • nonlocal : 중첩함수에서 쓰이는 로직 -> 한단계 밖에있는 변수를 사용하겠다
# 중첩함수 예시
def func1(a):
    def func2():
        nonlocal a
        a +=1
        return a
    return func2()
func1(2)

lambda 함수

  • 이름이 없는 한 줄 짜리 함수
  • lambda 인수 나열 : 반환할 내용
  • 인수가 없으면 생략가능
def run(func, x):
    print(func(x))
run(lambda x:x+1, 2)
a1 = [1,2,3,4,5]
b2 = [9,8,7,6,5]
result2 = list(map(lambda a,x : a*x, a1, b2))
print(result2)

유용한 내장함수들

  • 내장 함수란 따로 정의하지 않아도 이미 파이썬에서 기본적으로 정의되어 있는 함수들!
  • len(),sum(),print(),str(),int()와 같이 이미 우리가 쓰고있던 함수들
  • enumerate(리스트) -> 리스트의 원소와 인덱스 값을 모두 생성한다.
  • zip(리스트1, 리스트2) : 두 개의 리스트를 합쳐서 각 원소의 쌍을 원소로 가지는 하나의 리스트를 반환
  • map(함수, 컬렉션) : 함수와 컬렉션(list, tuple 등)을 매개변수로 받아 컬렉션의 모든 데이터를 함수의 매개변수로 대입해서 결과를 리턴하는 함수
  • filter(함수, 컬렉션) : 함수와 컬렉션(list, tuple 등)을 매개변수로 받아 컬렉션의 모든 데이터를 함수의 매개변수로 대입해서 결과가 참인 컬렌션의 멤버들을 반환하는 함수
# 2로나눈 나머지가 0인 값(참인 값)들만 출력
list(filter(lambda x : x%2==0, [1,2,3,4]))
x = [23, 45, 76]
for i, s in enumerate(x):
    # i에는 index, s에는 값이 추출
    print(i, ":", s)  
list1 = [1,2,3,4]
list2 = [5,6,7,8]
for i, j in list(zip(list1,list2)):
    print(i)
    print(j)

외장함수들

  • 다른 사람이 미리 정의해 놓은 함수
  • 상당수는 파이썬이랑 같이 자동으로 설치됨
  • 라이브러리 : 남들이 미리 작성해 놓은 코드들의 집합을 뜻한다'

time

  • time.time() : UTC를 사용하여 현재 시간을 실수 형태로 반환
  • time.sleep(x) : x초 동안 대기한다.
  • time.localtime() : time.time()에서 나온 실수값을 이용하여 연도,월,일,시,분,초 의 형태로 객체로 바꿔주는 함수
  • time.strftime(출력할 형식, time.localtime(time.time())) : time.localtime으로 만든 객체를 출력할 형식 모양에 맞춰서 출력

os, sys

  • sys.path : 파이썬 모듈들이 저장되어 있는 위치 변환
  • os : 환경변수, 디렉토리, 파일 등의 os자원을 제어하는 모듈
  • os.environ : 내 시스템 환경 보기
  • os.getcwd() : 현재 위치 확인
  • os.chdir(path) : 현재 디렉토리 위치 변경
import time
time.strftime("%Y-%m-%d", time.localtime(time.time())) 
profile
가보자가보자~

0개의 댓글