漫天飞雪

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


1.三元表达式
三元表达式实现的效果就是:条件成立的情况下返回一个值,不成立的情况下返回另外一种值
语法格式:
条件成立情况下返回的值 if 条件 else 条件不成立情况下返回的值 #这一行代码就是一个三元表达式
自身就是一个返回值,可以使用res=三元表达式,进行返回值接收。

实例
name=input('your name: ').strip()
res="正确" if name == 'joke' else "错误"
print(res)
2.列表生成式
定义
列表生成式就是一个用来生成列表的特定语法形式的表达式。就是生成一个新的列表,以一种简便,快捷的方式实现

为了保持代码的简洁,一般情况下不建议进行2层或者更多的for循环嵌套。
应用场景
其实列表生成式也是Python中的一种“语法糖”,也就是说列表生成式应该是Python提供的一种生成列表
的简洁形式,应用列表生成式可以快速生成一个新的list。它最主要的应用场景是:根据已存在的可迭代
对象推导出一个新的list。
语法格式:
[exp for iter_var in iterable if_exp]
exp-》以表达式,或以最终实现需求的结果新式进行重新定义,目的是实现对循环出来的iter_var的值进行计算,然后生成新的列表
for iter_var in iterable-》是从iterable列表中循环遍历,每个值
if_exp-》是一个限定条件,如果新生成的list列表中过滤掉不想要的元素,需要写上过滤条件

如果存在过滤条件,每次遍历出值时,就会进行一次if条件的判定。
案例:
1.无过滤条件
list01 = [2*x+1 for x in range(3, 11)]
2.有过滤条件
L = [3, 7, 11, 14,19, 33, 26, 57, 99]
list02 = [x for x in L if x > 20]

3.enumerate() 函数:枚举函数
定义
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,
同时列出数据和数据下标,一般用在 for 循环当中。
语法格式
enumerate(sequence, [start=0])
sequence -》 一个序列、迭代器或其他支持迭代对象。
start -》 下标起始位置。
实例
>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1)) # 小标从 1 开始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

4.字典生成式
定义
字典生成式就是一个用来生成字典的特定语法形式的表达式。
语法格式
keys=[] values=[]
方式1
{k:v for k,v in zip(keys,values) if 判定语句}
方式2 枚举函数形式
{k:vals[i] for i,k in enumerate(keys) if 判定语句}

keys-》所需键的列表
values-》所需值得列表
k-》是取出键时赋值的变量
v-》是取出值时赋值的变量
for k,v in -》使用for循环依次遍历出对应的 键-值
if 判定语句-》按照if条件进行过滤生成所需要的字典
实例
keys=['name','age','sex']
vals=['egon',18,'male']
1.无限定条件
dic={k:vals[i] for i,k in enumerate(keys)}
print(dic)
输出结果
{'name': 'egon', 'age': 18, 'sex': 'male'}
2.有限定条件
dic={k:vals[i] for i,k in enumerate(keys) if i > 0}
print(dic)


3. 匿名函数与内置函数
1.匿名函数
定义:即不再使用 def 语句这样标准的形式定义一个函数。python是使用lambda来创建匿名函数
lambda知识一个表达式,比def定义的函数简单很多
语法格式
lambda [arg1 [,arg2,.....argn]]:expression
args---》变量
expression--》表达式
使用场景
1.使用匿名函数省去了定义函数的过程,快速方便
2.遇到不再重复使用的函数,就不需要按照def标准格式重新定义函数,直接使用lambda以一种行代码的形式
让代码更加精简。
3.lambda定义一些简单的函数,会更加易读
实例
def sum2(x,y):
return x+y
# print(lambda x,y:x+y)
输出结果
<function <lambda> at 0x02CC54F8>
输出的是lambda的内存地址,类似def定义的一个func的函数名,在func函数名前没加不加()时,
输出的就是函数的内存地址
# print((lambda x,y:x+y)(1,2))
输出结果
3 #在匿名函数的外面加上了()代表在调用该函数,所以执行了函数内部的代码

2.内置函数
max 最大值
min 最小值
map 映射
filter 过滤
reduce 合并
匿名函数和内置函数结合使用
使用一个字典进行举例说明匿名函数和内置函数结合在一起是如何工作的

实例:
salaries={
'egon':300000,
'alex':100000000,
'wupeiqi':10000,
'yuanhao':2000
}
max 最大值
需求是按照提供的薪资,输出薪水最多的人名
max(salaries,key=lambda name:salaries[name])
max-》对salaries进行循环
key=lambda name-》是指定一个name的关系,使得比较薪资时是values,但是最终输出的是薪资对应的人名。
salaries[name]-》将对应的name键的值取出,一一取出完成后,使用max内置函数进行薪资比较。

min 最小值
需求是按照提供的薪资,输出薪水最少的人名
min(salaries,key=lambda name:salaries[name])
max-》对salaries进行循环
key=lambda name-》是指定一个name的关系,使得比较薪资时是values,但是最终输出的是薪资对应的人名。
salaries[name]-》将对应的name键的值取出,一一取出完成后,使用min内置函数进行薪资比较。

sorted 排序
sorted(salaries,key=lambda name:salaries[name],reverse=True)

map 映射
names=['alex','lxx','wxx','yxx']
res=map(lambda name: name + "+welcome", names)
print(list(res))
输出结果
['alex+welcome', 'lxx+welcome', 'wxx+welcome', 'yxx+welcome']

names->循环遍历出names列表的每个元素
name + "welcome"-》每个元素后面加上welcome
map是新生成的一个列表,需要进行list(res)的转换,在python3中是这样,
但是在python2中时直接输出的就是一个列表,无需list进行转换

filter 过滤
从一个列表中过滤出符合我们过滤规则的值
运行原理:相当于for循环取出每一个人名,然后传给匿名函数,将调用匿名函数返回值为True的那个人名给留下来
names=['alex_welcome','lxx_welcome','wxx_welcome','egon','yxx']
res=filter(lambda name:name.endswith('welcome'),names)
print(list(res))

reduce 合并,把多个值合并成一个结果
from functools import reduce #调用functools的reduce模块
list01=['a','b','c','d'] #将list01字符串合并在一起

res=reduce(lambda x,y:x+y,list01,'A')
print(res)
Aabcd
‘A’的意思是初始化合并时加上A,可以不加,不加的话默认是无
res=reduce(lambda x,y:x+y,list01)
print(res)
abcd

posted on 2018-12-26 20:26  漫天飞雪世情难却  阅读(114)  评论(0编辑  收藏  举报