합계가 올바른 0 값을 자동으로 가져올 수없는 이유는 무엇입니까?합계 시작 값이 반복 가능한 값이 0이 아닌 이유는 무엇입니까?
>>> def sum(s, start=None):
it = iter(s)
n = next(it)
if start is None:
start = type(n)()
return n + __builtins__.sum(it, start)
>>> sum((['1'], ['2']))
['1', '2']
>>>
어쨌든 문자열을 가입하지 않는 합계는, 어쩌면 그것은 단지 다른 'summings'에 대한 적절한 방법을 사용하는 것이 좋습니다 것입니다 :
>>> sum((['1'], ['2']))
Traceback (most recent call last):
File "<pyshell#13>", line 1, in <module>
sum((['1'], ['2']))
TypeError: unsupported operand type(s) for +: 'int' and 'list'
>>> sum((['1'], ['2']), [])
['1', '2']
는 다음과 같이 구현하는 간단하다.
반면에 숫자로만 사용하려는 경우 sum_numbers
이 아닌 sum
을 명확하게 표시해야합니다.
편집 : 우리는 약간의 코드를 추가해야합니다 빈 순서를 처리 할 수있는 :
>> sum([])
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
sum([])
File "<pyshell#28>", line 3, in sum
n = next(it)
StopIteration
>>> def sum(s, start=None):
it = iter(s)
try:
n= next(it)
except:
return 0
if start is None:
start = type(n)()
return n + __builtins__.sum(it, start)
>>> sum([])
0
>>>
여기에 질문하는 것이 아닙니다. 당신은 파이썬에서 한 기능에 대한 개선을 제안하고 있습니다. StackOverflow가이를위한 잘못된 장소입니다. 파이썬 메일 링리스트에서이 제안을해야한다. 내 머리 꼭대기에서, 이것은 합리적인 제안처럼 보입니다. 기존 코드가 손상 될 수 있다고 생각하지 않습니다. – steveha
@steveha :이 제안은 실제로 기존 코드를 깨뜨릴 수 있지만 [이 코드는 다소 이상 할 것입니다] (https://gist.github.com/2919731). –
@steveha : (그러나이 반대론은 왜이 제안이 파이썬 아이디어에 쏟아 질지 이유가되지 않을 것입니다.) 인수 유형에서 결과 유형을 추론하는 것은 일반적으로 의문의 여지가 있으며 Guido는 이러한 종류의) –