파이썬 함수 정의와 호출 및 변수의 Scope에 대한 이해

YeHee·2024년 12월 18일

⏰ 2024.12.17 (D+49)

1. 파이썬 함수 정의

  • 파이썬에서 함수는 코드 재사용성과 모듈화된 설계를 위한 중요한 도구
  • 함수는 다양한 방법으로 정의하고 호출 가능
  • 함수의 매개변수는 고정 인수, 가변 인수, 위치 인수, 키워드 인수 등 여러 형태를 지원
  • 함수 안에서 사용되는 변수는 지역 변수와 전역 변수로 구분

2. 함수 정의와 호출

  • 파이썬에서 함수는 def 키워드를 사용하여 정의해야 한다
  • 함수는 매개변수를 받을 수 있으며, 필요에 따라 반환값을 가질 수도 있다

✅ 2.1 고정 인수 (Fixed Arguments)

  • 고정 인수는 함수 호출 시 매개변수의 수가 고정
  • 호출 시 매개변수의 순서대로 값을 전달해야 한다
def function1():
    print('-' * 30)
    print('1.New 2.Continue 3.Exit')
    print('-' * 30)

function1()

✅ 2.2 가변 인수 (Variable Arguments)

☑️ 위치 가변 인수 (args)
: 함수 호출 시 전달되는 인수의 개수가 정해지지 않은 경우, args를 사용하여 여러 인수를 받을 수 있다

def function3(start, end):
    total = sum(range(start, end + 1))
    print(f'{start}부터 {end}까지 누적합: {total}')

function3(1, 10)
function3(1, 100)

☑️ 키워드 가변 인수 (kwargs)
: 함수 호출 시 전달되는 인수 중 키워드 인수를 받을 때 사용

def keywordVariable(**kwargs):
    print(f'값: {kwargs}, 타입: {type(kwargs)}')

keywordVariable(name='ICT', age=30)

✅ 2.3 매개변수 초기화 (Default Arguments)

  • 매개변수에 초기값을 설정하면, 해당 인수가 호출 시 전달되지 않았을 경우 기본값이 사용
def parameterWithDefault(param1, param2=1004):
    print(f'위치 고정 인수: {param1}, 위치 고정 인수 매개변수 초기화: {param2}')

parameterWithDefault(100)
parameterWithDefault(100, 200)

3. 람다 함수 (Lambda Functions)

  • 람다 함수는 간단한 함수나 일회성으로 필요한 함수들을 정의할 때 유용하다
  • 람다 함수는 lambda 키워드를 사용
  • 기본적으로 return 키워드 없이 하나의 표현식만을 가질 수 있다
plus = lambda arg: arg + 10
print(plus(5))  # 15

☑️ 람다 함수로 리스트와 딕셔너리 처리

operations = [lambda x, y: x + y, lambda x, y: x - y, lambda x, y: x * y, lambda x, y: x / y]
print(operations[0](10, 20))  # 30

ops_dict = {'+': operations[0], '-': operations[1], '*': operations[2], '/': operations[3]}
print(ops_dict['+'](10, 20))  # 30

4. 함수와 변수의 Scope (범위)

  • 함수 내에서 사용하는 변수는 크게 지역 변수와 전역 변수로 구분

✅ 4.1 지역 변수 (Local Variables)

  • 함수 내에서 선언된 변수는 함수 외부에서는 접근할 수 없는 지역 변수
  • 람다 함수에서도 사용된 변수는 모두 지역 변수로 간주
def add(*args):
    if len(args) != 0:
        return f'{args[0]}부터 {args[len(args)-1]}까지 누적합: {sum(args)}'
    else:
        return '전달된 인수가 없어요'

print(add())  # 전달된 인수가 없어요
print(add(*[i for i in range(1, 11)]))  # 1부터 10까지 누적합: 55

✅ 4.2 전역 변수 (Global Variables)

  • 전역 변수는 함수 외부에서 선언되어 스크립트 전체에서 사용 가능한 변수
  • 함수 내에서도 global 키워드를 사용하면 전역 변수에 접근하거나 수정 가능
i = 10  # 전역 변수

def method():
    global i  # 전역 변수 i 사용
    i = 100
    print('함수 안의 i:', i)

method()
print('함수 밖의 i:', i)  # 함수 밖의 i: 100

5. 함수의 다양한 매개변수 활용

✅ 5.1 고정 인수와 가변 인수 혼합

  • 고정 인수와 가변 인수를 혼합하여 함수 정의를 할 수 있다
  • 이때, 고정 인수는 항상 가변 인수보다 먼저 와야 한다
def mixed(args1, *args2, args3='초기값', **kwargs):
    print(f'위치 고정 인수: {args1}, 위치 가변 인수: {args2}, 매개변수 초기화: {args3}, 키워드 가변 인수: {kwargs}')

mixed(2024, 10, 20, 30, 40, 50)
mixed(2024, 10, 20, 30, 40, 50, args3='가길동', username='ICT', password='1234')

✅ 5.2 람다 표현식 활용

lambda_ = lambda x, *args, **kwargs: [x, args, kwargs]
print(lambda_(1004))  # [1004, (), {}]
print(lambda_(1004, 10, 20, 30, 40, 50))  # [1004, (10, 20, 30, 40, 50), {}]
print(lambda_(1004, 10, 20, 30, 40, 50, username='ICT', password='1234'))  # [1004, (10, 20, 30, 40, 50), {'username': 'ICT', 'password': '1234'}]

6. 결론

  • 파이썬 함수는 다양한 방식으로 정의할 수 있으며, 이를 통해 코드의 재사용성과 유지보수성을 높일 수 있다
  • 고정 인수와 가변 인수, 람다 함수와 매개변수 초기화 등의 개념을 활용하면 훨씬 더 효율적인 코드 작성이 가능
  • 함수 내에서 사용하는 변수의 범위인 지역 변수와 전역 변수를 잘 이해하고 사용함으로써 프로그램의 동작을 예측 가능하고 명확하게 할 수 있다

0개의 댓글