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 답변
-
안녕하세요 !
일단 괄호는 호출할 때 필요합니다.
괄호 없이 사용하면 그냥 객체일 뿐이죠 (함수도 객체이니깐요!)
괄호없이 객체를 넘기는 경우도 있습니다
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))
수고하세요
댓글 입력