2011-12-12 3 views
2

입력 값 중 하나에 기본 입력 값을 적용 할 수 있습니까? 나는 이것을 시도했다 :사전의 다른 값에 따라 파이썬 사전의 값을 변경하십시오.

def getHigh(pricedata, start=min(pricedata), end=max(pricedata)): 
    ## do something 

pricataata가 아직 정의되지 않았기 때문에 작동하지 않는다.

+3

내가 하나를 수행 결코 추천 : 당신이 범위를 설정하는, 당신은 가능한 모든 값을 포함 기본값을 사용할 수있는 범위의 항목 만 처리됩니다 특별한 경우

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 

함수 인수 안에있는 것과 같은 고급 고급 함수가 아니라 함수 본문에서 제대로 정의 할 수 있습니다. –

+1

답변 해 주셔서 감사합니다. 그들은 정말 큰 도움이되었습니다. 아마도 평범하고 단순한 대답에 충실하는 데 가장 좋은 방법 일 것입니다. – Randomtheories

답변

6

계속 그것은 간단 :

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 
2

질문 당신이 일을하는 두 가지 방법 : ...

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)) 
+0

두 번째 솔루션의 문제점은 함수가 명명 된 인수를 허용하고 사용되지 않으면 불평하지 않는다는 것입니다. .get() 대신 .pop()을 사용하고 dict가 비어 있는지 확인하십시오. – yak

+0

글쎄, 이름있는 주장을 받아들이는 것은 사실이지만, 왜 그것이 문제를 야기하는지는 모르겠다. 일반적으로 나는 ** kwargs를 넘겨 주면 될 것이라고 생각할 수있다. 다른 기능에 연결하고, 당신은 그 전화를 보호하려고했다). 네임 스페이스를 오염시키지 않으며 무시하는 것은 안전합니다. 나는이 문제의 원인이 무엇인지 궁금 할 것입니다. – Nate

+0

키워드 인수를 사용할 때의 한 가지 문제점은'help()'와 다른 자동화 된 문서 도구가 함수가 받아들이는 인수를 알려주지 않는다는 것입니다. 이것은 큰 문제 일 수도 있고 그렇지 않을 수도 있습니다. 또한 필요하지 않은 경우 선택적 매개 변수를 키워드 인수로 전달해야합니다. – kindall

3

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] 
관련 문제