Python 3:为什么我在使用' return'时只返回一个值。

时间:2017-11-09 17:11:54

标签: python python-3.x unit-testing return pytest

我试图将return语句添加到我的代码中,以便我可以使用pytest然后检查输出是否符合预期(至少我认为这是如何工作的,我第一次使用pytest )。

这是我的代码:

import itertools


def lists(*usrin):

    # STRINGS IN MULTIPLE LISTS

    temp = set(usrin[0])
    for sub in usrin[1:]:
        res = temp.intersection(sub)
        print("Strings that appear in more than one list: ", ', ' .join(res))
        return res


# UNIQUE STRING COUNT

    nlst = [set(sum(usrin, []))]
    alist = list(itertools.chain.from_iterable(nlst))
    print("Number of unique strings: ", len(alist))
    return alist


# TOTAL STRINGS PROCESSED

    count = 0
    for arg in usrin:
        count += (len(arg))
    print("Total number of strings processed: ", count)
    return count


    # CALL WITH INPUT

def main():

    lists(['g', 'gh', 'ghj', 'g'], ['j', 'ju', 'gh', 'gk', 'gn'])

if __name__ == '__main__':
    main()

我的预期输出如下(如果我删除"返回"语句,我会得到):

Strings that appear in more than one list:  gh
Number of unique strings:  7
Total number of strings processed:  9

然而,对于return语句,我最终只得到:

Strings that appear in more than one list:  gh

我做错了什么?这是处理输出的正确方法,以便在程序运行时它为用户输出一些东西,但也可以进行测试以确保输出符合预期吗?

感谢您的阅读。

2 个答案:

答案 0 :(得分:0)

在您的第一个for循环中,您将res返回res = temp.intersection(sub)。这会导致函数暂停执行并将控制权返回给调用者 - 在这种情况下,lists()返回并放弃对调用它的main()函数的控制。

如果您只想在终端中显示内容,请使用print(或print())而不是return

当需要在另一个函数中使用一个函数的输出时,使用

return

答案 1 :(得分:0)

你在一个功能里面。第一次返回使得以下所有语句都无法访问。

您应该将字符串存储在临时变量中,然后在列表函数的末尾返回整个字符串。