일부 데이터를 미리 불러오고 싶은 튜플이 있습니다. 현재 내가하고있는 방식은 다음과 같습니다. 본질적으로, 나는 새로운 함수의 목록을 만들고, 한 번에 하나씩 람다 함수를 추가 한 다음 튜플로 재 변환한다. 그러나 코드의 다른 부분에서 이러한 함수를 사용하면 모든 함수가 코드의 마지막 코드 인 것처럼 작동합니다. 여기 파이썬에서 람다 함수 목록 초기화하기
def newfuncs(data, funcs):
newfuncs = []
for f in funcs:
newf = lambda x: f(x, data)
newfuncs.append(newf)
return tuple(newfuncs)
문제
funcs = (lambda x, y: x + y, lambda a, b: a - b)
funcs = newfuncs(10, funcs)
print(funcs[0](5))
print(funcs[1](5))
간단한 예이고 I는 숫자 (15)는 그 후, 인쇄 기대 -5. 그러나이 코드는 숫자 -5를 두 번 인쇄합니다. 왜 이런 일이 일어나는 지 이해할 수 있다면 누구나 이해할 수있을 것입니다. 감사!
사이드 노트 : 파이썬 3을 사용하고 있으며 범위가 지정된 기본 인수 방식을 사용하는 경우 이러한 인수를 키워드 전용으로 설정하는 것이 좋습니다. 따라서 실수로 추가 위치 매개 변수를 전달해도 자동으로 경계를 덮어 쓰지는 않습니다 값 (이 경우에는'f'라는 이름을 명시 적으로 키워드 인수로 전달함으로써 만 변경할 수 있습니다). 차이점은'lambda x, f = f :'를'lambda x, *, f = f :'로 변경하는 것인데,'*'(이름 없음)은 모든 인수를 키워드 전용으로 만든다. – ShadowRanger
@ShadowRanger 아주 좋았어, 고마워. –