如何在Python中动态定义函数

  介绍

这篇文章给大家介绍如何在Python中动态定义函数,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

在Python中,没有可以在运行时简化函数定义的语法糖。然而,这并不意味着它就不可能,或者是难以实现。

得到types  import  FunctionType      时间=foo_code 编译(& # 39;def  foo ():, return “bar" & # 39;,,“& lt; string>“,,“exec")   时间=foo_func  FunctionType (foo_code.co_consts[0],,全局变量(),,“foo")      print (foo_func ())

输出:<代码>栏

<强>剖析

逐行检视代码,你会发现语言/解释器的屏障是多么脆弱。

在祝辞祝辞,得到types  import  FunctionType

Python文档通常不会列出那些非用于手动创建的类的特征(这是完全合理的)。有三种方法可以解决这个问题:帮助(),检查(无法查看内置方法),以及最后的解决方案,即查看CPython的源代码。

在本例中,帮助()与检查都可以完成工作,但是查看实际的源代码,则会揭示出关于数据类型的更多细节。

在祝辞祝辞,得到inspect  import 签名   在祝辞祝辞,签名(FunctionType)   & lt; Signature (代码,,全局变量,,名字=没有,argdefs=没有,,关闭=None)在

<强> 1。代码

内部是一个PyCodeobject,作为类型。CodeType对外开放。非内置方法拥有一个__code__属性,该属性保存了相应的代码对象。利用内置编译()方法,可以在运行期创建types.CodeType对象。

<强> 2。全局

如果一个函数引用的变量不是在局部定义的,而是作为参数转入,由默认参数值提供,或者通过闭包上下文提供,则它会在全局字典中查找。

内置的全局变量()方法会返回一个对当前模块的全局符号表(全局符号表)的引用,因此能被用来提供一个总是与当前表的状态相一致的字典。传入任意其它的字典也是可以的(FunctionType((λ:酒吧)。__code__, {“bar":“baz"},“foo") ()==癰az")。

<强> 3。名称(可选)

控制所返回的函数的__name__属性。只真正对λ有用(由于匿名性,它们通常没有名称),并且重命名函数。

<强> 4。argdefs(可选)

通过传入一个包含任意类型的对象的元组,提供一个方式来供应默认参数值(def foo (bar=癰az")。(FunctionType((λ栏:栏)。__code__, {},“foo" (10)) ()==10)。

<强> 5。关闭(可选)

(如果需要在CPython的(Jython, PyPy…)以外的其它Python VM中执行,可能不应该触及,因为它严重地依赖于实现细节)。

一个细胞对象的元组。创建细胞对象并非完全是直截了当的,因为需要调用CPython的内部组件,但有一个库可以令它更加方便:高举(无耻的广告)。(译注:这个库是作者开发的。)

在祝辞祝辞,foo_code =,编译(& # 39;def  foo ():, return “bar" & # 39;,,“& lt; string>“,,“exec")

编译()是一个内置方法,因此同时也是文档丰富的。

执行模式被用的到,因为定义函数需用多个语句。

在祝辞祝辞,foo_func =, FunctionType (foo_code.co_consts[0],,全局变量(),“foo")

聚合全部内容,并将动态创建的函数指定给一个变量。

那个被前一句代码编译成的函数,成为了生成的代码对象的第一个常量,因此仅仅指向foo_code是不充分的。这是exec模式的直接后果,因为生成的代码对象可以包含多个常量。

在祝辞祝辞,打印(foo_func ())

动态生成的函数可以像其它函数一样被调用。

Python的数据类型有哪些吗?

python的数据类型:1。数字类型,包括int(整型),长(长整型)和浮子(浮点型)。2。字符串,分别是str类型和unicode类型。3。布尔型,Python布尔类型也是用于逻辑运算,有两个值:True(真)和虚假的(假)。4。列表,列表是Python中使用最频繁的数据类型,集合中可以放任何数据类型。5。元组,元组用“()”标识,内部元素用逗号隔开。6。字,字典典是一种键值对的集合。7。集合,集合是一个无序的,不重复的数据组合。

关于如何在Python中动态定义函数就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

如何在Python中动态定义函数