함수 인수로서의 파이썬 함수?


116

Python 함수가 다른 함수의 인수가 될 수 있습니까?

말하다:

def myfunc(anotherfunc, extraArgs):
    # run anotherfunc and also pass the values from extraArgs to it
    pass

그래서 이것은 기본적으로 두 가지 질문입니다.

  1. 전혀 허용됩니까?
  2. 그렇다면 다른 함수 내에서 함수를 어떻게 사용합니까? exec (), eval () 또는 이와 비슷한 것을 사용해야합니까? 그들을 엉망으로 만들 필요가 없었습니다.

BTW, extraArgs는 anotherfunc의 인수 목록 / 튜플입니다.


답변:


138

Python 함수가 다른 함수의 인수가 될 수 있습니까?

예.

def myfunc(anotherfunc, extraArgs):
    anotherfunc(*extraArgs)

더 구체적으로 ... 다양한 주장으로 ...

>>> def x(a,b):
...     print "param 1 %s param 2 %s"%(a,b)
...
>>> def y(z,t):
...     z(*t)
...
>>> y(x,("hello","manuel"))
param 1 hello param 2 manuel
>>>

extraArgs도 함수가 될 수 있습니까? 그렇다면 어떻게 부르나요?
Aysennoussi 2015

@sekai 예, extraArgs도 함수가 될 수 있습니다.
Manuel Salvadores

3
이 문서는 어디에 있습니까?
4dc0

32

여기에 사용하는 또 다른 방법 *args, (선택도 등) **kwargs:

def a(x, y):
  print x, y

def b(other, function, *args, **kwargs):
  function(*args, **kwargs)
  print other

b('world', a, 'hello', 'dude')

산출

hello dude
world

주의 function, *args, **kwargs가이 순서대로하고 함수를 호출 함수의 마지막 인수해야합니다.


3
* args 및 ** kwargs에 대한 자세한 정보는 여기에서 찾을 수 있습니다. pythontips.com/2013/08/04/args-and-kwargs-in-python-explained
Pipo


4

물론 이것이 파이썬이 첫 번째 매개 변수가 함수 인 다음 메서드를 구현하는 이유입니다.

  • map (function, iterable, ...)-iterable의 모든 항목에 함수를 적용하고 결과 목록을 반환합니다.
  • filter (function, iterable)-함수가 true를 반환하는 iterable 요소에서 목록을 구성합니다.
  • reduce (function, iterable [, initializer])-두 인수의 함수를 반복 가능한 항목에 왼쪽에서 오른쪽으로 누적 적용하여 반복 가능한 값을 단일 값으로 줄입니다.
  • 람다

2
  1. 예, 허용됩니다.
  2. 다른 것과 마찬가지로 함수를 사용합니다. anotherfunc(*extraArgs)

2
  1. 예. 입력 인수에 함수 호출을 포함하면 한 번에 두 개 이상의 함수를 호출 할 수 있습니다.

예를 들면 :

def anotherfunc(inputarg1, inputarg2):
    pass
def myfunc(func = anotherfunc):
    print func

myfunc를 호출하면 다음을 수행합니다.

myfunc(anotherfunc(inputarg1, inputarg2))

이것은 anotherfunc의 반환 값을 인쇄합니다.

도움이 되었기를 바랍니다!


2

함수 내부 함수 : 함수를 매개 변수로도 사용할 수 있습니다.

즉, 함수의 출력이 객체에 대한 참조라고 말할 수 있습니다. 아래처럼 내부 함수의 출력이 어떻게 외부 함수를 참조하는지 아래를 참조하세요.

def out_func(a):

  def in_func(b):
       print(a + b + b + 3)
  return in_func

obj = out_func(1)
print(obj(5))

결과는 .. 14

도움이 되었기를 바랍니다.


1
def x(a):
    print(a)
    return a

def y(a):
    return a

y(x(1))

2
답변에 몇 가지 설명을 추가하는 것을 고려하십시오.
HMD

여기서는 함수를 인수로 전달하지 않고 대신 반환 값을 전달합니다.
Bob Bobster

1
def x(a):
    print(a)
    return a

def y(func_to_run, a):
    return func_to_run(a)

y(x, 1)

더 적절한 샘플이라고 생각합니다. 이제 내가 궁금한 것은 다른 함수에 대한 인수 제출 내에서 사용할 함수를 코딩하는 방법이 있는지입니다. 나는 C ++에 있다고 믿지만 파이썬에는 확실하지 않습니다.


1

데코레이터 는 프로그래머가 함수를 인수로 전달할 수 있고 다른 함수 내에서 함수를 정의 할 수 있기 때문에 Python에서 매우 강력합니다.

def decorator(func):
      def insideFunction():
        print("This is inside function before execution")
        func()
      return insideFunction

def func():
    print("I am argument function")

func_obj = decorator(func) 
func_obj()

산출

  • 이것은 실행 전 함수 내부입니다.
  • 나는 인수 함수입니다
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.