【问题标题】:passing values across functions yields no output跨函数传递值不会产生输出
【发布时间】:2020-08-20 09:49:46
【问题描述】:

我有下面的代码,我使用 python 包click 从用户那里获取一些输入。然后,我将用户输入传递给一个函数,该函数具有加载预训练模型的代码。我返回一个值列表,将其传递给第二个函数,该函数使用模型和其他值生成文本。但是,这些值不会从第一个函数传递到第二个函数,因为当我尝试打印列表时,我什么也得不到。谁能指出我做错了什么,非常感谢!

@click.argument('email_template', nargs=1)
def load_model(email_template):
    ## code block here
    list1 = [email_template, value1, value2]
    return list1


def generate_text(value2):
    # code block here
    return result

if __name__ == '__main__':
    list1 = load_model()
    list2 = generate_text(list1)
    print(list2)

【问题讨论】:

  • 错字email template,记住下划线。另外,list1 = []这行是不需要的,运行代码时记得传入参数
  • 抱歉,打错了。

标签: python python-3.x python-click


【解决方案1】:

您缺少 @click.command() 装饰器。使用@click.argument() 是不够的,然后期望它可以工作。 @click.command()-decorated 函数成为脚本的入口点,不应被视为返回用户选项的东西。

此外,如果 email_template 是您的脚本采用的唯一选项并且它只需要一个值,那么使用 nargs=1 是没有意义的。

这样做:

import click

@click.command()
@click.argument('email_template')
def load_model(email_template):
    ## code block here
    # This is your *main script function*.

    list1 = [email_template, value1, value2]

    # don't return, continue the work you need doing from here
    list2 = text_generator(list1)
    print(list2)

def generate_text(result):
    # code block here
    return value2

if __name__ == '__main__':
    load_model()

load_model 退出时,您的脚本将退出。

另外,不要使用print(),而应考虑使用click.echo(),尤其是当您需要打印使用非ASCII字符并需要在各种平台上工作的文本时,或者如果您想在其中包含ANSI颜色你的输出。

【讨论】:

  • 我的代码中有@click.command(),忘了包括在这里。但是在第一个函数中调用第二个函数就可以了。能够启动并运行代码。非常感谢您的快速帮助!
猜你喜欢
  • 2017-04-20
  • 1970-01-01
  • 2021-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
  • 2020-12-26
  • 2011-12-17
相关资源
最近更新 更多