动态地将函数命名为脚本Python

时间:2015-06-30 09:19:09

标签: python

是否可以在脚本中动态命名函数作为脚本的名称?例如,如果脚本名为foo.py,是否可以将foo中的函数动态命名为function_to_import = script?我问的原因是我从几个脚本导入函数,命名约定是 //Check if user loggedin and redirect to login page if not $rootScope.$on('$stateChangeStart', function (event, toState) { //Check only if you are not in login page if(toState.name.indexOf('app') !== -1 ) { // If user is not logged, will redirect to login page, eg: var prefs = plugins.appPreferences; prefs.fetch('iuserid').then(function (value) { if (value != '') { $state.go('login'); } }); } }); - 并且为了避免函数中的任何拼写错误,我希望它是动态的。谢谢!

3 个答案:

答案 0 :(得分:3)

是的,您可以执行类似

的操作
def main():
    pass

globals()[__name__] = main

# if you no longer want the function to exist under its original name
del main

通常不推荐与globals()混淆。我认为这样可以让更清晰的代码只需咬紧牙关并手动输入你需要的名字,但这可能不是最糟糕的事情。

请注意,这只会更改可以使用该功能访问的名称。它不会更改您正在访问的基础函数对象的名称。如果您的代码依赖于该名称,那么您将不得不做一些更复杂的事情。

答案 1 :(得分:2)

有多种方法可以为函数指定新名称,请注意这不会更改函数的名称,但new name也会指向该函数。

示例1 - 导入时可以使用as关键字指定新名称,然后使用新名称在脚本中使用

from foo import func as foo
foo()

示例2 - 您可以将函数分配给新变量(新名称),然后使用新名称来调用它 -

>>> def func(a):
...     print("Hello")
...
>>> foo = func
>>> foo(1)
Hello

可能有更多方法可以做到这一点。

答案 2 :(得分:1)

您可以使用__file__获取文件名,然后将该函数分配给该文件。

def my_function():
    print "Hello, World!"

exec(__file__.split('.')[0] + " = my_function")

如果将其添加到文件中,它会动态将函数my_function命名为文件名。