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'
...