2014-04-01 2 views
2

파이썬에서 다음 JavaScript 예제와 비슷한 방식으로 함수를 정의 할 수 있습니까? 나는 함수의 사전을 가지고 싶습니다 이후JavaScript에서와 같이 함수를 정의 할 수 있습니까?

var func = function(param1, param2) { 
    return param1*param2; 
}; 

나는 물어, 나는 먼저 모든 함수를 정의하고 사전에 넣고 싶지 않을 것이다.

다른 사전을 매개 변수로 사용하고 해당 키를 반복하며 다른 사전과 일치하는 키를 찾으면 해당 함수를 해당 값으로 호출하기 때문에 함수 사전을 원한다 매개 변수로 두 번째 사전의. 좋아요 :

def process_dict(d): 
    for k, v in d.items(): 
     if k in function_dict: 
      function_dict[k](v) 

그런 일을 성취하기위한 더 파이썬적인 방법이 있습니까?

+2

기능이 얼마나 복잡한가요? 귀하의 자바 스크립트 예제는 파이썬에서 lambda로 표현할 수 있습니다 :'lambda p1, p2 : p1 * p2' –

+0

그래서 표현식 (사전 리터럴/생성자) 안에 문장이 필요합니까? 파이썬에서는 불가능합니다. – zch

+0

@zch 아니, 그냥 빈 dict로 시작한 다음 javascript 예제 에서처럼 변수 할당을 수행합니다. 단, 왼쪽면은'function_dict [ "key"]'입니다. –

답변

2

함수를 포함하기 위해 사전 대신 클래스 (정적 메서드 사용)를 사용하십시오. 클래스 메소드 어쨌든 간단한 기능을하기 때문에

class MyFuncs: 

    @staticmethod 
    def func(a, b): 
     return a * b 

    # ... define other functions 

파이썬 3에서는 실제로 @staticmethod 필요하지 않습니다. 이제

가 반복하기 :

def process_dict(d): 
    for k, v in d.items(): 
     getattr(MyFuncs, k, lambda *x: None)(*v) 

N.B. 함수에 모듈을 사용하고 import을 사용할 수도 있습니다.

+0

예, 이것은 내가 찾고 있었던 것입니다, 감사합니다! –

관련 문제