2013-12-08 2 views
0

함수를 파이썬 __init__ 메서드의 매개 변수로 사용할 수 있습니까?은 파이썬에서 생성자 매개 변수로 사용됩니다.

내가하려는 것은 퍼셉트론 및 로지스틱 회귀 학습 알고리즘에 대한 클래스를 작성하는 것입니다. 트레이닝 함수는 매우 유사하고 예측에 사용되는 함수 만 다르므로이 함수를 생성시 지정할 수 있어야합니다.

나는이 질문이 전에 물어 보지 않았 으면 좋겠다. (나는 찾았으며, 아무것도 찾지 못했고, 아마도 잘못된 주제를 찾고있다.) 좋은 예가 될 것입니다. 나는 lambda에 익숙하지 않으므로 고급 파이썬 기능에 대한 정당성을 제시하십시오. 감사!

답변

4

예. 함수는 파이썬에서 제일 수준의 객체이므로, __init__을 포함하여 매개 변수로 원하는 모든 함수에 함수를 전달할 수 있습니다.

def a(): 
    print("Hello!") 

def b(fun): 
    print("running fun") 
    fun() 
    print("all done") 

b(a) # prints "running fun", then "Hello!", then "all done". 

당신은 다른 변수처럼 클래스에 저장할 수 있습니다 :

class c(object): 
    def __init__(self, fun): 
     self.fun = fun 
     self.fun() 

lambda 함수를 작성하는 또 다른 방법, 변수에 저장하지 않고. 함수를 즉석에서 정의 할 때 사용할 수 있습니다. 예 :

def d(fun, num): 
    return fun(num) 

def e(x): 
    return x**2 

d(lambda x: x**2, 7) # Returns 49 
d(e) # Also returns 49 
1

예, 함수는 1 급 개체이므로 인수로 전달할 수 있습니다.

짧은 데모 : 다음, 새 이름 barfoo을 할당하는 방법

>>> def foo(): print 'foo!' 
... 
>>> bar = foo 
>>> bar() 
foo! 
>>> def ham(eggs): 
...  eggs() 
... 
>>> ham(bar) 
foo! 

주 모두 bar에서 호출하고 매개 변수 egg이 함수로 호출 된 다른 기능으로 통과시켰다.

람다는 함수 객체를 만드는 데 필요한 짧은 형식의 표기법입니다.

>>> baz = lambda: 'baz' 
>>> baz() 
'baz' 
>>> baz 
<function <lambda> at 0x10f15c7d0> 
>>> foo 
<function foo at 0x10f15c6e0> 

baz 람다 모두와 이전 foo 기능 함수 객체되어 파이썬의 관점에서, 약간의 차이가있다.

관련 문제