第八章 函数(下)
- 间接调用函数
前面调用函数时,使用函数名加参数列表的形式调用。除此之外,还可以将函数名赋值给一个变量,再通过变量名加参数列表的形式间接调用函数。
间接调用函数有何用处?这种用法可以使一个函数作为另一个函数的参数,另外,函数名还可以作为其他数据类型的元素。
匿名函数 匿名函数是指没有函数名称的、临时使用的微函数。它可以通过lambda表达式来声明,其语法格式如下:
使用lambda表达式声明的匿名函数也可以作为自定义函数的实参,此外,lambda表达式声明的匿名函数还可以作为内建函数的实参,
lambda表达式表示一个匿名函数,也可以作为列表或字典的元素。 - 闭包
在上图中,list1作为参数传进函数f2()中,此时不能把函数f1()移到函数f2()的外面。因为函数f1()的功能是计算list中所有元素值的和,所以f1()函数必须依赖于函数f2()的参数。如果函数f1()在函数f2()外,则无法取得f2()中的数据进行计算,这就引出了闭包的概念。
如果内层函数引用了外层函数的变量(包括其参数),并且外层函数返回内层函数名,这种函数架构称为闭包。从概念中可以得出,闭包需要满足的三个条件:
内层函数的定义嵌套在外层函数中。
内层函数引用外层函数的变量。
外层函数返回内层函数名。 - 常用的内建函数
在Python中,内建函数是被自动加载的,可以随时调用这些函数,不需要定义,极大地简化了编程。
eval()函数用于对动态表达式求值
exec()函数用于动态语句的执行,其语法格式如下:
其中,source是动态语句的字符串,globals和locals是使用的上下文环境的全局变量和局部变量,如果不指定,则使用当前运行上下文。
compile()函数用于将一个字符串编译为字节代码,其语法格式如下:
其中,source为代码语句的字符串,filename为代码文件名称,如果不是从文件读取代码,则传递一些可辨认的值,mode为指定编译代码的种类,其值可以为’exec’、‘eval’、‘single’,剩余参数一般使用默认值。