上一篇:小牛叔讲Python第10章:化繁为简的推导式

0基础Python教程, 每天1篇1周入门,请点击下方的喜欢和收藏。

任何编程语言的函数本质上是一段代码的集合,学好本篇扩展函数的高级用法,有利于更好的运用Python,函数就是Python的核心。本篇介绍如下2个应用场景,一、把函数本身作为参数,二、匿名函数。

1、函数作为参数:

Python里可以把函数本身当成是参数,Python内置函数map就必须传入函数,以这个函数的返回值来一一映射列表集合里的元素。程序员在定义函数时,以传入函数名的方式来定义参数。

2、Map映射

假设有一个列表1至9共有9个元素,现在需要求其平方数列。

map(函数名,列表)

map函数的示例

>>> def square(x):
...     return x**2
...
>>> s = map(square,[1,2,3,4,5,6,7,8,9])
>>> list(s)
[1, 4, 9, 16, 25, 36, 49, 64

以上的代码,主要完成了如下的动作:

  • 定义了square函数,返回参数的平方
  • 调用map函数生成平方数列

在包含map语句,我们使用了先前定义的函数名称square,作为参数传入另一个函数,并且完成了映射的操作。

3、 定义包含函数参数的函数

邓布利多校长想比较霍格沃茨学校两个班a,b的成绩,有两种比较方式,一种是比较最高分,另一种是比较平均分,可以写两个函数compareMax,加上compareAvg。有了上述的提示,比较方式其实也可以作为参数,如下的代码用了一个函数来搞定。

>>> def compare(way,a,b):
...     if way(a)>way(b):
...             print('a班赢了')
...     elif way(a)==way(b):
...             print('平了')
...     else:
...             print('b班赢了')
>>> from statistics import mean
>>> compare(mean,[90,80,90],[100,50,100])
a班赢了
>>> compare(max,[90,80,90],[100,50,100])
b班赢了

上面的代码定义了函数compare,其中有三个参数:

  • way: 函数参数,表示比较方式,是不是函数参数我们从代码中发现,在代码中way后紧跟圆括号,判断这是分别对a、b进行“某种”操作。
  • a、b: 列表分别表示两个班的成绩。

在第1调用时是平均分比较,结果是a班赢了。

compare(mean,[90,80,90],[100,50,100])

PS:平均分代码引用了statistics模块的mean,本函数用来计算列表的平均值。

4、匿名函数概念:

如果把每个函数形容成是固定下来的武术套路的话,有的时候简单的一两招,并不值得编成一个套路。自定义函数也是这样,匿名函数类似于简单的两招,它是简化版的函数,虽然没有自己的名称,也不能被重复使用,但是它必须返回值,使用匿名函数的目的就是快速计算。

在Python当中匿名函数又叫:lambda表达式,其语法如下:

lambda [arg1[, arg2, ... argN]]: expression
  • 以关键字lambda开头
  • 后紧跟参数列表,使用逗号分隔
  • 冒号后跟计算式,函数返回值就是计算式的结果

表达式本身可以当成一个函数来使用,常用的栗子如下。

5、排序

Python内置排序sorted函数,语法如下:

sorted(列表,key=排序关键字)
  • 参数key:返回关键字的函数(一般使用匿名函数)
  • 返回值:排序好的列表结果

排序时程序会把列表中的单个元素放入参数key指定的函数当中的参数里,根据返回的值进行排序。

天才小牛叔在写复旦大学的毕业论文,论文的标题都是类似于1、1.1、2之类的文本,如果简单按字符顺序排序必然会出现1、10、1.10、1.2 ...... 不合理的奇怪序列(字符总是从前到后比较那么10会比2小),比如如下的列表['10','1.1','1','2','1.3','3','2.10','2.2'],我们可以使用如下的代码:

>>> a = ['10','1.1','1','2','1.3','3','2.10','2.2']
>>> sorted(a)
['1', '1.1', '1.3', '10', '2', '2.10', '2.2', '3']
>>> sorted(a,key = lambda x:int(x.split('.')[0]) + (int(x.split('.')[1])/10000 if '.' in x else 0))
['1', '1.1', '1.3', '2', '2.2', '2.10', '3', '10']
>>> 

我们先看看key参数当中的匿名函数是什么:

---小牛书0基础Python系列教程---

【每天1篇1周入门,请点击下方的喜欢和收藏,以备学习】

小牛叔讲Python第11章:函数的高级用法以及匿名函数相关推荐

  1. 小牛叔讲Python第10章:化繁为简的推导式

    上一篇:小牛叔讲Python第9章:函数是你走过的套路 下一篇:小牛叔讲Python第11章:函数的高级用法以及匿名函数 目录 前言 1.推导式的形式 2.生成器 - () 3.推导式与交互使用 4. ...

  2. 小牛叔讲Python第12章:面向对象类与实例(Class入门)

    上一篇:小牛叔讲Python第11章:函数的高级用法以及匿名函数 下一篇:小牛叔讲Python第13章:类Class中的各种变量类型 小牛叔用轻松有趣的故事,带你进入Python的编程世界. 1.类 ...

  3. 小牛叔讲Python第8章:集合大家一起的快乐

    上一篇:小牛叔讲Python第7章:循环与条件的爱恨情仇 下一篇:小牛叔讲Python第9章:小牛叔讲Python第9章:函数是你走过的套路 1.前言 凛东将至,琼恩·雪诺当上司令官命令山姆威尔去南方 ...

  4. 小牛叔讲Python第5章:while循环-符合条件就带你一直飞

    上一篇:小牛叔讲Python第4章:条件语句-有时选择比努力更重要 下一篇:牛叔讲Python第6章:for循环-能计数的循环1234567 跟着小牛叔,找准Python入门姿势,每天只要阅读10分钟 ...

  5. Shell函数的高级用法

    Shell函数的高级用法 一.函数的定义和使用 1.语法格式 2.如何调用函数 3.示例演示 4.小脚本(nginx守护进程) 二.向函数传递参数 1.Shell中传参 2.Shell中函数调用 3. ...

  6. python用psf函数_Python 嵌套函数(高级用法)

    Python 嵌套函数(高级用法) 一.嵌套函数(高级用法) 1.嵌套函数 函数的嵌套调用是在"函数调用中再调用其他函数".也就是说:函数嵌套允许在一个函数中调用另外一个函数.如下 ...

  7. Go 学习笔记(16)— 函数(02)[函数签名、有名函数、匿名函数、调用匿名函数、匿名函数赋值给变量、匿名函数做回调函数]

    1. 函数签名 函数类型也叫做函数签名,可以使用 fmt.Printf("%T") 格式化参数打印函数类型. package mainimport "fmt"f ...

  8. Php中方法作用域,PHP 函数(下):匿名函数和作用域

    PHP 函数(下):匿名函数和作用域 由 学院君 创建于9个月前, 最后更新于 7个月前 版本号 #2 2282 views 1 likes 1 collects 匿名函数 从 PHP 5.3 开始, ...

  9. Python零基础速成班-第8讲-Python文件操作File IO、高级文件处理模块shutil、CSV、JSON、多线程基础

    Python零基础速成班-第8讲-Python文件操作File I&O.高级文件处理模块shutil.CSV.JSON.多线程基础 学习目标 文件操作File I/O 高级文件处理模块shut ...

  10. Python内置函数max()高级用法

    不管是排序还是选取最大值或者最小值,都应该有个规则或者顺序,而平时我们所说的最大值或最小值实际上也是在某种排序规则或顺序下的最大值和最小值.Python内置函数max().min()和sorted() ...

最新文章

  1. linux路由内核实现分析 四,linux路由内核实现分析(二)---FIB相关数据结构(4)
  2. Jquery入门详解
  3. ubuntu自动登录tty1(shell,text)配置
  4. DBA巡检常用的SQL语句
  5. 浅谈新一代Android操作系统Android L
  6. hover如何改变子元素或其他同级元素?(用不了怎么回事?)
  7. linux 内核 内存管理 初始化 页表
  8. Java数据结构:双向链表Double Linked List基础笔记
  9. Python3爬虫实战——QQ空间自动点赞程序(上)
  10. 三段式 matlab,1stopt三段式函数拟合
  11. ARINC818(FC-AV)协议,ADVB
  12. 手把手教你React Native接入聊天IM即时通讯功能-源码分享
  13. 两台电脑如何直接用一根网线传数据
  14. Makefile简单讲解
  15. 5G爆发前夜,谷歌微软争相豪赌的云游戏厉害在哪?
  16. 微信小程序 Page pages/Index/Index has not been registered yet.问题解决
  17. IVM格式(互动媒体)
  18. Go上的极简OpenGL开发笔记(一)(2020年)
  19. 解决STM32新增加函数出现Undefined symbol HAL_ADC_Init (referred from main.o). 问题
  20. JAVA JDK的环境变量配置(配有图片,超级详细)

热门文章

  1. 8.4 单片机按键介绍
  2. P1162 填涂颜色(BFS)
  3. Qt 之显示网络图片
  4. APP推广技巧:APP营销推广的八种渠道你一定要了解!
  5. Flutter图片裁剪
  6. 用计算机程序方式打开,怎么使用运行命令符打开电脑程序
  7. 命令提示符怎么以管理员方式打开
  8. 运行matlab报错 Runtime Error
  9. 回顾过去,展望未来 —— web唐和诚
  10. excel筛选中文或者筛选数字