python 六剑客(匿名函数和内建函数)

一. 匿名函数lambda

1.lambda只是一个表达式,函数体比def简单很多。

2.lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去

>>> def add(a,b):
...     return a+b
...
>>> add(1,4)
5
>>>
>>> lambda x:x+2
<function <lambda> at 0x00000273C937B8C8>  #函数
>>>
>>> a=lambda x,y:x+y
>>> a(2,6)
8

>>> f = [lambda x:x*i for i in range(4)]
>>> f[1](1)
3
>>> f1 = [lambda i=i: i*i for i in range(4)]
>>> f1[3]()
9

二 . filter()函数

filter()函数是 Python 内置的有用高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,

返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。

例如,在一个list中,删掉偶数,只保留奇数,可以这么写:

def is_odd(n):
    return n % 2 == 1

filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])
结果: [1, 5, 9, 15]

学习了lambda函数后,可以一行搞定
>>> list(filter(lambda x:x%2, [1, 2, 4, 5, 6, 9, 10, 15]))[1, 5, 9, 15]
注意:python3 起,filter 函数返回的对象从列表改为 filter object(迭代器),想要使用的话加上list(),将迭代器转换成列表,例如:利用filter(),可以完成很多有用的功能,删除 None 或者空字符串:

>>> def not_empty(s):...     return s and s.strip()...>>> filter(not_empty, [‘A‘, ‘‘, ‘B‘, None, ‘C‘, ‘  ‘])<filter object at 0x0000020833998AC8>>>>>>> list(filter(not_empty, [‘A‘, ‘‘, ‘B‘, None, ‘C‘, ‘  ‘]))[‘A‘, ‘B‘, ‘C‘]

Python strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

三. map() 函数

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map(function, iterable, …)

    • function – 函数,有两个参数
    • iterable – 一个或多个序列
    • 将结果作为list返回
>>> def abc(a, b, c):...     return a*10000 + b*100 + c...>>> list1 = [11,22,33]>>> list2 = [44,55,66]>>> list3 = [77,88,99]>>> map(abc,list1,list2,list3)<map object at 0x0000023E269A8BE0>>>> list(map(abc,list1,list2,list3))[114477, 225588, 336699]

list(map(lambda x: x**2, range(5)))[0, 1, 4, 9, 16]

四.reduce()函数reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。

def add(x, y):

    return x + y

>>> reduce(add, [1, 3, 5, 7, 9])

25

调用 reduce(f, [1, 3, 5, 7, 9])时,reduce函数将做如下计算:

先计算头两个元素:f(1, 3),结果为4

再把结果和第3个元素计算:f(4, 5),结果为9

再把结果和第4个元素计算:f(9, 7),结果为16

再把结果和第5个元素计算:f(16, 9),结果为25

由于没有更多的元素了,计算结束,返回结果25

五. 切片

a=[1,2,3,4,5,6,7,8,9]
>>>
>>> a[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
>>>
>>> a[::4]    #步长为四
[1, 5, 9]

六.推导列表

[表达式 for 变量 in 列表]    或者  [表达式 for 变量 in 列表 if 条件]

例如,假设我们要创建一个平方数组成的列表,比如:

>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> print(squares)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>

我们也可以通过下面的方式获得相同的列表:

>>> squares = [x**2 for x in range(10)]
>>> [x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

下面推导列表是求字典中key为整型的数之和

>>> [key  for key in {1:‘a‘,2:"b","a":3} if isinstance(key,int)]
[1, 2]
>>> sum([key  for key in {1:‘a‘,2:"b","a":3} if isinstance(key,int)])
3

 

原文地址:https://www.cnblogs.com/liyujie1978/p/9586129.html

时间: 2024-11-12 16:39:50

python 六剑客(匿名函数和内建函数)的相关文章

python六剑客

python六剑客map.filter.reduce.lambda.切片.推导列表 python最有特点的一行代码,所有代码均可以借用一行代码(目标)map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回.举例说明,比如我们有一个函数f(x)=x%2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上,就可以用map()实现一个最简单的例子,如基于f(x) = x²,map()作用于lis

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是te

一句话搞定python六剑客

六剑客 一行搞定六剑客:三个函数:map filter reduce + lambda 切片 推导列表 python最有特点的一行代码,所有代码均可以借用一行代码(目标) 1.map(函数,列表或者字符串)#字符串或者列表中每个字符或每个元素都带入函数运算 1.map函数: 输出结果为列表 1)列表元素的map运算, >>> map(s,[1,2,3]) [2, 3, 4] 2)字符串元素的map运算,函数用lambda实现 >>> map(lambda x:x.upp

python六剑客:map()、lambda()、filter()、reduce()、推导类表、切片

一:map():映射 map()有两个参数,一个函数,一个序列,序列中每一个元素都会做为参数传给前边的函数,然后生成新的列表, 第二个参数必须用一个序列:元祖,列表,字符串 >>> map(str,[1,2,3,4])['1', '2', '3', '4'] 也可以自己定义函数 搭配lambda函数 >>> map(lambda x:x.upper(),"abc")['A', 'B', 'C'] 二:lambda匿名函数 lambda语句被用来创建新

Python的lambda匿名函数

lambda函数也叫匿名函数,即,函数没有具体的名称.先来看一个最简单例子: def f(x):return x**2print f(4) Python中使用lambda的话,写成这样 g = lambda x : x**2print g(4) lambda表达式在很多编程语言都有对应的实现.比如C#: var g = x => x**2Console.WriteLine(g(4)) 那么,lambda表达式有什么用处呢?很多人提出了质疑,lambda和普通的函数相比,就是省去了函数名称而已,同

python学习之---匿名函数,返回函数,偏函数

1. 返回函数: 所谓的返回函数,指的是函数作为返回值.高阶函数除了可以接受函数作为参数外,同样可以接受函数作为结果返回.以下是一个可变参数的求和例子,一般求和函数是如此这般定义的: 1 >>> def sum(*args): 2 ... ax = 0 3 ... for x in args: 4 ... ax += x 5 ... return ax 6 ... 以上函数一旦定义,在调用这个函数的时候,只要传入参数就会立刻执行.但是,如果条件需要不要立刻求和,而是在后面的代码中,根据需

Python学习 之 匿名函数

1.匿名函数(lambda函数):lambda函数是一种快速定义单行的最小函数,是从Lisp借用来的,可以用在任何需要函数的地方. 普通函数定义如下: def f(x,y): return x*yf(2,3) lambda函数定义如下: g=lambda x,y:x*yg(2,3) 2.使用lambda函数的好处 (1)使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简. (2)对于一些抽象的,不会在别的地方再复用的函数,有时候给函数起个名字是个难题,用la

python基础之匿名函数、内置函数

一 匿名函数 匿名函数就是不需要显式的指定函数. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lamba表达式中封装有限的逻辑进去. 语法:lambda函数的语法只包含一个语句,如下: lambda [arg1 [,arg2,.....argn]]:expression 先来个简单得: #这段代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10)) 换个高级点得:

Python递归函数与匿名函数

递归函数 Python对递归的深度有限制,超过即会报错.所以一定一要注意跳出条件. #斐波拉契数列 #一个数列,第一个数是1,第二个数也是1,从第三个数开始,每一个数是前两个数之和 #公式:f(1) =1, f(2) = 1, f(3) = f(1) + f(2), ..., f(n) = f(n-2) + f(n-1) #例如:1, 2, 3, 5, 8, 13, 21... def fib(n): if n == 1: return 1 elif n == 2: return 1 else: