专栏首页Python小屋Python函数嵌套定义的洪荒之力

Python函数嵌套定义的洪荒之力

本文重点在于:Python允许函数的嵌套定义,这在有些情况下会带来很多方便。

感谢中国石油大学(华东)计算机与通信工程学院李昕老师提供问题。

假设有个列表,内容如下:

>>> x = list(range(20))

>>> x

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

现在我们想得到一个新列表,其中每个值都是x中元素值加5,这很容易用Python内置函数map()实现,例如:

>>> list(map(lambda i: i+5, x))

[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

如果我们想看看哪些元素值大于5,可以像下面这样来做:

>>> list(map(lambda i: i>5, x))

[False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]

好了,现在我们有个新需求,就是让这个固定的5是可变的,不使用常数,而是改为一个变量,同时保持问题性质不变,这样用起来就更加灵活了。但问题在于map()函数只能接收一个函数和1个或多个序列作为参数,并不能直接满足我们的需求。

当当当当,其实我们这样来做:

>>> def myMap(lst, value):

return map(lambda i: i>value, lst)

>>> list(myMap(x, 5))

[False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]

>>> list(myMap(x, 10))

[False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True]

针对上面简单的需求,我们想要的功能已经实现了,如果我们要做的处理过于复杂而无法使用一个lambda表达式来实现,就只好拿出我们的大杀器了:嵌套函数定义。

>>> def myMap(lst, value):

def func(x):

return x>value

return map(func, lst)

让我们试一下好用不好用:

>>> list(myMap(x, 5))

[False, False, False, False, False, False, True, True, True, True, True, True, True, True, True, True, True, True, True, True]

>>> list(myMap(x, 10))

[False, False, False, False, False, False, False, False, False, False, False, True, True, True, True, True, True, True, True, True]

和我们想要的功能完全一致。

本文分享自微信公众号 - Python小屋(Python_xiaowu)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python3选择排序

    选择排序 概述 选择排序(Selection sort)是一种简单直观的排序算法。 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在...

    苦叶子
  • 基于Windows下python3.4.1IDLE常用快捷键小结

    安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器。 IDLE默认不能显示行号,使用ALT+G 跳到对应...

    Angel_Kitty
  • 【机器学习笔记之二】决策树的python实现

    本文结构: 是什么? 有什么算法? 数学原理? 编码实现算法? ---- 1. 是什么? 简单地理解,就是根据一些 feature 进行分类,每个节点提一个问题...

    Angel_Kitty
  • 【Python学习笔记之二】浅谈Python的yield用法

    在上篇【Python学习笔记之一】Python关键字及其总结中我提到了yield,本篇文章我将会重点说明yield的用法 在介绍yield前有必要先说明下Pyt...

    Angel_Kitty
  • 基于Windows下python环境变量配置

    方法和Java环境变量配置是一样的,不懂的请移步这里 虽然这样说,还是唠唠叨叨几句吧QAQ 默认情况下,在windows下安装python之后,系统并不会自动添...

    Angel_Kitty
  • Python3冒泡排序

    Python3冒泡排序 概述 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他...

    苦叶子
  • Python3希尔排序

    希尔排序 概述 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminshing Increment Sort),是直接插入排序算...

    苦叶子
  • 如何参与到开源优测-积微速成计划任务

    通过过完第一次任务,你应该掌握: 安装和部署git 学会git基本的命令 学会如何使用github来管理的你的学习任务 初步了解如何利用python编程 本...

    苦叶子
  • Python3插入排序

    Python3插入排序 前言 为什么要开始写Python3算法系列呢? 一是很长很长时间没专门练习练习这种基本功 二是想把这个系列以基本代码的方式给写出来,提...

    苦叶子
  • Python Selenium设计模式-POM

    前言 本文就python selenium自动化测试实践中所需要的POM设计模式进行分享,以便大家在实践中对POM的特点、应用场景和核心思想有一定的理解和掌握。...

    苦叶子

扫码关注云+社区

领取腾讯云代金券