lambda匿名函数和他的小伙伴

lambda匿名函数

主要是为了解决一些简单的需求而设计的一句话函数

#计算n的n次方
def func(n):
    return n**n
print(func(3))  #27

f = lambda n : n ** n
print(func(3)) #27

语法: 函数名 = lambda 参数 : 返回值

注意:

  • 函数的参数可以有多个, 多个参数之间用逗号分开
  • 匿名函数不管多复杂, 只能写一行, 并且逻辑结束后直接返回数据
  • 返回值和正常的函数一样,可以是任意数据类型.
x = lambda a,b : a+b
print(x(1,4))  #5

匿名函数lambda的函数名是a, 之所叫匿名函数是因为通过__name__查的时候用的都是统一的名字lambda,这一点和普通函数不一样

def func(n):
    return n*n

a = lambda n : n * n
print(a(5))                  #25

print(func.__name__)  #查看函数的名字  func
print(a.__name__)      #<lambda>
对比一下查到的函数名

lambda函数中的一个坑,面试很常见

普通函数
def func(x,y):
    return x,y
print(func(1,2))   #(1,2)

返回的是一个元组, 但是通过lambda怎么实现呢?

lmd1 = lambda x,y : x , y
print(lmd1(1,2))

#NameError: name ‘y‘ is not defined
结果会报错, 因为程序会把这个lambda表达式看成一个元组:
第一个元素是    lambda x,y : x
第二个元素是    y

怎么可以实现普通函数一样的结果呢

lmd2 = lambda x, y : (x,y)
print(lmd2(1,2))  #(1,2)

sorted()  排序函数

语法: sorted(iterable, key=None, reverse=False)

iterable: 可迭代对象

key: 排序规则(排序函数), 在sorted内部会将可迭代对象中的每一个元素传递给这个函数的参数

根据函数的运算结果进行排序

reverse: 是否要倒序. True就是倒序

之前讲过普通数列的排序

lst = [11,9,23,13,43,19,8]
lst.sort() #list的方法
print(lst) #[8, 9, 11, 13, 19, 23, 43]
内置函数sorted() 提供的通用的排序方法 所有的可迭代的对象都能用

lst = [11,9,23,13,43,19,8]
s = sorted(lst)
print(s)

dic = {1:"a",3:"c",2:"b"}
dic2 = sorted(dic)
print(dic2) #[1, 2, 3] 对于字典返回的是key值的排序

sorted()和函数组合使用

按照字符串的长度排序
lst = ["西游记","三国演义","葫芦娃","亮剑"]
def func(s):
    return len(s)

ll = sorted(lst, key=func, reverse=True) #加上reverse就会反向排序
print(ll) #[‘三国演义‘, ‘西游记‘, ‘葫芦娃‘, ‘亮剑‘]

key是排序方案,sorted函数内部会把可迭代对象中的每一个元素拿出来交给后面的key
后面的key算出一个数字,作为当前这个元素的权重,整个函数根据权重重新排序

sorted() 和lambda配合使用

lst = [{"name":"汪峰","age":48},
       {"name":"章子怡", "age":30},
       {"name":"alex123","age":33}
       ]
def func(el):
    return el["age"]

ll = sorted(lst, key=func) #和普通函数一起使用 根据年纪排序
print(ll)
#[{‘name‘: ‘章子怡‘, ‘age‘: 30}, {‘name‘: ‘alex‘, ‘age‘: 33}, {‘name‘: ‘汪峰‘, ‘age‘: 48}]

l2 = sorted(lst, key=lambda el: el["age"], reverse=True) #根据年纪 倒序排列 从大到小
print(l2)
#[{‘name‘: ‘汪峰‘, ‘age‘: 48}, {‘name‘: ‘alex‘, ‘age‘: 33}, {‘name‘: ‘章子怡‘, ‘age‘: 30}]

l3 = sorted(lst, key=lambda el: len(el["name"]), reverse=True) #根据名字的长度
print(l3)
#[{‘name‘: ‘alex‘, ‘age‘: 33}, {‘name‘: ‘章子怡‘, ‘age‘: 30}, {‘name‘: ‘汪峰‘, ‘age‘: 48}]

filter()筛选函数

语法: filter(function, iterable)

function:用来筛选的函数. 在filter中会自动把iterable中的元素传递给函数,然后函数根据返回的True或者Fasle判断是否保留这个数

iterable: 可迭代对象

#把iterable里的每一个值传递给func,判断True 还是False, 最后把判断结果是True的返回
#把姓张的名字过滤掉

lst = ["张无忌", "张铁林", "赵一宁", "石可心","马大帅"]
f = filter(lambda el: el[0] != "张",lst)
# print(f) #<filter object at 0x01CE5690>
# print("__iter__" in dir(f))#True  判断一下f 是不是可以迭代对象
for i in f:
    print(i)结果:赵一宁石可心马大帅
#当func是None的时候, 过滤出来的是可迭代对象里面的不为空的值 

lst = [1,2,3,4,[],{},None]
f = filter(None,lst)
for i in f:
    print(i)
结果是
1
2
3
4

map() 映射函数

语法: map(function, iterable) 对可迭代对象中的每一个元素进行映射, 分别取值执行function

#计算相同位置的和  和zip()一样有水桶效应 根据list中元素少的那个计算求和
lst = [1,3,5,7,9]
lst2 = [2,4,6,8,10]
m = map(lambda x,y: x+y, lst,lst2)
print(list(m))  #[3, 7, 11, 15, 19]
计算列表中每个元素的平方,返回一个新列表
print(list(map(lambda x: x * x, [1,2,3,4])))
#[1, 4, 9, 16]

原文地址:https://www.cnblogs.com/kenD/p/9482083.html

时间: 2024-12-08 04:45:33

lambda匿名函数和他的小伙伴的相关文章

c++11 lambda(匿名函数)

#include <iostream> #include <functional> using namespace std::placeholders; //lambda即匿名函数 int main() { int a = 10; //当return所有的返回都是一个类型就不需要指定返回值的类型,因为编译器会自动推断 //也可以指定返回值类型形式:[]()->int{return 1}; //格式:[captures] (params) -> ret {Statment

python: lambda 匿名函数

lambda 匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中,对匿名函数提供了有限支持.还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数: >>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) [1, 4, 9, 16, 25, 36, 49, 64, 81] 通过对比可以看出,匿名函数lambda x: x *

20180720 (lambda匿名函数,sorded()排序函数,filter()筛选函数,map()映射函数,递归,二分函数)

一.lambda匿名函数           (一行搞定一个函数,但是不能完成复杂的函数操作) 语法:函数名 = lambda 参数 : 返回值 注意: 1.函数的参数可以有多个,多个参数之间用逗号隔开 2.匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回数据 3.返回值和正常的函数一样,可以是任意数据类型 例如:普通函数 def func(n) return n*n print(func(6))               ======>36 例如:lambda a = lambda x

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学习之lambda匿名函数

1 Python支持运行时使用“lambda”建立匿名函数(anonymous functions that are not bound to a name). python "lambda"和functional programming语言有区别,但是他非常强大经常拿来和诸如filter(),map(),reduce()等经典概念结合. 以下示例普通函数和匿名函数: 1 In [113]: def normalFun (x): return x**2 2 3 In [114]: pr

Python 3 之 lambda匿名函数详解

------- lambda ------------------------------------- 除了def语句之外,Python还提供了一种生成函数对象的表达式形式.由于它与LISP语言中的一个工具很相似,所以称为lambda.就像def一样,这个表达式创建了一个之后能够调用的函数,但是它返回了一个函数而不是将这个函数赋值给一个变量名.这也就是lambda有时叫做匿名函数的原因.实际上,他们常常以一种行内进行函数定义的形式使用,或者用作推迟执行一些代码. lambda表达式 lambd

lambda匿名函数

转自廖雪峰老师文章 匿名函数lambda x: x * x实际上就是: def f(x): return x * x 关键字lambda表示匿名函数,冒号前面的x表示函数参数. 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. 用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突.此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: >>> f = lambda x: x * x >>> f

python lambda匿名函数

Python的一个很重要的方面就是:函数式编程(functional programming),即可以再原本传递参数和值的地方传递函数. lambda x: x%3 == 0 和以下等价: def by_three(x): return x %3 == 0 我们不需要真的给函数一个名字,其也可以工作并获得结果.这就是lambda创建的函数为匿名函数的原因. eg. my_list = range(16) print filter(lambda x: x % 3 == 0, my_list) 运行

Python lambda匿名函数,递归应用

import os '''Lambda函数能接收任何数量的参数但只能返回一个表达式的值匿名函数不能直接调用print,因为lambda需要一个表达式'''sum = lambda x, y: x + yprint('x+y=', sum(2, 6)) '''匿名函数应用''' def test_nm(a, b, func):result = func(a, b)return result print(test_nm(20, 30, lambda x, y: x * y))print(test_n