Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在for循环中保存函数调用的值_Python - Fatal编程技术网

Python 在for循环中保存函数调用的值

Python 在for循环中保存函数调用的值,python,Python,我想将函数调用的值保存在txt文件中,但得到的是typeerror:需要一个字符缓冲区对象 def printme( x ): "Function f(x) = x(x+2)" print x*(x+2) return myfile = open('xyz.txt', 'w') for w in b: myfile.write('%d' (printme(w))) myfile.close() 您发布的代码至少有四个问题,没有一个会显示您实际

我想将函数调用的值保存在txt文件中,但得到的是typeerror:需要一个字符缓冲区对象

def printme( x ):
    "Function f(x) = x(x+2)"
    print x*(x+2)
    return

myfile = open('xyz.txt', 'w')
    for w in b:
        myfile.write('%d' (printme(w)))

myfile.close()

您发布的代码至少有四个问题,没有一个会显示您实际看到的错误

首先,有一个缩进错误:

你不能随意缩进你想要的代码;for语句紧跟赋值语句,myfile.write调用应该在for循环中。因此:

myfile = open('xyz.txt', 'w')
for w in b:
    myfile.write('%d' (printme(w)))
如果您修复了这个错误,您的下一个错误将是TypeError,但它将是因为'str'对象是不可调用的,与字符缓冲区对象无关

在Python中,任何形式的foo-bar都是一个函数调用,它试图像调用函数一样调用foo,而bar是它唯一的参数。所以,这个表达式:

'%d' (printme(w))
…尝试将字符串“%d”作为函数调用,并将printmew的结果作为其唯一参数传递。这显然行不通,因为字符串不像函数那样可调用。因此有例外

您可能想在那里使用%运算符,如下所示:

'%d' % (printme(w))
这很接近,但仍然不完全正确,因为printmew不是一个值的元组。元组是由逗号而不是括号创建的,因此一个值的元组中必须有一个逗号。因此:

'%d' % (printme(w),)
这里实际上不需要元组,因为%对单个值有特殊处理。但是,如果您试图创建一个元组,那么您应该正确地使用它,而不是错误地使用它,并且让您的代码无论如何都能正常工作

现在我们接近了,但我们有另一个问题:printme不返回数字,它打印一个数字,然后不返回任何数字。这是从任何不返回不同内容的函数中获得的默认值。因此,%运算符将给出另一个TypeError,这一次表示“%d格式:需要一个数字,而不是NoneType

要解决此问题,您需要返回该值,而不是打印该值,或者在打印该值的同时返回该值:

def printme( x ):
    "Function f(x) = x(x+2)"
    return x*(x+2)
当然,名为printme的函数返回一个值有点误导,所以您可能希望在此时重命名它

如果你能解决这个问题,那么一切都能正常工作。表示任何地方都需要字符缓冲区对象时不存在TypeError

最有可能的情况是,在实际代码中,您试图写入从printme返回的值,而不首先使用%运算符或其他方式将其格式化为字符串。例如,如果您这样做:

myfile.write(printme(w))
…如果没有解决上一个问题,则尝试写入None,如果解决了,则尝试写入某个数字,这两个数字都不是字符串或其他字符缓冲区对象,因此出现错误

要解决这个问题,只需使用您向我们展示的代码,而不是不同的代码

总而言之,这里有一个工作代码,它完成了您显然想要做的事情:

def printme( x ):
    "Function f(x) = x(x+2)"
    return x*(x+2)

myfile = open('xyz.txt', 'w')
for w in b:
    myfile.write('%d' % (printme(w),))

myfile.close()

我想这就是你想要的

def printme( x ):
    "Function f(x) = x(x+2)"
    return x*(x+2)

b = [1,2,3,4,5]

myfile = open('xyz.txt', 'w')

for w in b:
    myfile.write(str(printme(w)))
    myfile.write("\n")

# !!! EDIT !!!
myfile.close()

请发布带有回溯的实际错误,而不是它的描述。您只能将字符串写入文件。除此之外,printme函数不返回'anything',因此您试图在此时将'nothing'写入文件。首先,提示被破坏。请使用myfile.write{}.FormatPrintMe。您向我们展示的代码没有演示您描述的问题。它实际上引发了一个TypeError:“str”对象不可调用。这是因为其他任何东西都是作为函数对任何东西的调用,所以“%d”printmew是作为函数对“%d”的调用,这毫无意义。@GrijeshChauhan:您建议的代码不起作用。首先,您可能是指格式而不是格式化。第二,如果不添加{}占位符,则无法使用格式。您更改了他的代码尝试的输出格式。如果他不想在数字之间留空格,您会认为他希望在数字后面加一个换行符,而实际上由于忘记关闭文件而使代码变得更糟,而且没有解释你对他的代码所做的多次修改…啊!我错过了副本的最后一行:P对不起。关于\n我猜他会想要它的。这应该可以做到-thx。但是我的txt文件不显示任何特征线!我猜对了。如果你愿意,你可以在一行中完成。我已经分开了,因为这是我的添加。啊哈,对不起!!我使用的是linux,不需要\r:DWorks perf。-谢谢。如果我想在我正在迭代的列表b中的每个数字之间添加特征线,是否应将其添加到for循环中?@user2128383:是。因为您已经在使用%-格式,所以显而易见的方法是将其添加到格式字符串:myfile.write“%d\n”%printmew,。如果你想把它单独写出来,当然你可以这样做。
def printme( x ):
    "Function f(x) = x(x+2)"
    return x*(x+2)

b = [1,2,3,4,5]

myfile = open('xyz.txt', 'w')

for w in b:
    myfile.write(str(printme(w)))
    myfile.write("\n")

# !!! EDIT !!!
myfile.close()