2012-09-07 1 views
1

여러 속성을 가진 사용자 정의 Python 객체 목록에서 함수를 반복하고 호출하는 방법이 있습니까? 엔트리라는 속성 이름과 나이가 있다고 가정 해 봅시다.파이썬 객체 목록을 통한 Map/Iterating

이러한 내가 즉,이 경우에도 유효한 경우 functools.partial()하지만 확실하지 않은 사용에 대한 생각

def func(name, age): 
    //do something 

def start(list_of_entries) 
    map(func, list_of_entries.name(), list_of_entries.age()) 
    //but obviously the .name and .age of the object, not the iterable 
    //these are the only two attributes of the class 

의 효과에 뭔가를 말할 수있다.

+0

'name' 및 func''에서'age'에 액세스하는 이유는 충분한 이유가되지인가? –

+0

왜 list_of_entries의 각 항목을 func()에 전달한 다음 전달한 객체를 통해 name/age에 액세스 할 수 있습니까? –

+0

계산 : "list_of_entries.name()"지도를 사용할 수 있습니다! –

답변

7

나는 당신이 람다 함수를 사용할 수 있습니다 가정 :

>>> def start(list_of_entries): 
...  map((lambda x:func(x.name,x.age)), list_of_entries) 

그러나 단지 루프?

>>> def start(list_of_entries): 
...  for x in list_of_entries: func(x.name, x.age) 

또는 사용하지 왜 FUNC의 결과가 필요한 경우 :

>>> def start(list_of_entries): 
...  return [func(x.name, x.age) for x in list_of_entries] 
+0

하지만 그 마지막 함수는 callables를 함수로 전달할 것이고, 여기서 OP는 값을 원한다고 가정 할 것이다. – jdi

+0

".name"과 ".age"는 속성이라고 가정했습니다. 그들이 호출 가능이라면, 예 (3 가지 예 모두에서) 호출해야합니다. OP의 예에서, 그는리스트에서 ".name()"을 호출하는데 이것은별로 의미가 없기 때문에 의사 코드로 사용했습니다. –

+0

OP는 "루프 사용하기"에서 질문 : – jdi

0

operator.attrgetter()를 사용하면 여러 속성을 지정할 수 있지만 명시 적 목록 이해는 더 좋습니다.

results = [f(e.name, e.age) for e in entries] 
+0

그냥 괄호로 만들면 생성기도 생성됩니다 - 느슨하게 평가하고 싶다면 좋을 것입니다 귀하의 목록에 항목이 필요합니다. – underrun

0

이름과 나이가 유일한 두 속성 인 경우 vars를 사용할 수 있습니다. 그렇지 않으면 ** kwargs를 함수에 추가하고 나머지는 무시하십시오.

def func(name, age, **kwargs): 
    //do something with name and age 


def start(list_of_entry): 
    map(lambda e: func(**vars(e)), list_of_entry)