python20-常用包介绍下

本文介绍函数式编程,它基于lambda演算,程序中只有函数,函数可作参数和返回值。Python借鉴其特点。还讲述了lambda表达式,它是简单表达式,可解决小函数的问题。此外,介绍了高阶函数,即把函数作为参数的函数,以及系统高阶函数map,它能对集合元素进行映射操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 函数式编程(FunctionalProgramming)

  • 基于lambda演算的一种编程方式
    • 程序中只有函数
    • 函数可以作为参数,同样可以作为返回值
    • 纯函数式编程语言: LISP, Haskell
  • Python函数式编程只是借鉴函数式编程的一些特点,可以理解成一半函数式一半Python
  • 需要讲述
    • 高阶函数
    • 返回函数
    • 匿名函数
    • 装饰器
    • 偏函数

1.1 lambda表达式

  • 函数: 最大程度复用代码
    • 存在问题: 如果函数很小,很短,则会造成啰嗦
    • 如果函数被调用次数少,则会造成浪费
    • 对于阅读者来说,造成阅读流程的被迫中断
  • lambda表达式(匿名函数):
    • 一个表达式,函数体相对简单
    • 不是一个代码块,仅仅是一个表达式
    • 可以有参数,有多个参数也可以,用逗号隔开
# lambda表达式的用法
# 1. 以lambda开头
# 2. 紧跟一定的参数(如果有的话)
# 3. 参数后用冒号和表达式主题隔开
# 4. 只是一个表达式,所以,没有return


# 计算一个数字的100倍数
# 因为就是一个表达式,所以没有return
stm = lambda x: 100 * x
print(stm(89))
# 使用上跟函数调用一样
stm2 = lambda x,y,z: x + y*10 + z*100
print(stm2(4,5,6))
------------------
8900
654

1.2 高阶函数

  • 把函数作为参数使用的函数

    # 函数名称就是一个变量值
    a = 100
    print(a)  # 打印变量值
    
    
    def funA():
        print("funA")
    
    
    print(funA)  # 打印变量值
    funB = funA  # 变量赋值
    funB()  # 调用函数
    ---------------
    100
    <function funA at 0x00000254D19511E0>
    funA
    

1.3 以上代码得出的结论:

  • 函数名称是变量
  • funA和funB指向同一片内存,只是名称不一样而已
  • 函数名当变量,可被作为参数传入另一个函数(高阶函数)

1.4 高阶函数

# 高阶函数举例
# funA是普通函数,返回一个传入数字的100倍数字

def funA(n):
    return n * 100

# 再写一函数,将传入参数乘以300倍,利用高阶函数
def funB(n):
    return funA(n) * 3

print(funB(9))

# 写个高阶函数
def funC(n,f):
    # 此函数是将n扩大3倍
    return f(n) * 3

print(funC(9,funA)) # 传入funA为100倍,funC为3倍,相乘为300倍。

# 比较funC和funB,显然funC的写法优于funB
def funD(n):
    return n * 10

# 需求变更,将n放大30倍,此时funB无法实现
print(funC(7,funD)) # 传入funD为10倍,funC为3倍,相乘为30倍。
----------------------------
2700
2700
210

1.4.1 系统高阶-map

  • 原意是映射,把原集合或列表中,每个元素按一定规则进行操作,结果生成一个新集合或列表
  • map函数系统提供具有映射功能的函数,返回值是一个迭代对象
# map举例
# 需求:原列表,每个元素乘10,并生成新列表

s1 = [i for i in range(10)]
print(s1)

s2 = []
for i in s1:
    s2.append(i * 10)
print(s2)



# 利用map实现
def mulTen(n):
    return n * 10


s3 = map(mulTen, s1)
print(type(s3))
print("-" * 37)
print(s3)
# map类型是可迭代结构,所以可以使用for遍历
for i in s3:
    print(i)

# 以下列表生成式结果为空,为什么? 
s4 = [i for i in s3]
print(s4)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值