知行编程网知行编程网  2023-01-12 17:30 知行编程网 隐藏边栏  1 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python函数的高级使用方法的相关知识,希望可以帮到处于编程学习途中的小伙伴

Python函数的高级用法

Python函数是“一等公民”,所以函数本身也是一个对象。函数可以用来赋值,可以作为其他函数的参数,也可以作为其他函数的返回值。


使用函数变量

Python 函数也是一个值:所有函数都是函数对象,这意味着函数本身可以赋值给变量,就像整数、浮点数、列表或元组可以赋值给变量一样。

函数赋值给变量后,程序也可以通过变量调用函数。例如下面的代码:

# 定义一个计算乘方的函数
def pow(base, exponent) :
    result = 1
    for i in range(1, exponent + 1) :
        result *= base
    return result
# 将pow函数赋值给my_fun,则my_fun可当成pow使用
my_fun = pow
print(my_fun(3 , 4)) # 输出81
# 定义一个计算面积的函数
def area(width, height) :
    return width * 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是一个函数
def map(data, fn) :   
    result = []
    # 遍历data列表中每个元素,并用fn函数对每个元素进行计算
    # 然后将计算结果作为新数组的元素
    for e in data :
        result.append(fn(e))
    return result
# 定义一个计算平方的函数
def square(n) :
    return n * n
# 定义一个计算立方的函数
def cube(n) :
    return n * n * n
# 定义一个计算阶乘的函数
def factorial(n) :
    result = 1
    for index in range(2, n + 1) :
        result *= index
    return result
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()函数中的部分计算代码可以动态变化。

Python 3 本身也提供了一个 map() 函数。 Python 3 内置的 map() 函数与此处定义的 map() 函数类似,但功能更强大。

下面三行加粗的代码调用了三次map()函数,三个调用依次传入平方、立方、阶乘函数作为参数,这样每次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也支持使用函数作为其他函数的返回值。例如,下面的程序:

def get_math_func(type) :
    # 定义一个计算平方的局部函数
    def square(n) :  # ①
        return n * n
    # 定义一个计算立方的局部函数
    def cube(n) :  # ②
        return n * n * n
    # 定义一个计算阶乘的局部函数
    def factorial(n) :   # ③
        result = 1
        for index in range(2 , n + 1):
            result *= index
        return result
    # 返回局部函数
    if type == "square" :
        return square
    if type == "cube" :
        return cube
    else:
        return factorial
# 调用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() 函数时即可返回所需的函数,如上面程序中代码所示。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享