匿名函数及内置函数

1 匿名函数

python 使用 lambda 来创建匿名函数
语法:lambda [arg1 [,arg2,.....argn]]:expression
lambda 只是一个表达式,函数体比 def 简单很多。 
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。 
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。 
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。 
# 可写函数说明
#创建一个lambda表达式,并把它赋值给一个变量以便于调用
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))

print ("相加后的值为 : ", sum( 20, 20 ))

输出结果为: 

相加后的值为 : 30 

相加后的值为 : 40

2 三个重要的大数据用到的函数:

python map()
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
举例说明:
list1=[1,2,3,4,5,6]#对list1中的每个元素进行+1的操作,还可以把lambda函数换成更复杂的函数
list2=list(map(lambda x:x+1,list1))
print(list2)
以上实例输出结果为: 
[2, 3, 4, 5, 6, 7] 
python filter()函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的迭代器对象。 
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新对象中。 
基本语法为:filter(function, iterable) 

同样的:function – 判断函数。 iterable – 可迭代对象。 

举例说明:

def is_odd(n):    return n % 2 == 1 
newlist = filter(lambda x:x%2=1, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newlist=list(newlist)
print(newlist)
输出结果:

[1, 3, 5, 7, 9] 

要注意: map()函数返回的是一个迭代器(对象),所以并不能直接打印输出一个列表,需要把这个迭代器对象转换成列表才可以打印输出。

python reduce()函数
reduce() 函数会对参数序列中元素进行累积。 
基本语法为:reduce(function, iterable) 

其中:function – 函数,有两个参数 。iterable – 可迭代对象 

python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。

reduce()还可以接收第3个可选参数,作为计算的初始值。如果把初始值设为100,计算:
reduce(f, [1, 3, 5, 7, 9], 100)
结果将变为125,因为第一轮计算是:
计算初始值和第一个元素:f(100, 1),结果为101。

举例说明:

form functools import reduce
# 两数相加
def add(x, y) :            
    return x + y
# 计算列表和:1+2+3+4+5
print(reduce(add, [1,2,3,4,5])) 
#也可以使用lambda函数来进行操作,一下是进行7-3-2的操作
print(reduce(lambda x,y:x-y,[7,3,2]))  

输出结果为:15和 2 

3 python中的sorted()函数与.sort()方法

sort()函数 
基本语法为:list.sort(cmp=None, key=None, reverse=False) 
cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。 
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。

#先定义一个列表,内部元素无序排列
aList = ['Google', 'Runoob', 'Taobao', 'Facebook']
aList.sort()
print ( "List : ", aList)
输出结果为:List : ['Facebook', 'Google', 'Runoob', 'Taobao'] 
在来看一个例子:
list=["delphi","Delphi","python","Python","c++","C++","c","C","golang","Golang"]  
list.sort(key=lambda ele:len(ele)) #按元素长度顺序升序排列  
print("升序:",list)  
list.sort(key=lambda ele:len(ele),reverse=True) #按降序排列  
print("降序:",list)
#借助于 lambda 表达式,计算 list 列表中的元素的长度,根据元素的长度进行排序。 
排序的结果: 
升序: ['c', 'C', 'c++', 'C++', 'delphi', 'Delphi', 'python', 'Python', 'golang', 'Golang'] 
降序: ['delphi', 'Delphi', 'python', 'Python', 'golang', 'Golang', 'c++', 'C++', 'c', 'C']
sorted()函数 
sorted() 函数对所有可迭代的对象进行排序操作。 
基本语法为:sorted(iterable, key=None, reverse=False) 
iterable – 可迭代对象。 
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 
reverse – 排序规则,reverse = True 降序 , reverse = False 升序(默认)。 
list1 = [5, 0, 6, 1, 2, 7, 3, 4]
#利用key进行倒序排序
list2 = sorted(list1, key=lambda x: x*-1)
print(list2)
输出结果为:[7, 6, 5, 4, 3, 2, 1, 0] 
也可以用reverse来进行倒序排序:
example_list = [5, 0, 6, 1, 2, 7, 3, 4]
print(sorted(example_list, reverse=True))
输出结果也是:[7, 6, 5, 4, 3, 2, 1, 0] 
还可以这么用:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
print(sorted(students, key=lambda s: s[2]))            # 按年龄排序
列表里的每一个元组都是一个元素,key=lambda s: s[2]就是按照每个元素索引值为2的那个值进行排序,也就是年龄。lambda还可以换成其他的自定义函数。 
输出结果为:[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
sort 与 sorted 区别: 
sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 
list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

函数的调用与引用的区别

在python中,函数的调用需要在函数名后面加(),而函数的引用就不需要加括号。 
在调用函数的时候,需要按照定义函数时的参数设置进行传参
#定义一个tset1函数
def tset1(a,b,func):
    print(func(a,b))
def test2(c,d):
    return c+d
#调用test1函数,对应的将5的引用传递给a,6的引用传递给b,将tese2的引用传递给func
tset1(5,6,test2)
#因为test2的引用指向的是一个函数体,所以func也指向了这个函数体。
输出结果为:11 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值