Python 在另一个函数内调用函数将返回意外值,而直接调用第一个函数将返回预期值
我编写了多个函数,当我直接调用它们时,它们的结果与预期一致。这就是功能:Python 在另一个函数内调用函数将返回意外值,而直接调用第一个函数将返回预期值,python,function,Python,Function,我编写了多个函数,当我直接调用它们时,它们的结果与预期一致。这就是功能: def number_generator(): for number in range(1, 815+1): file = open('numbers.txt', 'a') file.write(f'{number}\n') file.close() def test(): file1 = open('file1.txt', 'a') file1.w
def number_generator():
for number in range(1, 815+1):
file = open('numbers.txt', 'a')
file.write(f'{number}\n')
file.close()
def test():
file1 = open('file1.txt', 'a')
file1.write(f'{query_generator()}{number_generator()}\'\n')
file1.close()
它可以毫无问题地写出从1到815的数字
但是当我在另一个函数中调用这个函数时,它会返回意外的值。这是另一个功能:
def number_generator():
for number in range(1, 815+1):
file = open('numbers.txt', 'a')
file.write(f'{number}\n')
file.close()
def test():
file1 = open('file1.txt', 'a')
file1.write(f'{query_generator()}{number_generator()}\'\n')
file1.close()
当前结果是none'
query\u generator
在815行中生成815次一次SQL查询,number\u generator
为每个我的网站产品的ID生成编号
但是当我在test
函数中使用它们时,我没有得到预期的值
到目前为止我所做的是删除了与number\u generator
和query\u generator
相关的文件
变量相关的行,并在这两行中添加了return
语句,但都不起作用
我的期望值如下:
UPDATE `tblpricing` SET `msetupfee` = '1'
UPDATE `tblpricing` SET `msetupfee` = '2'
UPDATE `tblpricing` SET `msetupfee` = '3'
我怎样才能到达它?您传递的函数不会将任何内容返回到f字符串中。您注意到您添加了一个
return
语句,但我假设它只是一个return
语句,后面没有任何其他内容,因为这仍然不起作用。请参阅此简单演示:
def add(a, b):
result = a+b
return
输出:
1 + 4 is None
为什么??因为add()
中没有返回值。如果我们将add()
更改为:
def add(a, b):
result = a+b
return result
输出为:
1 + 4 is 5
您没有显示您的query\u generator()
函数的外观,如果没有看到该函数,我们就不能说除了缺少返回值之外是否还有其他问题。这条线是你的罪魁祸首:
file1.write(f'{query_generator()}{number_generator()}\'\n')
number\u generator()
不返回任何内容,它只打开一个文件并将数字1写入815。要解决您的问题,请创建两个函数:一个用于写入文件,另一个用于读取文件。我建议用open()来实现,而不仅仅是open()
。此外,您当前的number\u generator()
打开一个文件,写入一行,然后关闭该文件815次,这可能是您不想要的。改为这样做:
def number_generator():
with open('numbers.txt', 'w') as file:
for number in range(1, 816):
file.write(f'{number}\n')
def get_numbers():
with open('numbers.txt', 'r') as file:
lines = [line.strip() for line in file]
return lines
def query_generator():
# logic for query generator here
def get_queries():
# get queries
# IMPORTANT: Return queries as a list
请注意,在get\u querys()
中,返回类型应为列表。这使得您可以轻松地同时迭代和比较查询和数字。
然后,您的函数可以如下所示:
def test():
# write queries and numbers
query_generator()
number_generator()
# read queries and numbers
queries = get_queries()
numbers = get_numbers()
# zip queries and numbers
lines = zip(queries, numbers)
# open file and write each line
with open('file1.txt', 'w') as file:
for line in lines:
comp_line = f'{line[0]} = {line[1]}\n'
file.write(comp_line)
这将获得所需的输出:
UPDATE `tblpricing` SET `msetupfee` = '1'
UPDATE `tblpricing` SET `msetupfee` = '2'
UPDATE `tblpricing` SET `msetupfee` = '3'
...