15. Python3的基本类型(函数的高级内容)


函数本身也是一个对象,函数既可用于赋值,也可用作其他函数的参数,还可以作为其他函数的返回值。

1 函数变量的使用

python的函数也是一种值,所有函数都是function对象,意味着可以把函数本身赋值给变量,和整数,浮点数,列表,元组赋值给变量一样。

如下示例,使用pycharm工具进行python编码,如无特殊说明,都是使用该工具。

#定义计算乘方的函数
def power(base, exponent):
    result = 1
    for i in range(1, exponent + 1):
        result *= base
    return result
#将power函数赋值给my_fun,则my_fun可被当成power使用
my_fun = power
print(my_fun(2, 3)) 

打印输出结果为:8

2 使用函数作为函数形参

有时候定义一个函数,函数的大部分计算逻辑都能确认,但某些逻辑处理暂时无法确认-即意味着某些程序需要动态改变,如果需要调用函数时能动态传入这些代码,就可以在函数中定义函数形参。这样可以在调用函数时传入不同的函数作为参数,从而动态改变这段代码。

#定义函数类型的形参,其中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 = [4, 7, 9, 12, 8]
print("原始数据:", data)
#调用map()函数,每次传入不同的函数
print("计算平方")
print(map(data, square))
print("计算立方")
print(map(data, cube))
print("计算阶乘")
print(map(data, factorial))
print(type(map))

打印的结果:
原始数据: [4, 7, 9, 12, 8]
计算平方
[16, 49, 81, 144, 64]
计算立方
[64, 343, 729, 1728, 512]
计算阶乘
[24, 5040, 362880, 479001600, 40320]
<class 'function'>

3 使用函数作为返回值

#定义返回函数
def get_math_func(type):
    #定义一个计算平方的局部函数
    def square(n):
        return n * n
    # 定义一个计算立方的局部函数
    def cube(n):
        return n * n * n
    #定义一个输入错误类型时返回的函数
    def err(n):
        return '输入参数错误'
    #返回局部函数
    if type == "square":
        return square
    elif type == "cube":
        return cube
    else:
        return err
#调用get_math_func,程序返回一个嵌套函数
math_func = get_math_func('square')
print(math_func(2))
math_func = get_math_func('cube')
print(math_func(2))
math_func = get_math_func('hhhh')
print(math_func(8))

打印输出结果
4
8
输入参数错误

4 使用lambda表达式代替局部函数

lambda表达式的语法格式:
lambda [parameter_list] : 表达式
改写上面的示例

def get_math_func(type):
    #使用lambda表达式
    if type == "square":
        return lambda n: n * n
    elif type == "cube":
        return lambda  n : n * n * n
    else:
        return lambda s : '输入的参数有问题哦!'
#调用get_math_func,程序返回一个嵌套函数
math_func = get_math_func('square')
print(math_func(2))
math_func = get_math_func('cube')
print(math_func(2))
math_func = get_math_func('hhhh')
print(math_func(8))

输出的结果:
4
8
输入的参数有问题哦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值