在python中将字符串转换为函数

时间:2013-04-11 15:42:21

标签: python string function module getattr

我有一个来自数据库的字符串。此字符串是模块中文件.py的名称。结构如下:

files
├── file1.py
├── file2.py
└── __init__.py

file1.py包含:

def file1(imprime):
    print(imprime)

file2.py包含:

def file2(imprime):
    print(imprime)

我需要将字符串转换为可以调用的函数。

main.py文件中,我尝试:

import files
string = "file1.py"
b = getattr(file1, string)

text = 'print this...'

b(text)

任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

有几个问题。在这种情况下,string不应该是“.py”文件名,而应该是模块或函数名称,因此file1

file1不在范围内,因为您已导入files,而file1该功能位于files.file1模块内。

您可以将文件/ init .py声明如下:

from file1 import *
from file2 import *

如果您希望file1功能和file2功能存在于files上。然后你会做b = getattr(files, string)

答案 1 :(得分:0)

您可以使用导入功能按名称导入模块并将其粘贴在文件模块上。

编辑:更改以显示如何调用该功能

import os
import files
wanted_file = "file1.py"
# name of module plus contained function
wanted_name = os.path.splitext(wanted_file)[0]
# if you do this many times, you can skip the import lookup after the first hit
if not hasattr(files, wanted_name):
    module = __import__('files.' + wanted_name)
    setattr(files, wanted_name, module)
else:
    module = getattr(files, wanted_name)
fctn = getattr(module, wanted_name)
text = 'print this...'
fctn(text)