Python——第四章:内置函数(下)
内置函数的使用方法:
locals:函数会以字典的类型返回当前位置的所有局部变量
globals:函数会以字典的类型返回全部局部变量
zip: 可以把多个可迭代内容进行合并
sorted: 排序
filter: 筛选
map: 映射
locals和globals
locals:函数会以字典的类型返回当前位置的所有局部变量:
globals:函数会以字典的类型返回全部局部变量:
locals:
下面这段代码:此时locals被写在了全局作用域范围内. 此时看到的就是当前作用域(全局)中的变量内容
a = 188
print(locals()) # 此时locals被写在了全局作用域范围内. 此时看到的就是当前作用域(全局)中的内容
#执行结果
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000166DC5150D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\\Python\\装饰器.py', '__cached__': None, 'a': 188}
下面这段代码:此时locals放在局部作用域范围, 看到的就是局部作用域的变量内容
a = 188
def func():
b = 336
print(locals()) # 此时locals放在局部作用域范围, 看到的就是局部作用域的内容
func()
#运行结果
{'b': 336}
globals
此时globcals虽然放在局部作用域范围, 但是看到的是全局作用域的变量内容
a=188
def func():
b = 336
print(globals()) # 此时globals虽然放在局部作用域范围, 但是看到的是全局作用域的内容
func()
#运行结果
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x00000166DC5150D0>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\\Python\\装饰器.py', '__cached__': None, 'a': 188, 'func': <function func at 0x00000166DC7EA020>}
globcals不论写在哪里都是全局作用于的变量内容
zip
zip: 可以把多个可迭代内容进行合并
我们想把每个列表的第1位、第2位、第3位打包放在一起,手写的操作方法如下:
# 0 1 2
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, '情深深雨蒙蒙')]
在python中的zip函数可以直接实现这样的操作,下面我们用dir先来看下zip中有哪些功能,
result =zip(lst1,lst2,lst3)
print(dir(result))
#运行结果
['__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__']
从dir()
中我们可以看到,通过zip
内置函数得到的result
函数内部是拥有__iter__
证明是可迭代的;又有__next__
代表它是迭代器。因此:我们用for循环,把里面的数都拿出来即可。
lst1 = ["赵本山", "范伟", '苏有朋']
lst2 = [40, 38, 42]
lst3 = ["卖拐", "耳朵大有福", "情深深雨蒙蒙"]
result = zip(lst1, lst2, lst3)
for item in result:
print(item)
#运行结果
('赵本山', 40, '卖拐')
('范伟', 38, '耳朵大有福')
('苏有朋', 42, '情深深雨蒙蒙')
我们还能一步就拿到列表:前面讲过了list
中是存在循环遍历的。
result =zip(lst1,lst2,lst3)
lst= list(result)
print(lst)
#运行结果
[('赵本山', 40, '卖拐'), ('范伟', 38, '耳朵大有福'), ('苏有朋', 42, '情深深雨蒙蒙')]
sorted: 排序
sorted()有三个参数,基本语法是:
sorted(__iterable, key=None, reverse=False)
其中:
iterable: 要排序的可迭代对象,例如列表、元组等。
key: 用于指定一个函数(或其他可调用对象),它将被用于提取比较键(排序关键字)的值。默认为
None
,表示直接比较元素本身而不进行特殊的处理。reverse: 一个布尔值,表示是否按逆序排序。默认为
False
,表示升序排序;如果设置为True
,则按降序排序。
因为key的默认值是None并且reverse默认值是False,因此可以只写可迭代的对象:
lst = [4, 2, 7, 1, 9]
# 默认升序排序
s = sorted(lst)
print(s) # 输出 [1, 2, 4, 7, 9]
key=abs
是绝对值reverse=True
是从大到小reverse=False
是从小到大
# 按绝对值降序排序
s1 = sorted(lst, key=abs, reverse=True)
print(s1) # 输出 [9, 7, 4, 2, 1]
注意:sorted()
函数返回一个新的已排序的列表,而不会修改原始的可迭代对象。如果你想要在原地排序(修改原始对象),可以使用列表的 sort()
方法。
思考:key应该怎么用
如果我有一个这样的列表,需要排序。他们不是数字,该如何操作呢?
lst = ["秋", "张二嘎", "比克", "卡卡罗特", "超级宇宙无敌大帅G"]
这里我们就要用到一个排序函数func
来处理key的算法
sorted(iterable, key=func, reverse=False)
比如,我们想要以字母长度排序,就可以这样写
lst = ["秋", "张二嘎", "比克", "卡卡罗特", "超级宇宙无敌大帅G"] #这里是实参
def func(item): # item这里是形参,对应的就是列表中的每一项数据
return len(item)
s = sorted(lst, key=func)
print(s)
#执行结果
['秋', '比克', '张二嘎', '卡卡罗特', '超级宇宙无敌大帅G']
然而,这里完全可以用匿名函数来处理
def func(item): # item是形参
return len(item)
#匿名函数来替代
func = lambda x:len(x) # x也是形参
引入匿名函数,一步解决。这就是匿名函数的主要用处1
lst = ["秋", "张二嘎", "比克", "卡卡罗特", "超级宇宙无敌大帅G"]
s = sorted(lst, key=lambda x:len(x), reverse=False)
print(s)
练习:
lst = [
{"id": 1, "name": "周润发", "age": 18, "salary": 5200},
{"id": 2, "name": "周星驰", "age": 28, "salary": 511100},
{"id": 3, "name": "周海媚", "age": 78, "salary": 561230},
{"id": 4, "name": "周伯通", "age": 12, "salary": 532100},
{"id": 5, "name": "周大兴", "age": 35, "salary": 53210},
{"id": 6, "name": "周什么", "age": 47, "salary": 520},
{"id": 7, "name": "周扒皮", "age": 58, "salary": 12},
]
1.根据每个人的年龄排序
s = sorted(lst, key=lambda d: d['age'])
print(s)
2.根据工资进行排序. 从大到小
s = sorted(lst, key=lambda d: d['salary'], reverse=True)
print(s)
filter: 筛选
filter()
函数是 Python 内置函数之一,用于过滤序列中的元素,根据给定的函数(返回布尔值的函数,即谓词函数)决定是否保留元素。该函数的基本语法是:
filter(__function, __iterable)
其中:
- function: 一个用于筛选元素的函数,该函数应返回
True
或False
。 - iterable: 要过滤的可迭代对象,如列表、元组等。
filter()
返回一个由函数返回 True
的元素所组成的迭代器。
我们要把这个列表删选所有姓"张"的人找出来
lst = ["张无忌", "张三丰", "张翠山", "灭绝小师太", "小狐仙"]
使用filter进行筛选
# T T T F F
lst = ["张无忌", "张三丰", "张翠山", "灭绝小师太", "小狐仙"]
f = filter(lambda x: x.startswith("张"), lst)
print(list(f))
lambda x: x.startswith("张")
是一个谓词函数,用于判断元素是否为"张"开头。filter()
将该函数应用于 lst
列表的每个元素,并返回一个由符合条件的元素组成的迭代器,最后通过 list()
转换成列表。
如果要拿到不是姓"张"的人,我们可以用not
做调节
lst = ["张无忌", "张三丰", "张翠山", "灭绝小师太", "小狐仙"]
f = filter(lambda x: not x.startswith("张"), lst)
print(list(f))
注意事项:
返回类型:
filter()
返回的是迭代器,因此需要将其转换为列表或其他类型,以便查看或进一步处理结果。谓词函数: 谓词函数是一个返回布尔值的函数,用于判断元素是否应该被保留。
可读性: 谨慎使用复杂的谓词函数,以保持代码的可读性。
map:映射
map()
函数是 Python 内置函数之一,用于将一个函数应用于可迭代对象的每个元素,返回一个由函数处理后的结果组成的迭代器。其基本语法如下:
map(__function, __iterable, ...)
其中:
- function: 用于处理每个元素的函数。
- iterable: 要处理的可迭代对象,如列表、元组等。
- ...: 可以传递多个可迭代对象,此时 function 函数必须接收对应数量的参数。
map()
返回一个迭代器,它产生将函数应用于每个元素后的结果。
map()
和filter()
的用法非常类似,他们的区别是filter()
把筛选出来的值做只真假判断,真就返回,假就丢弃。map()
是把筛选出来的值做运算,在运算后把运算结果返回。
map()
存在的价值:
在后期如果需要做数据分析,对大量数据做批量的处理,传统的列表推导式无法实现,所以会用到map()
的方法。
示例:
我们可以用列表的推导式来实现对lst的所有的数的平方
lst = [1,2,3,4,5,6,7,8,9]
result = [item * item for item in lst]
print(result)
#运行结果
[1, 4, 9, 16, 25, 36, 49, 64, 81]
我们可以用到map()
直接操作
# 将列表中的每个元素都平方
lst = [1,2,3,4,5,6,7,8,9]
result = map(lambda x: x**2, lst)
print(list(r)) # 输出 [1, 4, 9, 16, 25, 36, 49, 64, 81]
在这个例子中,lambda x: x**2
是应用于 numbers
列表中每个元素的函数,map()
返回一个迭代器,其中包含了每个元素平方的结果。
多个可迭代对象的示例:
# 将两个列表对应位置的元素相加
list1 = [1, 2, 3]
list2 = [4, 5, 6]
sum_result = map(lambda x, y: x + y, list1, list2)
print(list(sum_result)) # 输出 [5, 7, 9]
在这个例子中,lambda x, y: x + y
函数接收两个参数,分别来自 list1
和 list2
的对应位置的元素,然后返回它们的和。
注意事项:
返回类型:
map()
返回的是迭代器,因此需要将其转换为列表或其他类型,以便查看或进一步处理结果。函数的参数: 函数必须接受与提供的可迭代对象相同数量的参数。如果提供了多个可迭代对象,则函数必须接受相应数量的参数。
可读性: 谨慎使用复杂的函数,以保持代码的可读性。
Python——第四章:内置函数(下)的更多相关文章
- python字符串——"奇葩“的内置函数
一.前言 python编程语言里的字符串与我们初期所学的c语言内的字符串还是有一定不同的,比如python字符串里的内置函数就比语言的要多得多:字符串内的书写格式也会有一点差异,例:字符串内含有引 ...
- python 类(object)的内置函数
python 类(object)的内置函数 # python 类(object)的内置函数 ### 首先 #### 以__双下划线开头的内置函数 __ #### __往往会在某些时候被自动调用,例如之 ...
- Python标准库:内置函数hasattr(object, name)
Python标准库:内置函数hasattr(object, name) 本函数是用来判断对象object的属性(name表示)是否存在.如果属性(name表示)存在,则返回True,否则返回False ...
- [Python笔记]第四篇:内置函数
本篇主要内容:内置函数 函数 参考:https://docs.python.org/3.5/library/functions.html 内置函数列表 一.数学运算类 abs(x)求绝对值 >& ...
- 万恶之源 - Python装饰器及内置函数
装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...
- Python之生成器及内置函数篇4
一.可迭代对象 #1.什么是迭代?:迭代是一个重复的过程,并且每次重复都是基于上一次的结果而来 #2.可迭代的对象:在python中,但凡内置有__iter__方法的对象,都是可迭代的对象 #3.迭代 ...
- Python每日一练------内置函数+内置变量+内置模块
1.内置函数 Python所有的内置函数 Built-in Functions abs() divmod() input() open() staticmethod() all() e ...
- Python 的基本运算和内置函数
一.运算符 (一)Python算术运算符 以下假设变量: a=10,b=20: 运算符 描述 实例 + 加 - 两个对象相加 a + b 输出结果 30 - 减 - 得到负数或是一个数减去另一个数 a ...
- Python学习日记(十一) 内置函数
什么是内置函数? 就是Python中已经写好了的函数,可以直接使用 内置函数图表: 以3.6.2为例 内置函数分类: 一.反射相关 1.hasattr() 2.getattr() 3.setattr( ...
- Python装饰器及内置函数
装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...
随机推荐
- 【Qt6】列表模型——便捷类型
前一篇水文中,老周演示了 QAbstractItemModel 抽象类的继承方法.其实,在 Qt 的库里面,QAbstractItemModel 类也派生了两个基类,能让开发者继承起来[稍稍]轻松一些 ...
- 每日一题:如何判断是否是数组,一个既简单又复杂的问题。(不要再用Object.prototype.toString.call、instance of判断了!!!)
1.不要使用Object.prototype.toString.call() 正常情况下: const arr = [1,2,3,4,5] const obj = {} console.log(Obj ...
- 5 分钟理解 Next.js SSG (Static Site Generation / Static Export)
5 分钟理解 Next.js SSG (Static Site Generation / Static Export) 在本篇文章中,我们将介绍 Next.js 中的 SSG(静态网站生成)功能,以及 ...
- Learning Hard C# 学习笔记: 6.C#中的接口
目的: 由于C#中的类只能单个继承, 为了满足多重继承(一个子类可以继承多个父类)的需求, 所以产生了接口. 多重继承是指一个类可以从多个父类继承属性和方法.在C#中,只允许单继承,即一个类只能有一个 ...
- ElasticSearch系列——查询、Python使用、Django/Flask集成、集群搭建,数据分片、位置坐标实现附近的人搜索
@ 目录 Elasticsearch之-查询 一 基本查询 1.1 match查询 1.2 term查询 1.3 terms查询 1.4 控制查询的返回数量(分页) 1.5 match_all 查询 ...
- Django框架项目之上线——docker、部署上线
文章目录 Docker CentOS安装Docker 设置管理Docker的仓库 安装Docker Engine-Community Docker基础命令 开启关闭 镜像操作 容器操作 Docker安 ...
- RK3588平台产测之ArmSoM-W3 DDR压力测试
1. 简介 RK3588从入门到精通 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力 ...
- 【docker简略学习】
[docker简略学习] Docker是一个应用打包.分发.部署工具,相当于一个轻量级虚拟机.相比较VM虚拟机,可移植性更强. 一.Docker安装 下载链接:https://docs.docker. ...
- 基于LangChain的LLM应用开发1——介绍
这是基于LangChain的大语言模型应用开发系列的第一篇. 文章内容会参考deeplearning.ai的短课程(https://learn.deeplearning.ai/langchain/), ...
- python爬虫入门(1)-开发环境配置
所谓的爬虫,就是通过模拟点击浏览器发送网络请求,接收站点请求响应,获取互联网信息的一组自动化程序. 也就是,只要浏览器(客户端)能做的事情,爬虫都能够做. 现在的互联网大数据时代,给予我们的 ...