|
Python函数本质上是一段代码的集合,扩展对于函数的高级用法,有利于更好的认识Python,函数是Python的核心。本篇扩展了函数的2个应用,一是把函数本身作为参数,二是介绍了匿名函数的应用。
1、以函数作为参数:
1.1 概念
Python里可以把函数本身当成是参数,比如Python内置函数map可以通过传入的函数返回值来一一映射列表集合里的元素,我们也可以在定义函数时,以调用函数的方式使用参数。
1.2 Map映射
假设有一个列表1至9共有9个元素,现在需要求其平方数列。map函数的示例- 1 >>> def square(x):
- 2 ... return x**2
- 3 ...
- 4 >>> s = map(square,[1,2,3,4,5,6,7,8,9])
- 5 >>> list(s)
- 6 [1, 4, 9, 16, 25, 36, 49, 64
复制代码
以上的代码,主要完成了如下的动作:
- 定义了square函数,返回参数的平方
- 调用map函数生成平方数列
在包含map语句,我们使用了先前定义的函数名称square,作为参数传入另一个函数,并且完成了映射的操作。
1.3 定义包含函数参数的函数
邓布利多校长想比较霍格沃茨学校两个班a,b的成绩,有两种比较方式,一种是比较最高分,另一种是比较平均分,我们用一个函数来搞定!- >>> 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])
复制代码 平均分代码引用了statistics模块的mean,本函数用来计算列表的平均值。
2、匿名函数:
2.1 概念
如果把每个函数形容成是固定下来的武术套路的话,有的时候简单的一两招,并不值得编成一个套路。我们定义函数也是这样,匿名函数类似于简单的两招,它是一种简化版的函数,它没有自己的名称,也不能被重复使用,但是它必须返回值,使用匿名函数的目的就是快速计算。
在Python当中匿名函数又叫:lambda表达式,其语法如下:- <em><strong>lambda [arg1[, arg2, ... argN]]: expression</strong></em>
复制代码
- 以关键字lambda开头
- 后紧跟参数列表,使用逗号分隔
- 冒号后跟计算式,函数返回值就是计算式的结果
表达式本身可以当成一个函数来使用,常用的栗子如下。
2.2 排序
Python内置排序sorted函数,语法如下:
- 参数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'],我们可以使用如下的代码:- 1 >>> a = ['10','1.1','1','2','1.3','3','2.10','2.2']
- 2 >>> sorted(a)
- 3 ['1', '1.1', '1.3', '10', '2', '2.10', '2.2', '3']
- 4 >>> sorted(a,key = lambda x:int(x.split('.')[0]) + (int(x.split('.')[1])/10000 if '.' in x else 0))
- 5 ['1', '1.1', '1.3', '2', '2.2', '2.10', '3', '10']
- 6 >>>
复制代码
我们先看看key参数当中的匿名函数是什么:
引申:Python语言把函数也当成是类似于一种包含代码的变量,函数本身可以类似于变量,作为传递的参数,这本是Javascript等类似函数式编程的方式。其实,函数也可以被当成是返回值。
---小牛书0基础Python系列教程---
【每天1篇1周入门,请点击下方的喜欢和收藏,以备学习】
来源:https://www.cnblogs.com/dosboy/p/17935352.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|