, 나는사용
'app_date': lambda *a: time.strftime('%Y-%m-%d')
내가 아는 다음 코드 조각을 람다 is.My 질문 왜 사용하는 람다? 왜 그냥
무엇 발견'app_date': time.strftime('%Y-%m-%d')
, 나는사용
'app_date': lambda *a: time.strftime('%Y-%m-%d')
내가 아는 다음 코드 조각을 람다 is.My 질문 왜 사용하는 람다? 왜 그냥
무엇 발견'app_date': time.strftime('%Y-%m-%d')
'app_date': time.strftime('%Y-%m-%d')
은 즉시 time.strftime
을 평가합니다. 그것을 람다로 감싸는 것에 의해, 그 실행은 나중 (람다를 호출 할 때)까지 연기된다. 대충 말하자면 "내가 이것을 정의한 때"와 "내가 이것을 사용할 때"의 차이가 있습니다. 봐 : 나는 각 d['a'], d['b']()
사이의 경과 시간을 허용
>>> d = {'a': time.time(), 'b': lambda: time.time()}
>>> d['a'], d['b']()
(1346913545.049, 1346913552.409)
>>> d['a'], d['b']()
(1346913545.049, 1346913554.518)
>>> d['a'], d['b']()
(1346913545.049, 1346913566.08)
. d['a']
은 항상 동일합니다. 즉, 내가 d
으로 정의한 시간입니다. d['b']
은 함수입니다. d['b']()
(괄호 포함)은 각 호출 시마다 새로운 시간을 평가하는 함수를 호출하므로 사용법마다 다릅니다.
또한이 항목은 lambda
에 대한 특별한 내용이 아닙니다. 람다는 다른 모든 기능과 동일합니다. 나는 같은 것을 할 수있다 :
def func():
return time.time()
d = {'a': time.time(), 'b': func}
사실 OpenERP 모델의 기본값은 일반적인 함정이다. 대부분의 OpenERP 기본값은 단순한 리터럴 문자열/정수/부울 일 수 있지만 날짜 시간 값은 호출 가능으로 감싸 야합니다. 그렇지 않으면 기본 시간대는 항상 현재 시간이 아닌 서버 시작 날짜와 시간이됩니다. – odony
http : //en.wikipedia.org/wiki/Thunk_(functional_programming). 필자는 성능에 영감을 얻은 게으른 평가의 맥락에서 "썽크 (thunk)"라는 용어를 들었을 뿐이지 만이 시간 관련 예제에도 적용될 수 있습니다. 아무도 몰라? – stalepretzel