1

코드 1 :정렬 된 키 인수는 어떻게 작동합니까?

>>> sorted("This is a test string from Andrew".split(), key=str.lower) 
    ['a', 'Andrew', 'from', 'is', 'string', 'test', 'This'] 

코드 2 :

코드 1
>>> student_tuples = [ 
...  ('john', 'A', 15), 
...  ('jane', 'B', 12), 
...  ('dave', 'B', 10), 
... ] 
>>> from operator import itemgetter, attrgetter 
>>> 
>>> sorted(student_tuples, key=itemgetter(2)) 
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] 

이유는, ()key=str.lower 생략하고 괄호가 포함 된 경우 오류를보고되지만, 코드 2 key=itemgetter(2)의에서 괄호는 보관됩니까?

답변

1

key에 대한 인수는 기능을 예상하며 sorted은 정렬 할 항목의 각 항목에 적용됩니다. key(item)의 결과는 정렬 과정에서 각 원본 item 대신에 서로 비교됩니다.

당신이이 같은 비트가 작동 상상할 수 : 항목은 xy,에 적용, 당신이 볼 수 있듯이

def sorted(thing_to_sort, key): 
    # 
    # ... lots of complicated stuff ... 
    # 
      if key(x) < key(y): 
       # do something 
      else: 
       # do something else 
    # 
    # ... lots more complicated stuff ... 
    # 
    return result 

, 괄호 () 함수에 keysorted 내부를 추가 thing_to_sort입니다.

첫 번째 예에서는 str.lower이 각각 xy에 적용되는 함수입니다.

itemgetter은 조금 다릅니다. 이 다른 함수을 반환하는 함수이고, 귀하의 예에서는 이고 다른 함수는이며 xy에 적용됩니다.

콘솔에서 itemgetter 어떻게 작동하는지 볼 수 있습니다

>>> from operator import itemgetter 
>>> item = ('john', 'A', 15) 
>>> func = itemgetter(2) 
>>> func(item) 
15 

"높은 순서"기능의 주위에 당신의 머리를 얻기 위해 조금 어려울 수 있습니다 처음에 (수락하거나 다른 기능을 반환 것들)하지만, 그것들은 많은 다른 작업에 매우 유용합니다. 그래서 편안함을 느낄 때까지 실험 해 볼 가치가 있습니다.

+1

맑은 설명, Piraeus에 감사드립니다! –

-1

방법에 약간에게 콘솔 주위 str.lower 냉동차를 파고 '낮은'STR 'str.lower() 인수를 필요로 어떻게 적, 및 str.lower()가 함수 인 객체의, 그래서 제대로은 str.lower("OH BOY") 것이다 작성하고 그것을 반환 oh boy 오류는 함수에 인수를 전달하지 않았지만 예상 한 오류 때문입니다.