본문 바로가기
코딩취미/Python

[python] 파이썬 함수이름 동적생성 및 호출방법 10가지

by 브링블링 2024. 1. 7.
728x90

파이썬 함수이름 동적생성 및 호출방법 10가지

파이썬에서 함수 이름을 동적으로 생성하는 방법은 간단하게 가능합니다. 다음은 10가지 예제 코드입니다. 선택하는 방법은 코드의 목적 및 구조에 따라 달라질 수 있습니다.

1. 함수 선언 및 호출:

def dynamic_function1(value):
    print(f"Value: {value}")

# 사용
dynamic_function1(42)

 

2. 함수 이름 동적 생성 및 호출:

def generate_and_call_function(prefix, suffix, value):
    function_name = f"{prefix}_function_{suffix}"
    globals()[function_name](value)

def dynamic_function2(value):
    print(f"Value: {value}")

# 사용
generate_and_call_function("dynamic", "function2", 42)

 

3. setattr 함수를 사용한 동적 함수 추가:

class DynamicFunctions:
    pass

def dynamic_function3(value):
    print(f"Value: {value}")

setattr(DynamicFunctions, "dynamic_function3", dynamic_function3)

# 사용
instance = DynamicFunctions()
instance.dynamic_function3(42)

 

4. lambda 함수를 사용한 동적 함수 생성:

dynamic_function4 = lambda value: print(f"Value: {value}")

# 사용
dynamic_function4(42)

 

5. exec 함수를 사용한 동적 함수 생성 및 호출:

function_name = "dynamic_function5"
exec(f"def {function_name}(value): print(f'Value: {value}')")

# 사용
globals()[function_name](42)

 

6. 클래스 내에 동적 메서드 추가:

class DynamicFunctions:
    pass

def dynamic_method(self, value):
    print(f"Value: {value}")

setattr(DynamicFunctions, "dynamic_method", dynamic_method)

# 사용
instance = DynamicFunctions()
instance.dynamic_method(42)

 

7. functools.partial 함수를 사용한 부분 적용:

from functools import partial

def dynamic_function6(value, prefix):
    print(f"{prefix}: {value}")

dynamic_partial = partial(dynamic_function6, prefix="Dynamic")

# 사용
dynamic_partial(42)

 

8. types.FunctionType 클래스를 사용한 동적 함수 생성:

import types

def dynamic_function7(value):
    print(f"Value: {value}")

dynamic_function_type = types.FunctionType(
    dynamic_function7.__code__, globals(), "dynamic_function7"
)

# 사용
dynamic_function_type(42)

 

9. types.MethodType 클래스를 사용한 동적 메서드 생성:

import types

class DynamicFunctions:
    pass

def dynamic_method(self, value):
    print(f"Value: {value}")

dynamic_method_type = types.MethodType(dynamic_method, DynamicFunctions())

# 사용
dynamic_method_type(42)

 

10. 딕셔너리를 활용한 동적 함수 호출:

dynamic_functions = {
    "dynamic_function8": lambda value: print(f"Value: {value}"),
    "dynamic_function9": lambda value: print(f"Another Value: {value}"),
}

# 사용
dynamic_functions["dynamic_function8"](42)
728x90