python常见高级用法

2019-07-07  本文已影响0人  从小白到全栈

Lambda匿名函数

匿名函数就是没有定义函数名称,可以实现函数某些简单功能

匿名函数格式:

lambda param_list:expression

#param_list,参数列表

#expression,建议书写一些简单的表达式,没法完整实现复杂代码块内容

f=lambda x,y:x+y

data=f(2,6)

print(data)

以上代码实现了一个x+y的值,先把匿名函数赋值给一个变量f,调用f传入两个参数,赋值给data,然后打印data。lambda匿名函数也可以和三元表达式一起使用。

f =lambda x,y: x+yif x>yelse x-y

data = f(8,7)

print(data)

上述代码的意思是匿名函数传入两个参数,如果x>y返回x+y,否则返回x-y。

三元表达式

在Java中三元表达式的表示是:x>=y?x+y:x-y,如果x>=y为true,则返回?后面的值,否则返回:后面的值

但是在python中不是这样的,格式:

条件为真的结果 if 条件判断 else 条件为假的结果

f = lambda x: x if x.islower() else x.upper()

data=f("hello")

print(data)

上述代码的意思是传入一个单词x,如果全部都是小写则返回小写,否则返回大写

高阶函数

map(func,*iterables)

#func,表示可接收一个函数

#*iterables,表示可接收一个可迭代的序列

a = [1,2,3,4,5]

b =map(lambda x:x**3,a)

print(list(b))

上述代码有一个列表a,使用map里面传入一个匿名函数和可迭代序列a,赋值给b变量,这个时候b是一个对象不能直接打印,需要转成列表

a = [1,2]

b = [1,2,3,4]

c =map(lambda a,b:a+b,a,b)

print(list(c))

上述代码是返回两个列表相加的结果集,但是两个列表长度不同,结果会怎么样呢?结果是[2,4],在map中,如果两个列表长度不一,则会返回长度较短的结果集。

reduce(function,sequence[,initial]) #这个函数需要手动导入 from functools import reduce

#function,接收一个函数

#sequence,接收一个可迭代序列

#initial,初始运算的值

from functoolsimport reduce

a=[1,2,3,4,5]

num = reduce(lambda x,y:x*y,a,100)#这里给第三个参数初始值为100,运算方式是100*1*2*3*4*5

print(num)

上述代码是计算列表a各个元素的乘积,再来说说第三个参数initial,初始运算的值

,这个参数是会最先运算。reduce适用于连续计算。

filter(function,iterable)#用于元素过滤

#function 接收一个函数

#iterable接收一个可迭代序列

a=[0,1,2,3,4,5,6]

b =filter(lambda x:True if x!=0 else False,a)#bool(1)为True,bool(2)为False,可以简化成lambda x:x,a,当为0的时候为False,不为0的时候为True

print(list(b))

上述代码是将a列表中不为0的数添加到b集合,filter返回结果必须是True或False

列表推导式

基本格式:

variable=[i for i in input_list if 条件判断]

#variable,列表名,可自定义

# i 循环变量名

# input_list,可迭代序列

# if 条件判断,如果不写,默认所有条件都成立

d={'apple':1,'banana':2,'pear':3}

b = [ifor iin d.keys()]

print(b)

上述代码是将字典中的键保存到一个列表中

d={'apple':1,'banana':2,'pear':3}

b = { value:keyfor key,valuein d.items()}

print(b)

上述代码是将字典中的键值替换位置

上一篇 下一篇

猜你喜欢

热点阅读