首页 / 知识
python函数的高级使用方法
2023-11-12 13:02:00
Python的函数是“一等公民”,因此函数本身也是一个对象,函数既可用于赋值,也可用作其他函数的参数,还可作为其他函数的返回值。
使用函数变量
python的函数也是一种值:所有函数都是function对象,这意味着可以把函数本身赋值给变量,就像把整数、浮点数、列表、元组赋值给变量一样。
当把函数赋值给变量之后,接下来程序也可通过该变量来调用函数。例如如下代码:
#定义一个计算乘方的函数
defpow(base,exponent):
result=1
foriinrange(1,exponent+1):
result*=base
returnresult
#将pow函数赋值给my_fun,则my_fun可当成pow使用
my_fun=pow
print(my_fun(3,4))#输出81
#定义一个计算面积的函数
defarea(width,height):
returnwidth*height
#将area函数赋值给my_fun,则my_fun可当成area使用
my_fun=area
print(my_fun(3,4))#输出12
从上面代码可以看出,程序依次将pow()、area()函数赋值给my_fun变量,接下来即可通过my_fun变量分别调用pow()、area()函数。
其实python已经内置了计算乘方的方法,因此此处的pow()函数并没有太大的实际意义,只是作为示范使用。
通过对my_fun变量赋值不同的函数,可以让my_fun在不同的时间指向不同的函数,从而让程序更加灵活。由此可见,使用函数变量的好处是让程序更加灵活。
除此之外,程序还可使用函数作为另一个函数的形参和(或)返回值。
使用函数作为函数形参
有时候需要定义一个函数,该函数的大部分计算逻辑都能确定,但某些处理逻辑暂时无法确定,这意昧着某些程序代码需要动态改变,如果希望调用函数时能动态传入这些代码,那么就需要在函数中定义函数形参,这样即可在调用该函数时传入不同的函数作为参数,从而动态改变这段代码。
Python支持像使用其他参数一样使用函数参数,例如如下程序:
#定义函数类型的形参,其中fn是一个函数
defmap(data,fn):
result=[]
#遍历data列表中每个元素,并用fn函数对每个元素进行计算
#然后将计算结果作为新数组的元素
foreindata:
result.append(fn(e))
returnresult
#定义一个计算平方的函数
defsquare(n):
returnn*n
#定义一个计算立方的函数
defcube(n):
returnn*n*n
#定义一个计算阶乘的函数
deffactorial(n):
result=1
forindexinrange(2,n+1):
result*=index
returnresult
data=[3,4,9,5,8]
print("原数据:",data)
#下面程序代码3次调用map()函数,每次调用时传入不同的函数
print("计算数组元素的平方")
print(map(data,square))
print("计算数组元素的立方")
print(map(data,cube))
print("计算数组元素的阶乘")
print(map(data,factorial))
上面程序中定义了一个map()函数,该函数的第二个参数是一个函数类型的参数,这意味着每次调用函数时可以动态传入一个函数,随着实际传入函数的改变,就可以动态改变map()函数中的部分计算代码。
Pthon3本身也提供了一个map()函数,Python3内置的map()函数的功能和此处定义的map()函数功能类似,但更加强大。
接下来的三行粗体字代码调用了map()函数三次,三次调用依次传入了square、cube、factorial函数作为参数,这样每次调用map()函数时实际的执行代码是有区别的。
编译、运行上面程序,可以看到如下输出结果:
原数据:[3,4,9,5,8]
计算数组元素的平方
[9,16,81,25,64]
计算数组元素的立方
[27,64,729,125,512]
计算数组元素的阶乘
[6,24,362880,120,40320]
从上面介绍不难看出,通过使用函数作为参数可以在调用函数时动态传入函数,实际上就可以动态改变被调用函数的部分代码。
在程序最后添加如下一行:
#获取map的类型
print(type(map))
运行上面代码,将会看到如下输出结果:
《class'function'>
使用函数作为返回值
前面己经提到,Python还支持使用函数作为其他函数的返回值。例如如下程序:
defget_math_func(type):
#定义一个计算平方的局部函数
defsquare(n):#①
returnn*n
#定义一个计算立方的局部函数
defcube(n):#②
returnn*n*n
#定义一个计算阶乘的局部函数
deffactorial(n):#③
result=1
forindexinrange(2,n+1):
result*=index
returnresult
#返回局部函数
iftype=="square":
returnsquare
iftype=="cube":
returncube
else:
returnfactorial
#调用get_math_func(),程序返回一个嵌套函数
math_func=get_math_func("cube")#得到cube函数
print(math_func(5))#输出125
math_func=get_math_func("square")#得到square函数
print(math_func(5))#输出25
math_func=get_math_func("other")#得到factorial函数
print(math_func(5))#输出120
程序中,定义了一个get_math_func()函数,该函数将返回另一个函数。接下来在get_math_func()函数体内的①、②、③号粗体字代码分别定义了三个局部函数,最后get_math_func()函数会根据所传入的参数,使用这三个局部函数之一作为返回值。
在定义了会返回函数的get_math_func()函数之后,接下来程序调用get_math_func()函数时即可返回所需的函数,如上面程序中代码所示。
以上内容为大家介绍了python培训之函数的高级使用方法,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注我们
最新内容
相关内容
pythoneval函数作用
pythoneval函数作用,培训,字符串,函数,作用,表达式,对象,结果,引号,计算器,以上,pythoneval(str)函数很强大,官方解释为:将字符串str当成有效的pythonprint函数不要换行怎么写
pythonprint函数不要换行怎么写,培训,灵活,函数,对象,参数,文件,空格,结尾,字符,下面,从语法上讲,调用python3.0的print函数有如下的形式:printpython代码如何在命令行运行
python代码如何在命令行运行,代码,培训,路径,空格,文件,下面,以上,目录,更多,内容,我们在编写python代码时,可以在交互模式下运行代码,也可以用python如何自定义一个函数
python如何自定义一个函数,代码,名称,培训,函数,圆括号,参数,定义,表达式,选择性,字符串,python函数是组织好的,可重复使用的,用来实现单一,或相python内置函数在哪
python内置函数在哪,培训,函数,包装,模块,对象,字符串,列表,数据类型,属性,类型,所谓内置函数,就是在Python中被自动加载的函数,任何时候都可以python如何操作mysql数据库
python如何操作mysql数据库,培训,标准,项目,密码,数据库,接口,表字,操作,用户,机子,Python标准数据库接口为PythonDB-API,PythonDB-API为开发python怎么写多行代码
python怎么写多行代码,代码,培训,情况,示例,字符串,斜杠,方法,行书,括号,有用,在写代码过程中,经常遇到一行代码很长的情况。为了让代码显得整pythonrange函数怎么用
pythonrange函数怎么用,步长,培训,函数,负数,整数,语法,字母,实例,以上,以下,pythonrange()函数可创建一个整数列表,一般用在for循环中。函数python函数如何不返回none
python函数如何不返回none,培训,函数,语句,变量,赋值,参数,实际,结果,字符串,语法,python中,用def语句创建函数时,可以用return语句指定应该返python怎么给代码注释
python怎么给代码注释,代码,培训,注释,时间,项目,负担,冗余,重要性,开头,含义,注释的重要性如果我们是做独立项目,或者是唯一一位来查看自己编python如何调用python函数
python如何调用python函数,函数,代码,概念,培训,名字,工作,系统,基础,语句,定义,函数function是python编程核心内容之一,也是比较重要的一块。python在python中如何同时给多个变
python在python中如何同时给多个变量赋值?,培训,连续,名称,赋值,变量,函数,模块,整数,定义,常量,同时赋多个值以下是一种很酷的编程捷径:在Pyt