函数综合应用
函数综合应用
一、三元表达式
dog_name = "laowang"
# if dog_name == 'laowang':
# print("疯狂🐕")
# else:
# print("跑了")
print("疯狂🐕") if dog_name == 'laowang' else print("跑了")
二、列表生成式
lt = []
for i in range(10):
lt.append(i)
print(lt)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
下面只是秀操作,不推荐使用,否则只有你自己看得懂了。
lt = [i for i in range(10)]
print(lt)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
三、字典生成式
# 字典生成式一般与zip(拉链函数-->列表里面包了元组)连用
z = zip(['a', 'b', 'c', 'd'], [1, 2, 3, 4]) # 压缩方法,Python解释器的内置方法
for k, v in z:
print(k, v)
a 1
b 2
c 3
d 4
dic1 = {k: v for k, v in z}
print(dic1)
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
三、生成器
yield的英文单词意思是生产,在函数中但凡出现yield关键字,再调用函数,就不会继续执行函数体代码,而是会返回一个值。迭代器对象, 具有__iter__, __next__的方法
def func():
yield 34
print(4)
yield 45
print(89)
print(45)
g = func()
print(g)
<generator object func at 0x10ddb6b48>
生成器的本质就是迭代器,同时也并不仅仅是迭代器,不过迭代器之外的用途实在是不多,所以我们可以大声地说:生成器提供了非常方便的自定义迭代器的途径。并且从Python 2.5+开始,[PEP 342:通过增强生成器实现协同程序]的实现为生成器加入了更多的特性,这意味着生成器还可以完成更多的工作。
def func():
yield 34
print("打印", 4)
yield 45
print("打印", 89)
print("打印", 45)
f = func()
print(f.__next__())
print(f.__next__())
结果:
34
打印 4
45
def func():
yield 34
print("打印", 4)
yield 45
print("打印", 89)
print("打印", 45)
for i in func():
print(i)
结果:
34
打印 4
45
打印 89
打印 45
def sub_generator():
yield 1
yield 2
for i in range(3):
yield i
for i in sub_generator():
print(i)
1
2
0
1
2
def range(*args, sep=1):
args = list(args)
if len(args) == 3:
sep = args[-1]
if len(args) == 1:
count = 0
while count < args[0]:
yield count
count += sep
elif len(args) >= 2:
while args[0] < args[1]:
yield args[0]
args[0] += sep
for i in range(10, 20, 2):
print(i)
四、匿名函数
4.1 有名函数
我们之前定的函数都是有名函数,它是基于函数名使用。
def func():
print('from func')
func()
func()
func()
print(func)
from func
from func
from func
<function func at 0x10518b268>
4.2 匿名函数
匿名函数,他没有绑定名字,使用一次即被收回,加括号既可以运行。
语法:lambda 参数:<代码块>
res = lambda x, y: x + y(1, 2)
print(res)
4.3 与内置函数
匿名函数通常与max()、sorted()、filter()、sorted()方法联用。
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
-
.如果我们想对上述字典中的人,按照薪资从大到小排序,可以使用sorted()方法。
sorted()工作原理:
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值当做判断依据。
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
salary_list = list(salary_dict.items())
salary_list.sort(key=lambda x: x[1])
print(salary_list)
[('sean', 2000), ('nick', 3000), ('tank', 5000), ('jason', 100000)]
.如果我们想从上述字典中取出薪资最高的人,我们可以使用max()方法,但是max()默认比较的是字典的key。
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给key指定的函数,然后将该函数的返回值当做判断依据
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
salary_list = list(salary_dict.items())
# 对列表求最大值
print("max:", max(salary_list, key=lambda i: i[1]))
# 对列表求最小值
print("min:", min(salary_list, key=lambda x: x[1]))
max: ('jason', 100000)
min: ('sean', 2000)
3.如果我们想对一个列表中的某个人名做处理,可以使用map()方法。
map()工作原理:
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后将该函数的返回值作为map()方法的结果之一。
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
salary_list = list(salary_dict.items())
# map函数
print('map:', list(map(lambda x: x[1]+200, salary_list)))
map: [2200, 3200, 5200, 100200]
4.如果我们想筛选除名字中含有'sb'的名字,我们可以使用filter()方法。
filter()工作原理:
- 首先将可迭代对象变成迭代器对象
- res=next(迭代器对象),将res当做参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下。
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000
}
salary_list = list(salary_dict.items())
# filter函数
print("filter: ", list(filter(lambda x: x[1] < 5000, salary_list)))
filter: [('sean', 2000), ('nick', 3000)]