gpt4 book ai didi

python通过函数名调用函数的几种场景

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章python通过函数名调用函数的几种场景由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、说明 。

之前写了一篇“Python执行系统命令教程”讲了如何执行系统命令.

除了执行系统命令外,我们有时还需要动态地执行一些python代码,有经验的朋友就会知道可以使用内置函数eval实现这一需求,如eval("print(__file__)"),这还是比较简单的.

但如果要动态执行一个函数,讲的资料就会少一点,这次就要看这个需求该如何实现.

2、通过eval实现 。

2.1 通过eval调用同一个类内的函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class TestA:
  def __init__( self ):
   self .config_dict = {
    "be_called_function_name" : "self.be_called_function()" ,
   }
   pass
 
  def active_call_function( self ):
   print ( "here is active_call_function." )
   be_called_function_name = self .config_dict[ "be_called_function_name" ]
   # 就直接调用。如果有其他参数,一样地传就好了
   # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)()
   eval (be_called_function_name)
   pass
 
  def be_called_function( self ):
   print ( "here is be_called_function." )
 
if __name__ = = "__main__" :
  obj = TestA()
  obj.active_call_function()

2.2 通过eval调用同一个文件内的一级函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class TestA:
  def __init__( self ):
   self .config_dict = {
    "be_called_function_name" : "be_called_function()" ,
   }
   pass
 
  def active_call_function( self ):
   print ( "here is active_call_function." )
   be_called_function_name = self .config_dict[ "be_called_function_name" ]
   # 就直接调用。如果有其他参数,一样地传就好了
   # 另外也可以是"be_called_function_name"是"be_called_function",然后eval(be_called_function_name)()
   eval (be_called_function_name)
   pass
 
def be_called_function():
  print ( "here is be_called_function." )
 
if __name__ = = "__main__" :
  obj = TestA()
  obj.active_call_function()

3、通过getattr实现 。

3.1 通过函数名调用同一个类内的函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class TestA:
  def __init__( self ):
   self .config_dict = {
    "be_called_function_name" : "be_called_function" ,
   }
   pass
 
  def active_call_function( self ):
   print ( "here is active_call_function." )
   # getaattr(module_name, function_name),module_name传self即可
   be_called_function = getattr ( self , self .config_dict[ "be_called_function_name" ])
   # 就直接调用。如果有其他参数,一样地传就好了
   be_called_function()
   pass
 
  def be_called_function( self ):
   print ( "here is be_called_function." )
 
 
if __name__ = = "__main__" :
  obj = TestA()
  obj.active_call_function()

3.2 通过函数名调用其他类的函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class TestA:
  def __init__( self ):
   self .config_dict = {
    "be_called_function_name" : "be_called_function" ,
   }
   pass
 
  def active_call_function( self ):
   print ( "here is active_call_function." )
   # getaattr(module_name, function_name),module_name传被调用的函数所在的类的类实例
   testb_obj = TestB()
   be_called_function = getattr (testb_obj, self .config_dict[ "be_called_function_name" ])
   # 就直接调用。如果有其他参数,一样地传就好了
   be_called_function()
   pass
 
 
class TestB:
  def be_called_function( self ):
   print ( "here is be_called_function." )
 
 
if __name__ = = "__main__" :
  obj = TestA()
  obj.active_call_function()

3.3 通过函数名调用同文件的一级函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys
 
 
class TestA:
  def __init__( self ):
   self .config_dict = {
    "be_called_function_name" : "be_called_function" ,
   }
   pass
 
  def active_call_function( self ):
   print ( "here is active_call_function." )
   # getaattr(module_name, function_name),module_name传当前模块名
   module_name = sys.modules[ '__main__' ]
   be_called_function = getattr (module_name, self .config_dict[ "be_called_function_name" ])
   # 就直接调用。如果有其他参数,一样地传就好了
   be_called_function()
   pass
 
 
def be_called_function():
  print ( "here is be_called_function." )
 
 
if __name__ = = "__main__" :
  obj = TestA()
  obj.active_call_function()

3.4 通过函数名调用在其他文件的一级函数 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class TestA:
  def __init__( self ):
   self .config_dict = {
    "be_called_function_name" : "be_called_function" ,
   }
   pass
 
  def active_call_function( self ):
   print ( "here is active_call_function." )
   # getaattr(module_name, function_name),module_name传函数所在模块名
   # __import__()传函数所在文件
   module_name = __import__ ( "test_call_function_by_string1" )
   be_called_function = getattr (module_name, self .config_dict[ "be_called_function_name" ])
   # 就直接调用。如果有其他参数,一样地传就好了
   be_called_function()
   pass
 
 
if __name__ = = "__main__" :
  obj = TestA()
  obj.active_call_function()

以上就是python通过函数名调用函数的几种场景的详细内容,更多关于python通过函数名调用函数的资料请关注我其它相关文章! 。

原文链接:https://www.cnblogs.com/lsdb/p/13294495.html 。

最后此篇关于python通过函数名调用函数的几种场景的文章就讲到这里了,如果你想了解更多关于python通过函数名调用函数的几种场景的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com