Python 高级教程之函数式编程

count += L[i]



# 进入递归

count = Sum(L, i + 1, n, count)



return count

驱动程序代码

L = [1, 2, 3, 4, 5]

count = 0

n = len(L)

print(Sum(L, 0, n, count))




**输出**:



15




### []( )函数是一等的,可以是高阶的



一等的对象自始至终统一处理。它们可以存储在数据结构中,作为参数传递,或者在控制结构中使用。如果一种编程语言将函数视为一等对象,则称其支持一等函数。



**一等函数的性质**:



*   函数是 Object 类型的实例。

*   你可以将函数存储在变量中。

*   你可以将函数作为参数传递给另一个函数。

*   你可以从函数返回函数。

*   你可以将它们存储在数据结构中,例如哈希表、列表……



演示高阶函数的 Python 程序

def shout(text):

return text.upper()



def whisper(text):

return text.lower()



def greet(func):

# 将函数存储在变量中

greeting = func("我是由作为参数传递的函数创建的。")

print(greeting)

greet(shout)

greet(whisper)




**输出**:



我是由作为参数传递的函数创建的。

我是由作为参数传递的函数创建的。




**内置高阶函数**



为了使列表和迭代器等可迭代对象的处理更加容易,Python 实现了一些常用的高阶函数。这些函数返回一个节省空间的迭代器。一些内置的高阶函数是:



### []( )Map()



map() 函数在将给定函数应用于给定迭代(列表、元组等)的每个项目后返回结果列表



> **语法**: map(fun, iter)

> 

> **参数**:  

> **fun**:这是一个函数,map 将给定迭代的每个元素传递给该函数。  

> **iter**:它是一个要被映射的可迭代对象。

> 

> **返回类型**:返回 map 类的迭代器。



**例子**:



用于演示 map 工作的 Python 程序。

Return double of n

def addition(n):

return n + n

我们使用 map() 将所有数字翻倍

numbers = (1, 2, 3, 4)

results = map(addition, numbers)

不打印值

print(results)

打印值

for result in results:

print(result, end = " ")



**输出**:



<map object at 0x7fae3004b630>

2 4 6 8




### []( )filter()



filter() 方法在一个函数的帮助下过滤给定的序列,该函数测试序列中的每个元素是否为真。



> **语法**:过滤器(函数,序列)  

> **参数**:  

> **function**:测试序列的每个元素是否为真的函数。  

> **sequence**:需要过滤的序列,可以是集合、列表、元组或任何迭代器的容器。

> 

> **返回类型**:返回一个已经过滤的迭代器。



**例子**:



演示过滤器工作的 Python 程序。

过滤元音的函数

def fun(variable):

letters = ['a', 'e', 'i', 'o', 'u']



if (variable in letters):

    return True

else:

    return False

sequence

sequence = [‘g’, ‘e’, ‘e’, ‘j’, ‘k’, ‘s’, ‘p’, ‘r’]

使用过滤功能

filtered = filter(fun, sequence)

print(‘过滤后的字母是:’)

for s in filtered:

print(s)



**输出**:



过滤后的字母是:

e

e




### []( )Lambda 函数



在 Python 中,匿名函数意味着函数没有名称。我们已经知道 def 关键字用于定义普通函数,而 lambda 关键字用于创建匿名函数。



**语法**:



> lambda 参数:表达式



1.  这个函数可以有任意数量的参数,但只有一个表达式,它被计算并返回。

2.  任何需要函数对象的地方都可以使用 lambda 函数。

3.  你需要了解 lambda 函数在语法上仅限于单个表达式。

4.  除了函数中的其他类型的表达式外,它在特定的编程领域有多种用途。



**例子**:



演示 lambda 的 Python 代码

cube = lambda x: x * x*x

print(cube(7))

L = [1, 3, 2, 4, 5, 6]

is_even = [x for x in L if x % 2 == 0]

print(is_even)




**输出**:



343

[2, 4, 6]




### []( )生成器



#### []( )生成器函数



生成器函数的定义与普通函数一样,但无论何时它需要生成一个值,它都会使用 yield 关键字而不是 return。如果 def 的主体包含 yield,则该函数自动成为生成器函数。



一个生成器函数,第一次产生 1,第二次产生 2,第三次产生 3

def simpleGeneratorFun():

yield 1			

yield 2			

yield 3			

用于检查上述生成器功能的驱动代码

for value in simpleGeneratorFun():

print(value)



输出 :



1

2

3




#### []( )生成器对象



生成器函数返回一个生成器对象。通过调用生成器对象的 next 方法或在“for in”循环中使用生成器对象来使用生成器对象(如上面的程序所示)。



一个 Python 程序,用于演示通过 next() 使用生成器对象

一个生成器函数

def simpleGeneratorFun():

yield 1

yield 2

yield 3

x 是一个生成器对象

x = simpleGeneratorFun()

使用 next 遍历生成器对象

print(x.next()) # In Python 3, next()

print(x.next())

print(x.next())




输出 :



1

2

3




所以生成器函数返回一个可迭代的生成器对象,即可以用作迭代器。



作为另一个示例,下面是斐波那契数列的生成器。



斐波那契数列的简单生成器

def fib(limit):

# 初始化前两个斐波那契数

a, b = 0, 1



# 一个接一个地生成下一个斐波那契数

while a < limit:

    yield a

    a, b = b, a + b

创建一个生成器对象

x = fib(5)

使用 next 遍历生成器对象

print(x.next()) # In Python 3, next()

print(x.next())

print(x.next())

print(x.next())

print(x.next())

使用 for in 循环遍历生成器对象。

print(“\n在循环中使用 for”)

for i in fib(5):

print(i)



输出 :



0

1

1

2

3

在循环中使用 for

0

1

1

2

3




应用:假设我们要创建一个斐波那契数流,我们只需要调用 next(x) 来获取下一个斐波那契数,无需担心数字流在何处或何时结束。更实用的流处理类型是处理大型数据文件,例如日志文件。生成器为此类数据处理提供了一种节省空间的方法,因为在一个给定的时间点只处理文件的一部分。我们也可以将迭代器用于这些目的,但是生成器提供了一种快速的方法(我们不需要在这里编写 `__next__` 和 `__iter__` 方法)。



### []( )装饰器



装饰器是 Python 中一个非常强大和有用的工具,因为它允许程序员修改函数或类的行为。装饰器允许我们包装另一个函数以扩展被包装函数的行为,而无需永久修改它。但在深入研究装饰器之前,让我们了解一些在学习装饰器时会派上用场的概念。



装饰器用于修改函数或类的行为。在装饰器中,函数作为参数传入另一个函数,然后在包装函数内部调用。



装饰器的语法:



@hy_decorator

def hello_decorator():

print("HY")

上面的代码等价于 -

def hello_decorator():

print("HY")

hello_decorator = hy_decorator(hello_decorator)‘’’




在上面的代码中,gfg\_decorator 是一个可调用函数,将在另一个可调用函数 hello\_decorator 函数之上添加一些代码并返回包装函数。



装饰器可以修改行为:



定义装饰器

def hello_decorator(func):

# inner1 是一个 Wrapper 函数,其中调用了参数



# 内部函数可以访问外部局部函数,如本例中的“func”

def inner1():

    print("这是在函数执行之前")



    # 现在在包装函数中调用实际函数。

    func()



    print("这是在函数执行之后")

    

return inner1

定义一个函数,在包装器内部调用

def function_to_be_used():

print("这是在函数内部")

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-TVCooptN-1713610702759)]

[外链图片转存中…(img-GBIFpWhr-1713610702760)]

[外链图片转存中…(img-2Rlv3ifG-1713610702760)]

[外链图片转存中…(img-pLUESGuR-1713610702761)]

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)

  • 12
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值