반응형
다음을 고려하세요:
class objectTest():
def __init__(self,a):
self.value = a
def get_value(self):
return self.value
class execute():
def __init__(self):
a = objectTest(1)
b = objectTest(1)
print(a == b)
print(a.get_value() == b.get_value)
print(a.get_value() == b.get_value())
print(a.get_value == b.get_value)
if __name__ == '__main__':
execute = execute();
이 코드는
>>>
False
False
True
False
get_value가 함수라는 점을 감안할 때 실행이 중지되고 오류가 반환 될 것으로 예상하지만 그렇지 않습니다. 누군가 파이썬 인터프리터가 속성 오류를 발생시키는 대신 이런 종류의 구문을 허용하는 이유를 설명 할 수 있습니다. 제 경우에는 소중한 시간을 절약 할 수있었습니다.
해결 방법
언급했듯이 함수와 메서드는 일류 객체입니다. 끝에 괄호 (대괄호)를 넣어 호출 합니다. 그러나 파이썬이 왜 그렇게 할 수 있는지에 대한 더 많은 동기를 원하시는 것 같습니다. 함수가 일류인지 아닌지 왜 신경 써야할까요?
때로는 호출하고 싶지 않고 호출 가능 자체에 대한 참조를 전달하고 싶습니다.
from multiprocessing import Process
t = Process(target=my_long_running_function)
위의 뒤에 대괄호를 넣으면 메인 스레드에서 my_long_running_function
을 실행합니다. 거의 당신이 원했던 것! 새로운 프로세스에서 실행될 콜 러블에 대한 참조를 Process
에 제공하려고했습니다.
때로는 콜 러블을 지정하고 다른 것을 허용하고 싶을 때가 있습니다.
def do_something(s):
return s[::-1].upper()
map(do_something,['hey','what up','yo'])
Out[3]: ['YEH', 'PU TAHW', 'OY']
(이 경우 map
) 인수를 입력합니다.
아마도 당신은 콜 러블들을 컬렉션에 드롭하고 당신이 원하는 것을 동적으로 가져오고 싶을 것입니다.
from operator import *
str_ops = {'<':lt,'>':gt,'==':eq} # etc
op = str_ops.get(my_operator)
if op:
result = op(lhs,rhs)
위는 연산자의 문자열 표현을 실제 작업에 매핑하는 한 가지 방법입니다.
참조 페이지 https://stackoverflow.com/questions/21785933
반응형
'파이썬' 카테고리의 다른 글
파이썬 matplotlib Python의 설치 문제 (0) | 2020.12.22 |
---|---|
파이썬 sqlalchemy는 NULL이 아닙니다. (0) | 2020.12.22 |
파이썬 밀리 초가있는 epoch 시간을 datetime으로 변환 (0) | 2020.12.22 |
파이썬 PyCharm을 사용하여 Scrapy 프로젝트를 디버깅하는 방법 (0) | 2020.12.22 |
파이썬 내 파이썬 if 문이 작동하지 않는 이유는 무엇입니까? (0) | 2020.12.22 |
댓글