1
기본값은 정의시 구문 분석됩니다. 그래서 이것은 작동하지 않을 것이다자체를 기본 인수로 사용하는 함수
def f(x, func = f):
if x<1:
return x
else:
return x + func(x-1)
나는 길을 발견했다. 좀 더미 기능
def a(x):
return x
def f(x, func=a):
if x < 1:
return x
else:
return x + func(x-1)
시작 그리고
f.__defaults__ = (f,)
분명히 어색 실행합니다. 다른 방법이 있습니까? 아니면이 나쁜 파이썬입니까? 그것이 나쁘다면 왜 설명 할 수 있니? 어디에서 깰 수 있을까요? 어떤 경우
, 그것은 작동합니다
def f(x, func=None):
if func is None:
func = f
if x < 1:
return x
else:
return x + func(x-1)
그것은을 구현하는 파이썬에서 꽤 표준 관용구는 다음과 같습니다 안드레아 Corbellini의 제안에 정교하게
In [99]: f(10)
Out[99]: 55
In [100]: f(10, f)
Out[100]: 55
In [101]: f(10, lambda x : 2*x)
Out[101]: 28
왜 '없음'을 사용하지 않으시겠습니까? –
당신은 왜 그것을하고 싶습니까? XY 문제처럼 냄새가납니다. 너 정말로 무엇을하려고하는거야? – DeepSpace
이것은 재귀와 같습니다. 함수에서'func'을'f'로 대체 할 수 있습니다. –