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

九、匿名函数

lambda表达式

语法规则:

变量 = lambda 参数1,参数2,...:返回值

例:用lambda简化下述操作

python 复制代码
def func(a,b):
    return a+b
ret = func(1, 2)
print(ret)

代码:

python 复制代码
fn = lambda a,b:a+b
print(fn)
print(fn(12,13))

结果:

python 复制代码
<function <lambda> at 0x000001E751EAAF20>
25

可以帮我们一句话创建函数

可以与某些内置函数一起用

十、内置函数(下)

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

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

python 复制代码
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)

结果:

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

代码:

python 复制代码
result = zip(lst1, lst2, lst3)
print(result)
print(dir(result)) # 查询功能

lst = list(result)
print(lst)

结果:

python 复制代码
<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循环拿到元素
代码:

python 复制代码
for item in result:
    print(item)

结果:

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

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

python 复制代码
lst = list(result)
print(lst)

结果:

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

(二)locals、globals(了解)

locals:查看当前位置所有的局部变量

如果locals写在了全局作用域范围内,此时看到的就是全局作用域中的内容。
代码:

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

结果:

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

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

python 复制代码
def func():
    a=336
    print(locals())

func()

结果:

python 复制代码
{'a': 336}

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

(三)sorted:排序

1. 语法规则:

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

代码:

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

结果:

python 复制代码
[1, 16, 22, 34, 49, 68, 213, 324]
[324, 213, 68, 49, 34, 22, 16, 1]

2. 对字符串排序

sorted把列表中的每一项传递给排序函数,然后排序函数返回相应的值,最后根据返回值进行排序

要求:以字符串长短排序
代码:

python 复制代码
lst = ["秋","张二嘎","比克","卡卡罗特","超级宇宙无敌大帅B"]

def func(item): # item对应列表中的每一项数据
    return len(item)

s = sorted(lst,key=func) # func后不要加(),否则变成调用函数了
print(s)

结果:

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

函数改成lanbda形式

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

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

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

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

3. 对列表排序

python 复制代码
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:根据每个人的年龄排序
代码:

python 复制代码
s = sorted(lst, key=lambda d: d["age"])
print(s)

结果:

python 复制代码
[{'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. 根据工资从大到小排列
代码:

python 复制代码
s = sorted(lst, key=lambda d: d["salary"], reverse=True)
print(s)

结果:

python 复制代码
[{'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是个生成器

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

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

python 复制代码
f = filter(lambda x: x.startswith("张"),lst)
print(list(f))

结果:

python 复制代码
['张无忌', '张三丰', '张翠山']

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

python 复制代码
f = filter(lambda x: not x.startswith("张"),lst)
print(list(f))

结果:

python 复制代码
['灭绝小师太', '小狐仙']

(五)map:映射

map(函数,可迭代对象)

列表中的每一个元素,经过函数计算之后得到的值,作为最终结果保留

map是一个生成器

python 复制代码
lst = [1,2,3,4,5,6,7,8,9]

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

python 复制代码
r = map(lambda x: x * x, lst)
print(list(r))

结果:

python 复制代码
[1, 4, 9, 16, 25, 36, 49, 64, 81]

也可以不用map实现

python 复制代码
result = [item * item for item in lst]
print(result)

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

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

各大语言都有三元表达式。

目的是把简单的if判断写成一行。

语法:

结果1 if 条件 else 结果2

过程:

判断条件是否为真,如果真,返回结果1,否则返回结果2
代码:

python 复制代码
a = 10
b = 20
c = a if a > b else b
print(c)

作用等同于:

python 复制代码
if a > b:
    print(a)
else:
    print(b)

结果:

python 复制代码
20
相关推荐
五花肉村长几秒前
Linux-Ext系列文件系统
linux·运维·服务器·c++·笔记·visual studio
伊织code24 分钟前
PyTorch API 9 - masked, nested, 稀疏, 存储
pytorch·python·ai·api·-·9·masked
wxl7812271 小时前
基于flask+pandas+csv的报表实现
python·flask·pandas
麦田里的稻草人w1 小时前
拍摄学习笔记【前期】(一)曝光
笔记·学习
C++ 老炮儿的技术栈1 小时前
C++中什么是函数指针?
c语言·c++·笔记·学习·算法
再睡一夏就好1 小时前
C语言常见的文件操作函数总结
c语言·开发语言·c++·笔记·学习笔记
我想吃余1 小时前
【Linux修炼手册】Linux开发工具的使用(一):yum与vim
linux·运维·学习·vim
鸡鸭扣2 小时前
DRF/Django+Vue项目线上部署:腾讯云+Centos7.6(github的SSH认证)
前端·vue.js·python·django·腾讯云·drf
钢铁男儿2 小时前
Python中的标识、相等性与别名:深入理解对象引用机制
java·网络·python
且慢.5892 小时前
Python_day22
python·机器学习