迭代一个迭代器或一个元素

2024-09-26 22:10:03 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下函数:

def sum(summands)
    s = 0
    for a in summands:
        s = a + s

用户可以用列表sum([1, 2, 3])调用它,但是如果您也可以用数字sum(5)直接调用它,那就很方便了。(其实不是数字,只是一个简单的例子。)

我可以发明一个函数:

def make_iterable(x):
    # returns x if x is iterable, returns [x] if x is not iterable

但是有没有一种更短的、内置的方法让一个元素变得可移植?


Tags: 函数用户in列表formakeifis
3条回答

这个怎么样。你知道吗

def sum(summands)
    s = 0

    try:
        iter(summands)
    except TypeError:
        return summands

    for a in summands:
        s = a + s
    return s

或者,如果您想使用您提出的shell函数,您可以将try:except:拉入make_iterable

Python 2.x版:

def make_iterable(x):
    try:
        iter(x)
    except TypeError:
        x=[x]
    return x

Python 3.x版:

def make_iterable(x):
    try: yield from x
    except TypeError: yield x

然后算上总数

def sum(summands)
    s = 0

    summands = make_iterable(summands)

    for a in summands:
        s = a + s
    return s

您可以在函数内部检查它是否可iterable,如果不可iterable,则将其包装在一个列表中。我相信集合。可编辑这是一个很好的方法:

import collections

if isinstance(summands, collections.Iterable):
    tmp = summands
else:
    tmp = [summands]

这就是你所需要的

def sum(summands)
s = 0
summands = summands if isinstance(summands, list) else [summands]
for a in summands:
    s = a + s

相关问题 更多 >

    热门问题