如何在引号内调用python函数

如何在引号内调用python函数,python,python-2.7,Python,Python 2.7,我正在编写一个函数,它生成字符串的某些部分,并将在另一个字符串中调用,从而完成句子 但是,限制是必须在引号中设置此完整字符串。它看起来像: date='日期为get\u date()' 其中get_date()是一个以字符串形式返回日期的函数(尽管比这稍微复杂一点)。问题是python不允许我调用带引号的函数 有什么想法吗 谢谢 编辑: 我会更详细地说明我要做的事情,因为我觉得事情没那么复杂,而你们看起来是一帮很有帮助的人 我有一个配置文件(conf.py),它定义了一组变量。我想(使用pyth

我正在编写一个函数,它生成字符串的某些部分,并将在另一个字符串中调用,从而完成句子

但是,限制是必须在引号中设置此完整字符串。它看起来像:

date='日期为get\u date()'

其中get_date()是一个以字符串形式返回日期的函数(尽管比这稍微复杂一点)。问题是python不允许我调用带引号的函数

有什么想法吗

谢谢

编辑: 我会更详细地说明我要做的事情,因为我觉得事情没那么复杂,而你们看起来是一帮很有帮助的人

我有一个配置文件(conf.py),它定义了一组变量。我想(使用python脚本)处理的其中一个问题是版权年:

options=[('example1','Copyright 2008-current year Company Name Ltd.)]中的一个选项

CURRENTYEAR是我想通过python脚本的输出来控制的,我的函数只是以字符串形式返回年份。

试试以下方法:

date = 'The date is {}'.format(get_date())
上面使用的是格式化字符串,比在字符串中计算代码简单得多(也更安全),要计算的实际函数可以作为参数传递,以增加灵活性。例如,对于编辑后的示例:

def get_current_year():
    return '2013' # just an example, not the real function

s = 'Copyright 2008-{} Company Name Ltd.'
s.format(get_current_year())
=> 'Copyright 2008-2013 Company Name Ltd.'

格式化字符串允许您用所需的任何值替换字符串中的
{}
占位符,特别是它可以是函数调用。阅读有关格式化字符串的更多信息。

Oscar的解决方案肯定会起作用,但根据您的用例,还有另一个选项可能会起作用。例如,如果您正在使用某个模块中的函数,但不确定是哪一个函数,并将其作为字符串获取,则可以用一种不理想的方式将该字符串转换回所讨论的函数,但不会像
eval
那样糟糕。例如:

import requests

def run_request(method, **kwargs):
    return getattr(requests, method)(**kwargs)
因为函数是python中的对象,所以实际上可以通过字符串表示来检索它们。如果你能避免的话,我仍然同意你不想这样做

对于您的更新,您可能会喜欢另一种语法,但它几乎只是奥斯卡答案的简单替代。假设您有一个函数
year
,它返回您想要的内容。您可以这样做:

"Copyright 2008-%s" % your_function()

如果您的conf文件已经是python脚本,那么您可以直接在其中运行python代码。公然抄袭@Óscar López的答案:

one_of_the_options = [('option1', 'Copyright 2008-{} Company Name Ltd.'.format(current_year()))]

在我看来,这是使用模板的绝佳机会

所以你可以这样写:

one_of_the_options = [('example1', 'Copyright 2008-{{ curent_year }} Company Name Ltd.')]
然后,不直接输出文本,而是首先使用模板引擎进行渲染


Python Wiki上的页面对模板的使用有很好的概述。

或者您可以只使用字符串连接:

日期='日期为'+str(get_date())


您是否确定要在字符串中查找类似于函数调用的内容,或者是否可以接受Pythonic和不太可怕的替代方案?如果是这样的话,我们需要更多关于你打算如何使用这个的信息……可能是你需要字符串格式:
“日期是{}”。format(get_date())
来扩展@Jon问的内容:你从哪里得到这个字符串?你能控制它吗?“函数调用”是否一定要看起来像字符串中的函数调用,或者你能做一些不那么可怕的事情,比如提供一个普通的函数调用?有没有理由你不能只
格式化
或将函数的结果附加到字符串中?看起来您可能来自shell脚本世界。在编程语言中,通常不计算字符串文本;相反,如果需要在它们中使用函数调用的结果,可以在字符串文本表达式之外操作数据。你能为你的用例提供更多的上下文吗?我看你已经把我弄糊涂了。在使用shell脚本之前,我就这样做了,但它变得越来越难看。我已经更新了这个问题,更明确地说明了我想做什么。谢谢。我把这个答案归功于@Óscar López。