python에서 언제 괄호를 써야 하나요

조회수 2540회

string.ascii_lowercase, key = text.count부분에서 왜 괄호가 없어야 정상 작동하는지 모르겠습니다

지금까지 배웠을 땐 text.count(변수), text.lower()처럼 변수를 넣든 안넣든 괄호가 반드시 필요하다고 알고 있었는데 여기선 오히려 괄호를 넣으면 에러가 발생하네요. 어떻게 돌아가는 건가요?

import string
text = text.lower()
return max(string.ascii_lowercase, key = text.count)

1 답변

  • 좋아요

    3

    싫어요
    채택 취소하기

    안녕하세요 !

    일단 괄호는 호출할 때 필요합니다.

    괄호 없이 사용하면 그냥 객체일 뿐이죠 (함수도 객체이니깐요!)

    괄호없이 객체를 넘기는 경우도 있습니다

    import string
    text = 'Hello'.lower()  
    
    print(string.ascii_lowercase) # 'abcdefghijk..'
    print(text.count('l')) #hello는 l이 두개니깐 2가 찍히고요
    print(max('abc')) # c가 찍힙니다
    
    print(max('ael', key=text.count)) 
    # a 가 먼저 들어가서 text.count('a') 0개
    # e 는 text.count('e') 이니깐 1개
    # l 은 text.count('l) 해보면 2 개
    # 즉 max(0, 1, 2)는 2는 l 이니깐 l 이 최종적으로 리턴됩니다
    print(max(string.ascii_lowercase, key=text.count))
    # 이것도 l이  나오겠죠? (2가 최대값이여서)
    

    key 랑 같이 쓰는 max() 함수에서 만약 함수객체를 받는대신 호출을 해버리면, 순차적으로 여러번 처리할수가 없겠죠 ㅠㅠ(한번 호출하고 끝나니깐요..)

    함수객체를 넘기면 이미만들어진 max함수에서 넘어온 함수객체를 괄호()로 여러번 호출 해서 중간결과값을 구하고 그중 진짜 max값을 찾아냅니다

    이런식으로 사용합니다

    1

    def str_length(s):
        return len(s)
    
    print(max('a', 'abc', 'ab', key=str_length)) #3이 아니라 'abc'가 출력됩니다!
    

    2

    class Data:
        id = 0
    
        def __init__(self, i):
            self.id = i
    
        def __str__(self):
            return 'Data[%s]' % self.id
    
    
    def get_data_id(data):
        return data.id
    
    list_objects = [Data(1), Data(2), Data(-10)]
    print(max(list_objects, key=get_data_id))
    

    수고하세요

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)