欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)

Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)

2025/3/13 11:01:43 来源:https://blog.csdn.net/NEET_LH/article/details/146180562  浏览:    关键词:Python个人学习笔记(14):函数(匿名函数、内置函数(下)、三元表达式)

九、匿名函数

lambda表达式
语法规则:
变量 = lambda 参数1,参数2,…:返回值
例:用lambda简化下述操作

def func(a,b):return a+b
ret = func(1, 2)
print(ret)

代码:

fn = lambda a,b:a+b
print(fn)
print(fn(12,13))

结果:

<function <lambda> at 0x000001E751EAAF20>
25

可以帮我们一句话创建函数
可以与某些内置函数一起用

十、内置函数(下)

(一)zip:可以把多个可迭代内容进行合并

zip自动实现如下操作:
代码:

lst1 = ["赵本山","范伟","苏有朋"]
lst2 = [40,38,42]
lst3 = ["卖拐","耳朵大有福","情深深雨濛濛"]result = []
for i in range(len(lst1)):first = lst1[i]second = lst2[i]third = lst3[i]result.append((first,second,third))
print(result)

结果:

[('赵本山', 40, '卖拐'), ('范伟', 38, '耳朵大有福'), ('苏有朋', 42, '情深深雨濛濛')]

代码:

result = zip(lst1, lst2, lst3)
print(result)
print(dir(result)) # 查询功能lst = list(result)
print(lst)

结果:

<zip object at 0x000001E1A9C563C0>
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__'] # 包含迭代器功能

既然是迭代器,那么就可以用for循环拿到元素
代码:

for item in result:print(item)

结果:

('赵本山', 40, '卖拐')
('范伟', 38, '耳朵大有福')
('苏有朋', 42, '情深深雨濛濛')

还可以放到一个列表中
代码:

lst = list(result)
print(lst)

结果:

[('赵本山', 40, '卖拐'), ('范伟', 38, '耳朵大有福'), ('苏有朋', 42, '情深深雨濛濛')]

(二)locals、globals(了解)

locals:查看当前位置所有的局部变量
如果locals写在了全局作用域范围内,此时看到的就是全局作用域中的内容。
代码:

lst1 = ["赵本山","范伟","苏有朋"]
lst2 = [40,38,42]
lst3 = ["卖拐","耳朵大有福","情深深雨濛濛"]
a = 188
print(locals())

结果:

'__cached__': None, 'lstat': <built-in function lstat>, 'lst1': ['赵本山', '范伟', '苏有朋'], 'lst2': [40, 38, 42], 'lst3': ['卖拐', '耳朵大有福', '情深深雨濛濛'], 'a': 188}

如果locals放在局部作用域范围,看到的就是局部作用域的内容
代码:

def func():a=336print(locals())func()

结果:

{'a': 336}

globals:不管写在哪,看到的都是全局作用域中的变量

(三)sorted:排序

1. 语法规则:

sorted(可迭代的, key=排序函数,reverse=True/False是否翻转,否则为从小到大)

代码:

lst = [16,22,34,68,1,213,324,49]
s = sorted(lst) # 从小到大
print(s)
s1 = sorted(lst,reverse=True) # 翻转,从大到小
print(s1)

结果:

[1, 16, 22, 34, 49, 68, 213, 324]
[324, 213, 68, 49, 34, 22, 16, 1]

2. 对字符串排序

sorted把列表中的每一项传递给排序函数,然后排序函数返回相应的值,最后根据返回值进行排序
要求:以字符串长短排序
代码:

lst = ["秋","张二嘎","比克","卡卡罗特","超级宇宙无敌大帅B"]def func(item): # item对应列表中的每一项数据return len(item)s = sorted(lst,key=func) # func后不要加(),否则变成调用函数了
print(s)

结果:

['秋', '比克', '张二嘎', '卡卡罗特', '超级宇宙无敌大帅B']

函数改成lanbda形式

lst = ["秋","张二嘎","比克","卡卡罗特","超级宇宙无敌大帅B"]
func = lambda x: len(x)
s = sorted(lst,key=func)
print(s)

由于排序函数在后文几乎不会用到,所以可以进一步简化

lst = ["秋","张二嘎","比克","卡卡罗特","超级宇宙无敌大帅B"]
s = sorted(lst,key=lambda x: len(x))
print(s)

一般情况下,lambda配合sorted使用

3. 对列表排序

lst = [{"id": 1, "name": "周润发", "age": 18, "salary": 56000},{"id": 2, "name": "周星驰", "age": 28, "salary": 51100},{"id": 3, "name": "周海媚", "age": 78, "salary": 56123},{"id": 4, "name": "周伯通", "age": 12, "salary": 513414},{"id": 5, "name": "周大兴", "age": 35, "salary": 563123},{"id": 6, "name": "周有辣", "age": 47, "salary": 561240},{"id": 7, "name": "周扒皮", "age": 8, "salary": 2310},
]

要求1:根据每个人的年龄排序
代码:

s = sorted(lst, key=lambda d: d["age"])
print(s)

结果:

[{'id': 7, 'name': '周扒皮', 'age': 8, 'salary': 2310}, {'id': 4, 'name': '周伯通', 'age': 12, 'salary': 513414}, {'id': 1, 'name': '周润发', 'age': 18, 'salary': 56000}, {'id': 2, 'name': '周星驰', 'age': 28, 'salary': 51100}, {'id': 5, 'name': '周大兴', 'age': 35, 'salary': 563123}, {'id': 6, 'name': '周有辣', 'age': 47, 'salary': 561240}, {'id': 3, 'name': '周海媚', 'age': 78, 'salary': 56123}]

要求2. 根据工资从大到小排列
代码:

s = sorted(lst, key=lambda d: d["salary"], reverse=True)
print(s)

结果:

[{'id': 5, 'name': '周大兴', 'age': 35, 'salary': 563123}, {'id': 6, 'name': '周有辣', 'age': 47, 'salary': 561240}, {'id': 4, 'name': '周伯通', 'age': 12, 'salary': 513414}, {'id': 3, 'name': '周海媚', 'age': 78, 'salary': 56123}, {'id': 1, 'name': '周润发', 'age': 18, 'salary': 56000}, {'id': 2, 'name': '周星驰', 'age': 28, 'salary': 51100}, {'id': 7, 'name': '周扒皮', 'age': 8, 'salary': 2310}]

(四)filter:筛选

自动提取需要的内容
语法规则:
filter(函数,可迭代对象)
列表元素依次当做参数传递给函数,函数判定之后再决定是否保留
filter是个生成器

lst = ["张无忌","张三丰","张翠山","灭绝小师太","小狐仙"]

要求1:提取姓张的人
代码:

f = filter(lambda x: x.startswith("张"),lst)
print(list(f))

结果:

['张无忌', '张三丰', '张翠山']

要求2:不要姓张的人
代码:

f = filter(lambda x: not x.startswith("张"),lst)
print(list(f))

结果:

['灭绝小师太', '小狐仙']

(五)map:映射

map(函数,可迭代对象)
列表中的每一个元素,经过函数计算之后得到的值,作为最终结果保留
map是一个生成器

lst = [1,2,3,4,5,6,7,8,9]

要求:对每一项计算平方
代码:

r = map(lambda x: x * x, lst)
print(list(r))

结果:

[1, 4, 9, 16, 25, 36, 49, 64, 81]

也可以不用map实现

result = [item * item for item in lst]
print(result)

后续数据分析的内容中,有些时候是列表推导式解决不了的,只能用map

十一、三元表达式(了解)

各大语言都有三元表达式。
目的是把简单的if判断写成一行。
语法:
结果1 if 条件 else 结果2
过程:
判断条件是否为真,如果真,返回结果1,否则返回结果2
代码:

a = 10
b = 20
c = a if a > b else b
print(c)

作用等同于:

if a > b:print(a)
else:print(b)

结果:

20

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词