揭秘python函数:编程艺术的核心力量(3)

这篇具有很好参考价值的文章主要介绍了揭秘python函数:编程艺术的核心力量(3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

前言

前面我们已经学习了 python 函数的基础知识,那么今天我将为大家分享函数进阶的知识:递归、lambda表达式和一些高阶函数的使用。🚗🚗🚗

递归

在编程中,递归(Recursion)是一种函数调用自身的技术或方法。在递归过程中,函数通过解决一个问题的较小或相似的子问题来重复调用自身,直到达到某个基本条件,然后逐步返回结果,并合并得到最终的解决方案。

递归函数的基本思想是将一个大问题分解为一个或多个相似的子问题,这些子问题与原始问题相同但规模较小。然后通过递归调用来解决子问题,并将其子问题的解组合起来解决原始问题。递归函数必须具有停止递归的条件,以防止无限循环。

我们通过一个例子来了解递归:

用递归实现1-3数字累加

def sum_add(x):
    if x == 1:  # 递归结束条件,也就是递归的出口
        return 1
    return x + sum_add(x-1)

result = sum_add(3)
print(result)  # 6

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

在这里我们需要注意,在递归的过程中函数必须越来越接近递归结束的条件,否则就会无限递归下去,最终会停止程序。

lambda表达式

lambda表达式是一种匿名函数(无需定义函数名称)的简洁形式。它是一种轻量级的函数定义方式,可以在需要函数对象的地方使用。lambda表达式最突出的特点就是简化代码,当一个函数只有一个返回值,并且只有一句代码的时候,就可以使用lambda表达式。

在 python 中,lambda语法是这样的 lambda 参数列表 : 返回语句

用 lambda 表达式计算两数之和。

fn = lambda a,b : a+b  # 这相当于将匿名函数的地址给fn
result = fn(10,20)  # fn()调用函数
print(result)  # 30

我们也可以将此 lambda 表达式更加简化。

print((lambda a,b : a+b)(10,20))

虽然可以这样写,但是这里 lambda 表达式只可以使用一次,当使用完成之后,因为他是匿名的,所以就没人能记住他的位置,很快就会被销毁。

lambda 的参数形式

前面我们说过了普通函数的参数形式:无参数、位置参数、缺省参数和可变参数,这些参数在 lambda 表达式中同样适用。

无参数

当没有参数的时候,我们可以直接省略参数列表。

fn = lambda : 100
print(fn())  # 100

位置参数

传递参数的时候,要和 lambda 表达式参数列表的参数位置和数量保持一致。

fn = lambda a,b : f'a = {a},b = {b}'
print(fn(10,20))

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

关键字参数

在传递参数的时候,可以使用 键 = 值 的形式,来取消对用位置的限制。

fn = lambda a,b : f'a = {a},b = {b}'
print(fn(b = 200,a = 100))

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

缺省参数

在定义参数列表的时候,我们可以指定某个参数具有的默认值,在传递参数的时候可以省略传递该参数使用默认值,或者也可以传递该参数取消使用默认值。但是记住了,默认参数必须在参数列表的后面。

# 使用默认参数
fn = lambda a,b,c=100 : a+b+c
print(fn(100,50))  # 250
# 取消使用默认参数
fn = lambda a,b,c=100 : a+b+c
print(fn(100,50,200))  # 350

可变参数

参数的个数可以设置为可变的,你传递参数的时候可以传递任意个。

1.包裹位置传递
lambda *args : 返回语句

参数被合并为一个元组传入

fn = lambda *args : args
print(fn(10,20,30))

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

2.包裹关键字传递
lambda **args : 返回语句

参数被合并成一个字典传入。

fn = lambda **args : args
print(fn(name = 'zhangsan',age = 18,gender = 'man'))

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

带判断条件的lambda表达式

lambda 表达式还可以加上一些简单的判断语句。

fn = lambda a,b : a if a > b else b
print(fn(10,20))  3 20

列表数据按照字典key的值进行排序

我们都知道列表有 字典序列.sort(以什么作为排序标准,reverse = True(降序)/Fasle(升序)) 的排序方法,那么我们可以搭配着 lambda 表达式来简化代码。

# 以字典的 name值 作为排序的标准
list1 = [
    {'name':'zhangsan','age':18,'gender':'man'},
    {'name':'lisi','age':20,'gender':'woman'},
    {'name':'wangwu','age':28,'gender':'man'}
]

list1.sort(key = lambda x:x['name'],reverse = False)
for i in list1:
    print(i)

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

# 以年龄作为排序标准
list1 = [
    {'name':'zhangsan','age':18,'gender':'man'},
    {'name':'lisi','age':20,'gender':'woman'},
    {'name':'wangwu','age':28,'gender':'man'}
]

list1.sort(key = lambda x:x['age'],reverse = False)
for i in list1:
    print(i)

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

高阶函数的使用

在Python中,高阶函数是指接受一个或多个函数作为参数,并/或返回一个函数的函数。高阶函数是函数式编程的重要概念,它们提供了一种更抽象、灵活和可复用的方式来处理函数和数据。

在进行数据之间的计算时,往往需要先对数字进行处理之后再进行计算。

def sum_add(a,b):
    return abs(a) + abs(b)  # abd函数返回数字的绝对值

print(sum_add(-10,20))

我们这样写代码会显得十分呆,如果我们对数字的处理不是绝对值,而是四舍五入的值时,我们就需要更改函数里面的代码,那么有没有一种可能:我们可以将需要进行的操作作为参数传入进去呢?当然是可以的,这就是高阶函数
def 函数名(a,b,f) # 这里 f 为函数

def sum_add(a,b,f):
    return f(a) + f(b)

print(sum_add(1.25,2.75,round))  # 4

内置高阶函数

以下是一些常见的Python高阶函数:

  1. map(function, iterable): 接受一个函数和一个可迭代对象,对可迭代对象中的每个元素应用函数,并返回一个新的可迭代对象,其中包含应用函数后的结果。

  2. filter(function, iterable): 接受一个函数和一个可迭代对象,根据函数的返回值为True或False过滤可迭代对象中的元素,并返回一个新的可迭代对象,其中包含满足条件的元素。

  3. reduce(function, iterable[, initializer]): 从Python 3中已移除,被移到functools模块中。它接受一个函数和一个可迭代对象,对可迭代对象中的元素进行累积计算,并返回最终结果。例如,使用reduce可以计算累加、累乘等操作。

1.map()

map(func, lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。

# 返回列表中每个元素的平方
def func(x):
    return x ** 2


list1 = [1,2,3,4,5]
print(list(map(func,list1)))

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言
结合lambda表达式简化代码

list1 = [1,2,3,4,5]
print(list(map((lambda x : x ** 2),list1)))

这里因为 python3 返回的是一个迭代器,所以我们将返回值转换为列表打印。

2.reduce()

reduce(func(x,y),lst),其中func必须有两个参数。每次func计算的结果继续和序列的下一个元素做累积计算。

import functools  # 使用reduce方法需要导入functools模块

def func(x,y):
    return x + y

list1 = [1,2,3,4,5]
print(functools.reduce(func,list1))  # 15

结合lambda表达式简化代码

import functools

list1 = [1,2,3,4,5]
print(functools.reduce((lambda x,y : x+y),list1))

3.filter()

ilter(func, lst)函数用于过滤序列, 过滤掉不符合条件的元素, 返回一个 filter 对象,。如果要转换为列表,可以使用 list() 来转换。

def func(x):
    return x % 2 == 0

list1 = [i for i in range(1,11)]
print(list(filter(func,list1)))

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言

结合lambda表达式简化代码

list1 = [i for i in range(1,11)]
print(list(filter((lambda x : x % 2 == 0),list1)))

揭秘python函数:编程艺术的核心力量(3),python,python,开发语言文章来源地址https://www.toymoban.com/news/detail-537569.html

到了这里,关于揭秘python函数:编程艺术的核心力量(3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hlang--用Python写个编程语言-函数与基本数据结构实现

    okey,经过一段时间的努力,接下来要实现的是函数。当然还有对应的基本数据结构,那么之后的话,我们的工作就开始进一步转换了。 那么在这块我们要实现的有: 函数的定义 String类型的实现 列表类型的实现 实话实话,这个的实现是相当简陋的。不过作为一个小模型,应该

    2024年02月12日
    浏览(58)
  • C++核心编程——详解函数模板

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 ①为什么有模板? 在C++程序中,声明变量、函数、对象等实体时,程序设计者需要指定数据类型,让编译器在程序运行之前进行类型检查并分配内存,以提高程序运行的安全性和效率。 但是这种强

    2024年02月09日
    浏览(39)
  • 揭秘长尾关键词的力量:如何在搜索引擎上挤掉竞争对手?

    现在,你已经掌握了 SEO 的流程 ,知晓了 网站优化的各种方法 ,也清楚了 站外优化的技巧 ,但问题又来了:你知道优化网站,竞争对手也知道;你懂得站外优化,竞争对手也懂。在这种情况下,你又该如何让你的网站在海量搜索结果中脱颖而出呢? 别慌,有一招可以做到

    2024年02月05日
    浏览(70)
  • Python编程学院:揭秘面向对象的魔法

    Python面向对象编程(OOP) 面向对象编程(OOP)是Python中一块强大的魔法石,它让编程变得更加直观和灵活。通过使用类和对象,你可以创建清晰的模型来代表真实世界中的事物和情景。本文将带你探索类与对象的创建、继承与多态的魔法,以及私有属性与方法和神秘的魔法方

    2024年04月11日
    浏览(51)
  • C++核心编程——内存分区、引用、函数提高和函数重载

    本专栏记录C++学习过程包括C++基础以及数据结构和算法,其中第一部分计划时间一个月,主要跟着黑马视频教程,学习路线如下, 不定时更新,欢迎关注 。 当前章节处于: ---------第1阶段-C++基础入门 ---------第2阶段实战-通讯录管理系统, ==== 第3阶段-C++核心编程 , --------

    2024年01月22日
    浏览(34)
  • 深度学习疆界:探索基本原理与算法,揭秘应用力量,展望未来发展与智能交互的新纪元

    目录 什么是深度学习 深度学习的基本原理和算法 深度学习的应用实例 深度学习的挑战和未来发展方向 挑战 未来发展方向 深度学习与机器学习的关系 深度学习与人类的智能交互 深度学习是 一种基于神经网络的机器学习方法,旨在模仿人类大脑分析和学习数据的方式 。 深

    2024年02月20日
    浏览(46)
  • 入门Python编程:了解计算机语言、Python介绍和开发环境搭建

    计算机语言是用来控制计算机行为的一种语言,通过它可以告诉计算机该做什么。计算机语言和人类语言在本质上没有太大区别,只是交流的对象不同。 计算机语言发展经历了三个阶段: 1. 机器语言 机器语言使用二进制编码来编写程序。 执行效率高,但编写起来麻烦。 2

    2024年02月09日
    浏览(69)
  • 【C语言内存函数精选】memcpy、memset、memmove及仿真实现!掌握内存操作的艺术!

    ❤️ 博客主页: 小镇敲码人 🍏 欢迎关注:👍点赞 👂🏽留言 😍收藏 🌞 任尔江湖满血骨,我自踏雪寻梅香。 万千浮云遮碧月,独傲天下百坚强。 男儿应有龙腾志,盖世一意转洪荒。 莫使此生无痕度,终归人间一捧黄。🍎🍎🍎 ❤️ 我的努力求学没有得到别的好处,只

    2024年02月15日
    浏览(39)
  • 从排序算法的艺术看C语言qsort函数的魅力:一场数据的时空穿越

    欢迎来到白刘的领域    Miracle_86.-CSDN博客 系列专栏    C语言知识 先赞后看,已成习惯    创作不易,多多支持! 目录 一 、回调函数 二、qsort函数 1.qsort函数排序整型数据 2.qsort函数排序结构数据 何为回调函数?听起来很装逼的样子,实际上它是一个很简单的概念: 回调函

    2024年03月19日
    浏览(50)
  • 编程界的“魔术师”:Python中的一行代码艺术

    标题: “成为编程界的“魔术师”:Python中的一行代码艺术” 编程的世界中,有一种被称为“一行代码魔术师”的存在。他们擅长用简洁、精炼的代码实现复杂的功能,就像变魔术一样令人惊叹。 Python作为一种高级编程语言,其简洁明了的语法使得它成为“一行代码魔术师

    2024年02月03日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包