匿名函数
匿名函数语法:lambda 参数1,参数2:函数 返回值表达式
适用场景:函数内部代码非常简单(通常只有一个返回值的表达式)
一般用于函数作为参数传递的场景
# 常规函数定义:
def func(x, y):
return x * y
# 匿名函数:
func2 = lambda x, y: x * y
res1 = func(11, 22)
res2 = func2(11, 22)
print(res1, res2)
# 运行结果为:
242 242
=========================================================================================
匿名函数应用场景
# 问题需求一:对下面的列表进行排序(规则:根据列表中每个元素的第二个值的大小进行排序)
li = [[1, 10, 32], [3, 22, 99], [2, 7, 77]]
# 备注:列表的 sort 方法中的参数 key 是用来接收排序的规则函数
li.sort(key=lambda x: x[1])
print(li)
# 运行结果为:
[[2, 7, 77], [1, 10, 32], [3, 22, 99]]

=========================================================================================
# 问题需求二:对下面的列表进行排序(规则:根据元素 name 字段的值的大小进行排序)
li2 = [{'id': 1, 'name': 100}, {'id': 7, 'name': 9}, {'id': 3, 'name': 1}]
li2.sort(key=lambda i:i["name"])
print(li2)
# 运行结果为:
[{'id': 3, 'name': 1}, {'id': 7, 'name': 9}, {'id': 1, 'name': 100}]
=========================================================================================
面试题:(挖坑的题目)
li = [lambda x: x * i for i in range(5)]
print(li)
for i in li:
res = i(4)
print(res)
=========================================================================================
偏函数
from functools import partial
# 内置函数 filter:过滤器
# 参数1:过滤规则函数,会根据函数的返回值来进行过滤
# 参数2:要进行过滤的可迭代对象
# 需求:获取列表中大于10的数据
li = [11, 22, 33, 44, 5, 6, 8, 55]
res = filter(lambda x: x > 10, li)
print(res)
print(list(res))
# ----------------------------
li1 = [1, 22, 3, 44, 5, 66, 7, 88, 9]
s1 = filter(lambda x: x > 10, li1)
li2 = [13, 24, 3, 4, 53, 6, 78, 8, 9]
s2 = filter(lambda x: x > 10, li2)
li3 = [2, 4, 3, 4, 51, 61, 7, 81, 9]
s3 = filter(lambda x: x > 10, li3)
# 偏函数的作用:可以用来固定函数的函数
my_filter = partial(filter, lambda x: x > 20)
res = my_filter(li2)
print(my_filter)
print(list(res))
# ----------------------------------------------------
def func(a, b, c):
print("a:", a)
print("b:", b)
print("c:", c)
func2 = partial(func, 11, 22)
func(11, 22, 33)
print("----------------------")
func2(33)
=========================================================================================
对批量的数据执行相同的函数
# 对批量的数据执行相同的函数
li = [11, 22, 33, 44, 55, 66, 77]
def handle_data(number):
return number * 2
# 将li中的元素,遍历,传入handle_data,再把结果放入一个新的列表
list(map(handle_data, li))
li2 = [handle_data(i) for i in li]
print(li2)
# 包含url地址的列表
li = ["http://www.baidu.com-{}".format(i) for i in range(10)]
def rueqsts(url):
print("请求:", url)
list(map(rueqsts, li))
=========================================================================================
all:迭代对象内所有的元素为真,返回 True
# all:迭代对象内所有的元素为真,返回 True
def work(name=None, age=None, sex=None):
if name and age and sex:
print('---成立01---')
if all([name, age, sex]):
print("---成立02---")
=========================================================================================
any:迭代对象内只要有一个元素为真,返回True
def work(name=None, age=None, sex=None):
if name or age or sex:
print('---成立01---')
if any([name, age, sex]):
print("---成立02---")
=========================================================================================
eval:识别字符串中有效的 python 表达式
str1 = "10 > 9"
print(str1)
print(eval(str1))
# str1 = "a = 109" # 报错,eval不能执行赋值语句
print(str1)
print(eval(str1))
=========================================================================================
exec:执行字符串中有效的 python 代码
str1 = """
def tian():
print("tian--100")
"""
exec(str1)
tian()
str1 = "a = 109"
print(str1)
print(exec(str1))
=========================================================================================
练习题三道
"""
1、现在有一个列表 li = [11,21,4,55,6,67,123,54,66,9,90,56,34,22],
请将 大于5的数据过滤出来,然后除以2取余数,结果放到一个生成器中
"""
def job1():
li = [11, 21, 4, 55, 6, 67, 123, 54, 66, 9, 90, 56, 34, 22]
res = (i % 2 for i in li if i > 5)
print(res)
job1()
"""
2、定义一个可以使用send传入域名,自动生成一个在前面加上http://,在后面加上路径/user/login的url地址,
生成器最多可以生成5个url,生成5条数据之后再去生成,则报错StopIteration
使用案例:
# 例如:
res = g.send('www.baidu.com')
# 生成数据res为:http://www.baidu.com/user/logim'
"""
def job2():
res = yield
for i in range(5):
res = yield f"http://{res}user/logim'"
g = job2()
next(g)
print("生成的数据:", g.send('www.hao121.com'))
print("生成的数据:", g.send('www.hao122.com'))
print("生成的数据:", g.send('www.hao123.com'))
print("生成的数据:", g.send('www.hao124.com'))
print("生成的数据:", g.send('www.hao125.com'))
# print("生成的数据:", g.send('www.hao126.com'))
"""
3、面试笔试扩展题
有一个正整数列表(数据是无序的,并且允许有相等的整数存在),
编写一个能实现下列功能的函数,传入列表array,和正整数X,返回下面要求的2个数据
def func(array, x)
'''逻辑代码'''
return count, li
1、统计并返回在列表中,比正整数x大的数有几个(相同的数只计算一次),并返回-----返回值中的的count
2、计算列表中比正整数X小的所有偶数,并返回 -----------返回值中的li
"""
def job3(array, x):
# 比正整数x大的数
count = len({i for i in array if i > x})
# 比正整数X小的所有偶数
li = [i for i in array if i < x and i % 2 == 0]
return count,li
res = job3([1,22,3,44,5,66,77,88],99)
print(res)
167

被折叠的 条评论
为什么被折叠?



