函数使用 print 进行迭代,但不使用 return 进行迭代

2024-01-06

Python 新手,运行 2.7。

我正在尝试创建一个程序,该程序使用函数生成文本,然后将函数生成的文本输出到文件。

当只是在 powershell 中打印函数时(如下所示:http://codepad.org/KftHaO6x http://codepad.org/KftHaO6x),它会按照我的意愿进行迭代:

def writecode (q, a, b, c):
    while b < q:
        b = b + 1
        print "v%d_%d_%d = pairwise (caps[%d],sals[%d],poss[%d],poss[%d],poss[%d],pos_range)" %(a,b,c,a,a,a,b,c)
        print "votes%d_%d.append(v%d_%d_%d)" % (b,c,a,b,c,)
        print "v%d_%d_%d = pairwise (caps[%d],sals[%d],poss[%d],poss[%d],poss[%d],pos_range)" %(a,c,b,a,a,a,c,b)
        print "votes%d_%d.append(v%d_%d_%d)" % (c,b,a,c,b)

writecode (5,1,0,4)

当尝试将函数输出到文件中时(如下所示:http://codepad.org/8GJpp9QY http://codepad.org/8GJpp9QY),它只给出 1 个值,即不迭代:

def writecode (q, a, b, c):
    while b < q:
        b = b + 1
        data_to_write = "v%d_%d_%d = pairwise (caps[%d],sals[%d],poss[%d],poss[%d],poss[%d],pos_range)" %(a,b,c,a,a,a,b,c)
        data_to_write_two = "votes%d_%d.append(v%d_%d_%d)" % (b,c,a,b,c,)
        data_to_write_three = "v%d_%d_%d = pairwise (caps[%d],sals[%d],poss[%d],poss[%d],poss[%d],pos_range)" %(a,c,b,a,a,a,c,b)
        data_to_write_four = "votes%d_%d.append(v%d_%d_%d)" % (c,b,a,c,b)
        return data_to_write
        return data_to_write_two
        return data_to_write_three
        return data_to_write_four

x = writecode (5,1,0,4)

out_file = open("code.txt", "a")
out_file.write(x)
out_file.close()

为什么会这样,如何使输出函数迭代(就像 print 一样)?


你的问题是你只能return一次来自函数:

def test():
    return 1
    return 2

x = test()
# x is now 1

你会想要使用yield或返回值的元组:

def this_will_work():
    yield 1
    yield 2

x = list(this_will_work()) # See below for why we are using list
# x is now [1, 2]

def so_will_this:
    return 1, 2

x = so_will_this()
# x is now (1, 2)

Using yield将你的函数变成generator http://docs.python.org/tutorial/classes.html#generators可以迭代 - 如果您只对可以使用的所有最终值感兴趣list将生成器转换为生成器生成的所有值的列表。或者你可以使用循环它for ... in.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

函数使用 print 进行迭代,但不使用 return 进行迭代 的相关文章

随机推荐