데이터분석 study/Python

TIL(Today I Learned) 24.07.08_함수

justdata 2024. 7. 8. 20:23

반복문 만큼 중요하고 알고리즘 코딩테스트 문제에서도 기본으로 많이 나오는

문법이어서 확실하게 이해하고 넘어갈 것이다.

● function이란?

 - input이 들어와서 output이 정해진 규칙에 따라 나온다는 개념

 - 프로그램에서의 하나의 함수는 하나의 기능을 나타낸다.

    (하나의 기능이란 예를 들어 입력받은 2개의 숫자를 더한다, 들어온 텍스트를 정제한다, 받은 이미지를 greyscale로 변경한다.)

 - 정확하게 함수는 특정 기능을 구현한 코드 묶음이다. 

 - def 함수이름 (param1, param2, .....) : return

 - 함수를 쓰는 이유는 재사용성 때문이다. 

 

●python function definition 구조

def add(a,b):
	c= a+b
    return c
add(10,11)

# 출력하면 21

*** 중요한 것은 어떤 input parameter 가 들어가서 , 어떤 output parameter 가 나오는지 주목

 

○ 헷갈렸던 매개변수(parameter)와 인수(argument)

    (인수는 전달인자라는 표현을 쓰기도 한다.)

    ○ 매개변수(parameter)

        - 함수를 정의할 때 함수가 받아들이는 값을 지정하는 변수

        - 함수의 헤더 부분에서 매개변수가 정의되며, 함수 내부에서 사용

        - 함수를 정의할 때 매개변수를 정의하고, 함수가 호출될 때 매개 변수에 해당하는 값을 전달 받는다.

    

    ○ 인수(전달인자) (argument)

       - 함수를 호출할 때 함수에 전달되는 값

       - 함수를 호출할 대 전달되는 실제 값

       - 함수 호출 시 매개 변수에 전달되는 값, 해당 값은 함수 내부에서 매개변수로 사용 

 

         

예시코드)

def add_numbers(x,y):  #'x' 와 'y'는 매개변수
	result = x + y
    return result
# 함수 호출시 10 과 20이 각각 'x'와 'y' 매개변수에 전달됨
sum_result = add_numbers(10,20) # 10과 20이 전달인자(argument)
print("sum:", sum_result)

 

● 함수 호출 시 전달되는 인자의 두 가지 유형

   ○ 위치인수

       - 위치 전달인수는 함수 정의에서 매개변수의 위치에 따라 전달되는 인수.

       - 위치 전달인수는 인자의 값이 함수의 매개변수에 순서대로 매핑된다.

       - 함수 호출 시 위치 전달인수는 매개변수의 위치에 따라 전달

 

   ○ 키워드 인수 

      - 함수를 호출할 때, 인수를 순서대로 전달하는 대신에 특정 매개변수에 값을 할당하여 전달

       예시 코드)

     

def greet(name, age):
    print("이름:", name)
    print("나이:", age)

# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)

      * 위의 코드에서 greet 함수는 name 과 age 두 개의 매개 변수를 가지는데, 함수를 호출할 때,

         각 매개변수에 직접 값을 할당하여 전달하고 있다.

**딥러닝을 쓸 때도 넣어줘야 되는 인수들이 많은데 키워드를 정해서 중요한 인수들을

   지정해서 넣어주는 경우가 있다. 이런 경우들은 키워드 인수를 사용하는 것이 좋다.

 

    ○ 기본값 설정하기

        - 함수의 매개변수에 기본 값을 설정할 수 있다.

        - 해당 매개변수에 인수가 전달되니 않았을 대 기본값으로 사용

def greet(name="Guest", age=25):
    print("이름:", name)
    print("나이:", age)

# 기본값이 설정된 함수 호출
greet()

    * 위의 코드에서 greet 함수의 매개변수인 name 과 age는 각각 'guest' 와 25의 기본값을 가져서

       함수를 호출할 때 인수를 전달하지 않으면 기본값이 사용됨.

 

    ○키워드 인수와 기본값을 함께 사용하기

     

def greet(name="Guest", age=25):
    print("이름:", name)
    print("나이:", age)

# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)

# 일부 매개변수에만 키워드 인수 사용하여 호출
greet(name="Bob")

      * 위의 코드에서 일부 매개변수에만 키워드 인수를 사용하여 값을 전달할 수 있음

      * 함수의 매개변수에 기본값이 설정되어 있으면 해당 매개변수에 값을 전달하지 않아도

         기본값이 사용됨.

 

      ○ 가변인수 활용하기

          - 여러 개의 인수들을 받을 수 있는 함수를 만들기 위해서는 가변인수를 활용할 수 있다.

          - 파이썬에서는 *args 와 **kwargs를 사용

          - *args는 함수를 호출할 때 임의의 개수의 위치 인수를 전달할 수 있도록 함

          - **kwargs 는 함수를 호출할 때 임의의 개수의 키워드 인수를 전달할 수 있도록 함

 예시코드)

def sum_values(*args):
    total = 0
    for num in args:
        total += num
    return total

result = sum_values(1, 2, 3, 4, 5)
print("합계:", result)  # 출력: 합계: 15

   *위의 코드에서 함수 sum_values는 임의의 개수의 위치 인수를 받아서 합계를 계산한다.

   * 함수 내에서는 args라는 튜플로 위치인수들을 받아 처리

 

 예시코드 2)

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, country="USA")

   * 이 코드도 print_info 함수는 임의의 개수의 키워드 인수를 받아서 그 정보를 출력한다.

   * 함수 내에서는 kwargs라는 딕셔너리로 키워드 인수들을 받아 처리

 

 

● 전역변수와 지역변수

  ○ 전역변수

      - 전역변수는 프로그램 전체에서 접근 가능, 어디서든지 사용

      - 전역변수는 프로그램이 시작될 때 생성, 프로그램이 종료될 때까지 메모리에 유지

      - 전역변수는 프로그램의 어디서든지 접근할 수 있으므로 , 여러 함수에서 공통적으로 

         사용되는 값을 저장할 때 유용

 

  ○ 지역변수

     - 지역변수는 특정한 범위에서만 접근 가능한 변수

     - 해당 범위를 벗어나면 사용할 수 없음

     - 해당 범위에서 생성되고, 범위를 벗어나면 메모리에서 사라짐

    - 함수 내에서 정의된 변수는 해당 함수 내에서만 사용가능 

    - 지역변수는 함수가 실행될 때 생성되고, 함수가 종료되면 메모리에서 제거되어, 

       메모리 관리에 효율적

 

예시코드)

# 전역변수 예시
global_var = 10

def global_example():
    print("전역변수 접근:", global_var)

global_example()  # 출력: 전역변수 접근: 10

# 지역변수 예시
def local_example():
    local_var = 20
    print("지역변수 접근:", local_var)

local_example()  # 출력: 지역변수 접근: 20

# 함수 내에서 전역변수를 수정하는 예시
def modify_global():
    global global_var
    global_var = 30
    print("함수 내에서 수정된 전역변수:", global_var)

modify_global()  # 출력: 함수 내에서 수정된 전역변수: 30
print("수정된 전역변수 확인:", global_var)  # 출력: 수정된 전역변수 확인: 30

 

    *위의 코드에서 locar_var는 함수 local_example()내에서만 접근 가능한 지역변수

    * 함수 내에서는 global 키워드를 사용하여 전역변수를 수정할 수 있다. 

    * 함수 내에서 전역 변수를 수정하더라도 해당 변수는 전역적으로 수정된다.