입력 값 중 하나에 기본 입력 값을 적용 할 수 있습니까? 나는 이것을 시도했다 :사전의 다른 값에 따라 파이썬 사전의 값을 변경하십시오.
def getHigh(pricedata, start=min(pricedata), end=max(pricedata)):
## do something
pricataata가 아직 정의되지 않았기 때문에 작동하지 않는다.
입력 값 중 하나에 기본 입력 값을 적용 할 수 있습니까? 나는 이것을 시도했다 :사전의 다른 값에 따라 파이썬 사전의 값을 변경하십시오.
def getHigh(pricedata, start=min(pricedata), end=max(pricedata)):
## do something
pricataata가 아직 정의되지 않았기 때문에 작동하지 않는다.
계속 그것은 간단 :
def getHigh(pricedata, start=None, end=None):
start = min(pricedata) if start is None else start
end = max(pricedata) if end is None else end
질문 당신이 일을하는 두 가지 방법 : ...
def getHigh(pricedata, start=None, end=None):
if start is None:
start = min(pricedata)
if end is None:
end = max(pricedata)
하고, 당신이 할 수있는 일반적인 경우
def getHigh(pricedata, **kwargs):
start = kwargs.get("start", min(pricedata))
end = kwargs.get("end",max(pricedata))
두 번째 솔루션의 문제점은 함수가 명명 된 인수를 허용하고 사용되지 않으면 불평하지 않는다는 것입니다. .get() 대신 .pop()을 사용하고 dict가 비어 있는지 확인하십시오. – yak
글쎄, 이름있는 주장을 받아들이는 것은 사실이지만, 왜 그것이 문제를 야기하는지는 모르겠다. 일반적으로 나는 ** kwargs를 넘겨 주면 될 것이라고 생각할 수있다. 다른 기능에 연결하고, 당신은 그 전화를 보호하려고했다). 네임 스페이스를 오염시키지 않으며 무시하는 것은 안전합니다. 나는이 문제의 원인이 무엇인지 궁금 할 것입니다. – Nate
키워드 인수를 사용할 때의 한 가지 문제점은'help()'와 다른 자동화 된 문서 도구가 함수가 받아들이는 인수를 알려주지 않는다는 것입니다. 이것은 큰 문제 일 수도 있고 그렇지 않을 수도 있습니다. 또한 필요하지 않은 경우 선택적 매개 변수를 키워드 인수로 전달해야합니다. – kindall
을 None
을 사용하여이 작업을 수행하고 테스트하십시오.
def getHigh(pricedata, start=float("-inf"), end=float("+inf")):
# consider only items between start and end, inclusive
pricedata = [datum for datum in pricedata if start <= datum <= end]
내가 하나를 수행 결코 추천 : 당신이 범위를 설정하는, 당신은 가능한 모든 값을 포함 기본값을 사용할 수있는 범위의 항목 만 처리됩니다 특별한 경우
함수 인수 안에있는 것과 같은 고급 고급 함수가 아니라 함수 본문에서 제대로 정의 할 수 있습니다. –
답변 해 주셔서 감사합니다. 그들은 정말 큰 도움이되었습니다. 아마도 평범하고 단순한 대답에 충실하는 데 가장 좋은 방법 일 것입니다. – Randomtheories