본문 바로가기

컴퓨터 관련/파이썬

[파이썬] 8. 함수

728x90
반응형

1. 함수란?

  • 코드를 어떤 행위에 따라 분리함
  • 반복적으로 불러와서 수행해야 하는, 코드들을 함수로 묶음

1.1. 기본형

#함수 호출하기
Func_name(param_value)
# Func_name: 함수 이름
# param_value: 함수에 넘겨줄 값을 정의 (생략가능)

# 함수 선언하기
def Func_name (Parameter, ...):
  Statement
  return return_value
# Func_name: 함수 이름
# Parameter: 넘겨 받은 값을 저장할 공간 설정 (생략가능)
# Statement: 함수 안에서 실행할 코드
# return_value: 함수를 호출한 곳으로 넘겨주는 코드

1.2. 예시

#함수 호출하기
result = plus(10,20)

# 함수 선언하기
def plus(a,b):
  num = a + b
  return num

1.3. 함수 호출 방식

  • Call by Value

    • 함수에 넘기는 인자를, 값으로 넘김
    • 인자값은 값이 변경되지 않음.
  • Call by Reference

    • 함수에 넘기는 인자를, 주소로 넘김
    • 인자값은 값이 변경됨

1.4. 변수의 범위

  • 지역변수: Indent 안에서만 존재하는 변수

    b = 0
    def a():
      b = 1 # 지역변수
      print(b)
    
    a()
    print(b)
  • 전역변수: 프로그램 전체에 존재하는 변수

    • Indent 안에서도 사용가능함
    • 같은 이름의 변수가 Indent 안에서 선언시, 그 변수는 지역변수가 됨
    • Indent 안에서 "global"키워드 사용시 전역변수로 선언됨
      • 함수안에 같은 변수가 여러 개 있을 때라도, 전역 변수를 따르게 된다.
  b = 0
  def a():
    global b
    b = 1 # 전역변수
    print(b)

  a()
  print(b)

1.5. 디폴트 파라미터

  • 파라미터를 주고,
  • 인자를 파라미터에 맞게 주거나
  • 인자를 주지 않는 방법
# 인자를 파라미터에 맞게 주는 방법
def sample(x):
  print(x)

sample(10)
# 인자를 주지 않는 방법
def sample(x = 10):
  print(x)

sample()

1.6. 키워드 인자

  • 인자에서 데이터를 넘길때, 각 데이터를 파라미터를 지정할 수 있음
# 인자를 주지 않는 방법
def sample(x,y):
  print(x*y)

sample(x = 10, y = 20) # 키워드 인자

1.7. 가변 인자

  • 가변인자는 여러개의 데이터를 받을 수 있다.
# 가변인자의 예시
def sample(x, *args):
  print(args)

sample(10, [1,2,3,4])
# 키워드 가변인자의 예시
def sample(x, **args):
  print(args)

sample(x = 10, args = [1,2,3,4])

2. 람다 표현식

2.1. 기본형

Nameoflambda = lambda Variable: Statement
# Nameoflambda: 람다식의 이름을 지정 (함수의 이름과 유사)
# Variable: 값을 전달 받는 매개 변수
# Statement: 코드 수행하며, 결과를 반환함. (함수 안 실행코드와 유사)

2.2. 예시

name = lambda x: x*10
print(name(10))
list1 = [1,2,3,4,5]
list2 = [6,7,8,9,10]

list(map(lambda x,y : x,y, a,b))

3. 클로저 사용하기

3.1. 기본형

  • 함수가 중첩되어 있는 상태
  • 리턴값을 중첩되어 있는 함수에서 가져올 수 있음
  • 중첩되어 있는 함수를 호출하여, 두개의 함수를 같이 사용 가능

3.2. 예시

  • 첫번째 예시: 리턴값이 없는 형태
def x():
    x = 100
    def y():
        y = 100
        print(x)
        print(y)
    y() # 함수 X를 끝내기 전에, 함수 y를 호출함

x() # 함수 X를 호출함
  • 두번째 예시: 리턴값이 있는 형태
# 변수는 모두 상위 함수에 선언 되어 있어야 한다.
def func1():
    x = 100
    y = 100
    result = 0
    def func2(i):
        result = x+y+i
        return result
    return func2

# 클로저가 적용된 함수에는 변수를 선언해서 넘겨야 한다.
f = func1()
print(f(10), f(20))
  • 세번째 예시: lambda를 이용한 형태
# 변수는 모두 상위 함수에 선언 되어 있어야 한다.
# 반환하는 값으로써 람다를 선언할 수 있다.
def func1():
    x = 100
    y = 100
    return lambda i : x + y + i

# 클로저가 적용된 함수에는 변수를 선언해서 넘겨야 한다.
f = func1()
print(f(10), f(20))
반응형

'컴퓨터 관련 > 파이썬' 카테고리의 다른 글

[파이썬] 10. 고급기능  (2) 2024.01.07
[파이썬] 9. 객체지향  (0) 2024.01.07
[파이썬] 7. 파일 입출력  (1) 2024.01.06
[파이썬] 6. 조건문과 반복문  (0) 2024.01.06
[파이썬] 5. 딕셔너리  (0) 2024.01.06