我是一个 Python 新手,使用的是 2.7 版本。
我正在尝试创建一个程序,该程序使用函数生成文本,然后将函数生成的文本输出到文件中。
当在 PowerShell 中仅打印函数时(像这样: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),它只给出一个值,即不进行迭代。
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
语句会终止函数的执行(就像大多数(或全部?)编程语言一样):http://docs.python.org/reference/simple_stmts.html#the-return-statement。 - Felix Klingvotes#_#
列表,可以将其制成单个列表或字典数据结构,通过votes [#] [#]
访问。一般而言,当你发现自己需要编写大量几乎相同的代码片段时,询问“这些每个实例的通用情况是什么?”通常很有用。这通常会让您设计一个函数或方法来处理它们,如果提供了正确的数据,则可以通过调用或存储对象属性的参数来处理它们。 - martineau