Python 常用内置函数

news2024/9/25 17:15:55

目录

1、enumerate函数

1.1、for循环中使用

1.2、enumerate指定索引的起始值

1.3、enumerate在线程中的作用

2、Map 函数

2.1、map()函数可以传多个迭代器对象

3、lambda表达式(匿名函数)

示例

4、sort函数和sorted函数

4.1、sort()函数

4.2、sorted函数

4.3、关键字参数key的使用

4.3.1. 使用内置函数作为key

4.3.2. 使用lambda函数作为key

4.3.3、 多级排序

5、filter函数

6、 eval和exec函数

6.1、eval() 函数

6.2、exec() 函数

7、repr函数

7.1、str()和repr()区别

7.1、'!s' ,'!r' 和 '!a' 的使用

8、join函数

1、enumerate函数

功能:用于同时遍历数据对象的索引和值。它常用于迭代序列类型(如列表、元组、字符串等),返回的是一个包含索引和值的元组。

作用:

  • 简化代码:避免手动追踪和维护索引变量,使代码更简洁和易读。
  • 同时获取索引和值:方便在迭代过程中获取元素的索引,特别适用于需要索引信息的情况。
  • 灵活设置起始索引:通过 start 参数可以设置起始索引值,便于与其他代码或计算习惯对齐。

1.1、for循环中使用

dict = [{"name":"Hello", "age":18}, {"name":"Tom", "age":24}, {"name":"Cat", "age":28}]
for index,t in enumerate(dict):
print (index, t)

1.2、enumerate指定索引的起始值

dict = [{"name":"Hello", "age":18}, {"name":"Tom", "age":24}, {"name":"Cat", "age":28}]
for index,t in enumerate(dict, 1):
    print (index, t)

1.3、enumerate在线程中的作用

  • 1、threading.enumerate(): 返回一个包含正在运行的线程的list。
  • 2、正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
  • 3、返回一个list类型,通过这个list类型我们就可以得知,目前线程数量的多少。
import threading

def task():
    time.sleep(3)
    print("this is task")

if __name__ == '__main__':
    t1 = threading.Thread(target=task)
    t2 = threading.Thread(target=task)
    t1.start()
    t2.start()

    for i, thread in enumerate(threading.enumerate()):
        print(f"Thread {i}: {thread.name}")

    t1.join()
    t2.join()

2、Map 函数

功能:map 函数用于将指定函数应用于可迭代对象(如列表)的每个元素,并返回一个迭代器,其中包含应用函数后的结果。

语法:map(func, *iterables)

作用:

  • map 返回一个迭代器,支持惰性计算,避免了不必要的内存占用,尤其是对于大型数据集

示例:

t = ['1', '2', '3', '4', '5', '6']
print(t)
res = map(lambda x: int(x) * int(x), t)
for i in res:
    print(i, end=' ')
print()
# 此时迭代器中数据已为空
print(list(res))

2.1、map()函数可以传多个迭代器对象

  • map 函数会将提供的函数应用于来自多个可迭代对象的对应元素,直到其中一个可迭代对象耗尽为止

示例:

list1 = [1, 2, 3, 4, 5]
list2 = [1, 2, 3, 4, 5, 6]
list3 = [1, 2, 3, 4, 5, 6, 7]

def func(x, y, z):
    return x, y, z
# 此处的map函数传入了多个迭代器对象
res = map(func, list1, list2, list3)
# 因为 list1 的长度最短,所以 map 会在 list1 长度的限制下进行映射,即到 list1 的最后一个元素为止
print(list(res))

3、lambda表达式(匿名函数)

Lambda表达式,也称为匿名函数,是Python等编程语言中一种快速定义单行的小函数的方法。使用lambda表达式可以写出更简洁、更清晰的代码,尤其是在需要使用函数对象的场合。Lambda表达式的基本语法如下:

lambda 参数列表: 表达式
  • 这里的“参数列表”是传入函数的参数,它们可以是多个,用逗号分隔。
  • 而“表达式”是关于参数的某种运算,其运算结果就是这个函数的返回值。
  • 注意,lambda表达式不需要写return,表达式的计算结果会自动成为这个函数的返回值。

示例

  • 1、简单的lambda表达式
# 使用lambda表达式定义一个简单的加法函数  
add = lambda x, y: x + y  
  
# 调用这个函数  
print(add(3, 5))  # 输出8
  • 2、结合map()函数使用
# 使用lambda表达式和map()函数将列表中的每个元素乘以2  
numbers = [1, 2, 3, 4]  
doubled = map(lambda x: x * 2, numbers)  
  
# 将map对象转换为列表  
doubled_list = list(doubled)  
print(doubled_list)  # 输出[2, 4, 6, 8]
  • 3、结合filter()函数使用:
# 使用lambda表达式和filter()函数过滤出列表中的偶数  
numbers = [1, 2, 3, 4, 5, 6]  
even_numbers = filter(lambda x: x % 2 == 0, numbers)  
  
# 将filter对象转换为列表  
even_numbers_list = list(even_numbers)  
print(even_numbers_list)  # 输出[2, 4, 6]

4、sort函数和sorted函数

4.1、sort()函数

  • 使用对象:sort()是列表(list)对象的一个方法,只能用于列表的排序。
  • 排序方式:sort()方法默认在原列表上进行排序,也就是说,它会改变原列表的元素顺序。
  • 返回值:sort()方法没有返回值,或者说返回值是None。排序结果直接体现在原列表上。
  • 参数:sort()方法接受两个可选的关键字参数key和reverse。key用于指定一个从列表中每个元素提取比较键的函数,reverse用于指定排序顺序(默认为False,即升序;如果为True,则为降序)。

示例:

numbers = [3, 2, 8, 5, 1]  
numbers.sort()  # 默认升序排序  
print(numbers)  # 输出: [1, 2, 3, 5, 8]  

numbers.sort(reverse=True)  # 降序排序  
print(numbers)  # 输出: [8, 5, 3, 2, 1]

4.2、sorted函数

  • 使用对象:sorted()是Python的内建函数,可以对任何可迭代对象进行排序,包括列表、元组、字典等。排序后的结果是一个新的列表,原可迭代对象的顺序不会被改变。
  • 排序方式:sorted()函数返回一个新的排序后的列表,原可迭代对象保持不变。
  • 返回值:sorted()函数返回一个新的排序后的列表。
  • 参数:与sort()方法类似,sorted()函数也接受key和reverse作为关键字参数,用于指定排序的依据和顺序。

示例:

numbers = [3, 2, 8, 5, 1]  
sorted_numbers = sorted(numbers)  # 默认升序排序,返回新列表  
print(sorted_numbers)  # 输出: [1, 2, 3, 5, 8]  
print(numbers)  # 输出: [3, 2, 8, 5, 1],原列表不变  

sorted_numbers_desc = sorted(numbers, reverse=True)  # 降序排序  
print(sorted_numbers_desc)  # 输出: [8, 5, 3, 2, 1]

4.3、关键字参数key的使用

4.3.1. 使用内置函数作为key

示例1:按字符串长度排序

words = ['banana', 'apple', 'cherry', 'date']  
words.sort(key=len)  
print(words)  # 输出: ['date', 'apple', 'cherry', 'banana']  
  
# 或者使用sorted()函数,不会改变原列表  
sorted_words = sorted(words, key=len)  
print(sorted_words)  # 输出: ['date', 'apple', 'cherry', 'banana']

示例2:按数字大小排序(字符串形式的数字)

numbers_str = ['10', '3', '22', '1']  
numbers_str.sort(key=int)  
print(numbers_str)  # 输出: ['1', '3', '10', '22']  
  
# 或者使用sorted()函数  
sorted_numbers_str = sorted(numbers_str, key=int)  
print(sorted_numbers_str)  # 输出: ['1', '3', '10', '22']

4.3.2. 使用lambda函数作为key

lambda函数提供了一种快速定义单行小函数的方法,非常适合作为key参数的值。

示例1:按元组中某个元素排序

tuples = [(1, 'apple'), (3, 'banana'), (2, 'cherry')]  
tuples.sort(key=lambda x: x[0])  # 按元组的第一个元素排序  
print(tuples)  # 输出: [(1, 'apple'), (2, 'cherry'), (3, 'banana')]  
  
# 或者按照元组的第二个元素排序  
tuples.sort(key=lambda x: x[1])  
print(tuples)  # 输出: [(1, 'apple'), (3, 'banana'), (2, 'cherry')]

示例2:按字典中的某个值排序

students = [{'name': 'Alice', 'age': 22}, {'name': 'Bob', 'age': 20}, {'name': 'Charlie', 'age': 23}]  
students.sort(key=lambda x: x['age'])  # 按字典中的'age'值排序  
print(students)  
# 输出: [{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 22}, {'name': 'Charlie', 'age': 23}]

4.3.3、 多级排序

示例1:先按年龄,再按姓名排序

students = [{'name': 'Alice', 'age': 22}, {'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 21}]  
students.sort(key=lambda x: (x['age'], x['name']))  
print(students)  
# 输出: [{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 21}, {'name': 'Alice', 'age': 22}]

5、filter函数

功能:filter函数是Python中的一个内置函数,用于过滤序列,过滤掉那些不符合条件的元素,返回一个迭代器。如果序列中的元素符合某个条件(即函数返回True),则保留这个元素,否则过滤掉。

filter函数的基本语法如下:

filter(function, iterable)
  • function:判断函数。用于判断序列中的元素是否符合某种条件,如果符合条件则返回True,否则返回False。如果function为None,那么会直接返回iterable中的所有真值元素。
  • iterable:一个序列,可以是列表、元组、字符串等可迭代对象。

返回值是一个迭代器,包含了所有符合条件(使判断函数返回True)的元素。

示例

# 使用filter函数过滤掉列表中的所有偶数  
def is_odd(n):  
    return n % 2 == 1  
  
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]  
filtered_numbers = filter(is_odd, numbers)  
  
print(list(filtered_numbers))  
# 输出: [1, 3, 5, 7, 9]

6、 eval和exec函数

在Python中,eval()exec()是两个功能强大的内置函数,它们都能够执行字符串形式的Python代码,但它们在用法和返回值方面存在显著差异。

常见用途:将字符串转成相应的对象,例如 string 转成 list ,string 转成 dict,string 转 tuple 等等。

6.1、eval() 函数

eval()函数用于执行一个字符串表达式,并返回表达式的值。其基本语法如下:

eval(expression, globals=None, locals=None)
  • expression:必需的参数,表示要计算的Python表达式,以字符串形式给出。
  • globals:可选参数,一个字典,用于定义全局变量。如果未提供,则使用当前的全局命名空间。
  • locals:可选参数,一个字典,用于定义局部变量。如果未提供,则默认使用globals参数。

示例:

x = 1  
result = eval('x + 1')  
print(result)  # 输出: 2  
  
# 使用 globals 参数  
result = eval('x + y', {'x': 1, 'y': 2})  
print(result)  # 输出: 3  
  
# 处理复杂表达式  
result = eval('[x**2 for x in range(5)]')  
print(result)  # 输出: [0, 1, 4, 9, 16]

注意事项:

  • eval()只能执行单个表达式,并返回表达式的值;不支持复杂的代码逻辑,例如赋值操作、循环语句等等。
  • 由于eval()可以执行任意代码,因此存在安全风险,特别是当执行的代码来源于不受信任的来源时。

6.2、exec() 函数

exec()函数用于动态执行Python代码。与eval()不同,exec()可以执行更复杂的代码块,包括多行代码、声明和控制流语句,但它不返回任何值(即返回值为None)。其基本语法如下:

exec(source, globals=None, locals=None)
  • source:必需的参数,表示要执行的Python代码,可以是字符串或编译后的代码对象。
  • globals和locals:与eval()函数相同,分别用于定义全局和局部命名空间。
exec("print('Hello, world!')")  # 输出: Hello, world!  
  
# 动态生成变量  
exec("a = 10")  
print(a)  # 输出: 10  
  
# 执行复杂代码块  
code = """  
def greet(name):  
    return f"Hello, {name}!"  
  
result = greet("Alice")  
print(result)  
"""  
exec(code)  # 输出: Hello, Alice!

注意事项:

  • exec()可以执行任意代码,因此同样存在安全风险。
  • 使用exec()时,应尽量避免执行不受信任的代码,或明确指定globals和locals参数以限制作用域。比如下面的代码,就禁用了内置模块:
s = {'__builtins__': None}
eval("__import__('os').system('whoami')", s)

7、repr函数

7.1、str()和repr()区别

在 Python 中要将某一类型的变量或者常量转换为字符串对象通常有两种方法,即str() 或者 repr() 。自定义对象输出格式需要重写函数__repr__。

str()和repr()区别:

  • 1、函数str( )将其转化成为适于人阅读的前端样式文本,面向用户
  • 2、函数repr(object)将对象转化为供解释器读取的形式,面向程序员,返回一个对象的 string 格式,并且可以通过eval函数还原为原来的对象。
  • 3、如果两个都重写,那么则优先调用__str__;只重写__repr__,则只调用__repr__

示例:

示例:s = 'python'
a = str(s)
b = repr(s)
 
print(a)
print(b)
print(type(a))
print(type(b))
print(eval(b))
 
print("-" * 100)
 
print(a == b)

运行结果:

注意:

  1. 对于字符串类型,repr转换后外层会多一对引号,对于int类型转换为字符串类型不会。
  2. 命令行下直接输出对象调用的是对象的repr方法,而print输出调用的是str方法

7.1、'!s' ,'!r' 和 '!a' 的使用

示例:

def __repr__(self):
    return f"user={self.user!r}, variant={self.variant!r}"

result  = func(*args, **kwargs)
print(f" {func.__name__!r} returned {result!r}")

说明:

  • 默认情况下,f 字符串显示对花括号内的值调用str的结果。指定!r显示调用repr的结果。
  • 转换字段在格式化之前会导致类型强制。通常,格式化值的工作是由值本身的format () 方法完成的。但是,在某些情况下,需要强制将类型格式化为字符串,覆盖其自己的格式化定义。通过在调用format ()之前将值转换为字符串,绕过了正常的格式化逻辑。
  • 当前支持三种转换标志:'!s' 调用 str() 值,'!r' 调用 repr() 和 '!a' 调用 ascii()。

8、join函数

它的主要作用是将一个字符串列表(或数组)中的所有元素连接成一个单独的字符串,元素之间可以插入一个指定的分隔符。这个函数在处理文本、生成文件路径或URL时非常有用。

示例:

在Python中,join是一个字符串方法,用于将序列(如列表)中的元素以指定的字符(或字符串)连接生成一个新的字符串。

separator = ", "  
words = ["Hello", "world", "Python"]  
sentence = separator.join(words)  
print(sentence)  # 输出: Hello, world, Python

注意:分割对象储存的对象要为字符串,否则会报错

问题:如果储存非字符串的元组、列表、字典等拼接时报错,比如元组储存数字进行连接,则会报错

示例:

a = (1,2,3) #定义元组a
';'.join(a)

#报错:TypeError: sequence item 0: expected str instance, int found

解决方案:要将数字连接起来成为一个字符串,则结合for循环语句并将数字转为字符串再连接起来

a = (1,2,3) #定义元组a
';'.join(a)
 
#报错:TypeError: sequence item 0: expected str instance, int found

b = (186234,1385475,1235462)
';'.join(str(i) for i in b)
  # 输出结果为:186234;1385475;1235462
  
#调用set函数去重处理
e = (1,2,3,2) #定义元组a
'、'.join(str(i) for i in set(e))
  # 输出结果为:1、2、3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1995881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue2学习 -- vuex

文章目录 1. 理解2. 语法2.1 安装使用2.2 getters配置项2.3 四个map方法的使用2.4 vuex模块化 1. 理解 概念:专门在ue中实现集中式状态(数据)管理的一个ue插件,对vue应用中多个组件的共享状态进行集中式的管理(读/写&…

Java基础 1. Java开发环境搭建

Java基础 1. Java开发环境搭建 文章目录 Java基础 1. Java开发环境搭建1.1. 常用的DOS命令1.1.1. 常用的Windows组合键:1.1.2. 常用的DOS命令:1.1.3. 批处理文件 1.2. 通用文本编辑快捷键1.2.1. Sublime Text文本编辑器的安装与使用安装中英文打开方式调整字体大小文件扩展名 1…

LlamaIndex 如何可视化跟踪日志

LlamaIndex 中无论是 RAG 还是 Agent,都是需要和 LLM 进行交互,在这个流程流中包括搜索、Retrieve和推理等多个阶段。提示词在整个流程通过模板进行控制,LlamaIndex 通过整合和调度完成最终任务。 大模型的一个最大特点就是无法保证回答百分…

假如有一个嵌套集合,怎么通过stream流将集合放到一个集合之中?

假如有一个嵌套集合,怎么通过stream流将集合放到一个集合之中? 问题解释:你有一个嵌套的集合,想要通过 Stream 流的方式将其中嵌套的集合放到一个新的集合中。可以使用 flatMap 方法来实现。这种方法非常适合处理嵌套集合的情况。…

2个方法教你如何删除ZIP压缩包密码

zip压缩包设置了加密密码,每次解压文件都需要输入密码才能够顺利解压出文件,当压缩包文件不再需要加密的时候,大家肯定想删除压缩包密码,或是忘记了压缩包密码,想要通过删除操作将压缩包密码删除,就能够顺利…

Basic Pentesting:2-打靶渗透【附代码】(权限提升)

靶机下载地址: https://www.vulnhub.com/entry/basic-pentesting-2,241/https://www.vulnhub.com/entry/basic-pentesting-2,241/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 08:00:27:1D:4A:27 1.2. 端口扫描 …

MongoDB学习记录

1、初识Mongo 概述:与关系型数据库不同,MongoDB 的数据以类似于 JSON 格式的二进制文档存储,通常称这种格式为Bson,Bson不仅支持JSON中已有的数据类型,还增加了一些额外的数据类型,例如日期和二进制数据&a…

第二十三天培训笔记

上午 在同步时,对删除和修改都比较慎重(监控同步时) mysql 主从搭建 前提软件 libaio , rsync 注意:先执行从服务器的脚本,再执行主服务器脚本 master-mysql 配置脚本 2 、其他常⽤函数 ( …

【ML】pre-train model 是什么如何微调它,如何预训练

【ML】pre-train model 是什么如何微调它,如何预训练 0. 预训练模型(Pre-trained Model)0.1 预训练模型的预训练过程0.2 如何微调预训练模型0.3 总结 1. Contextualized word Embedding2. 怎么 让 bert 模型变小3. 如何微调模型 0. 预训练模型…

# 利刃出鞘_Tomcat 核心原理解析(三)

利刃出鞘_Tomcat 核心原理解析(三) 一、 Tomcat专题 - Tomcat架构 - 启动流程 1、Tomcat 启动流程 2、Tomcat 启动 步骤 : 1) 启动tomcat , 需要调用 bin/startup.bat (在linux 目录下 , 需要调用 bin/startup.sh) &#xff0c…

推荐学计算机的好用的软件

翻译软件 网易有道翻译 在敲代码时会遇见一些报错,这些报错提示都是以英文方式呈现的,这时候英语不好的就可以进行截图翻译了。快捷键:Ctrl Alt D 它可以进行语言的选择 不仅可以语言之间的转换,还有一些其他的功能&#xff0c…

用AI生成海报设计!AI绘画大模型Flux的在线使用!

​ 前言/海报生成 除了这种高质量的人像图片生成, ​ ​这个刚开源的flux AI绘画大模型也能用来直接生成这种动画海报,其实这个就是基于它优质的语义理解能力以及文本生成能力。 那我们来操作一下, flux需要本地部署并且在comfyUI使用&…

【Linux】基础IO认知

文件 1、回顾C语言中的文件接口2、对文件的理解(阶段一)3、文件操作3、1、C的文件操作接口3、2、认识系统调用接口3、2、强化对fd文件描述符及周边知识的理解 1、回顾C语言中的文件接口 事实上,我们在C语言的学习中了解的文件并不是真正的文件。从语言角度来说&…

在MLU370运行CogVideoX-2b轻轻松松!

文章目录 一、paas平台环境配置二、模型下载三、环境下载1.pip 正常安装2.diffusers安装 四、代码准备五、运行效果演示 一、paas平台环境配置 驱动版本选择:大于或等于5.10.29 显卡选择:MLU370系列 卡数:1-8卡【推荐2卡起步】 镜像选择&…

【层归一化用于单个样本适合于序列建模,通俗】

层归一化(Layer Normalization),简称 LayerNorm,会将神经网络层的激活值规范到均值为0,并将其方差归一化为1。尤其是在循环神经网络(RNNs)和自注意力模型(如 Transformers&#xff0…

加强混合工作时代的组织网络安全态势

随着组织转向采用和实施混合和远程工作模式,网络安全的重要性从未如此重要。虽然工作场所的这种演变提供了灵活性并有望提高生产力,但它也带来了组织无法忽视的无数网络安全挑战。多样化工作环境的整合需要强大的安全措施、创新的保护策略和警惕的文化&a…

信息学奥赛初赛天天练-60-NOIP2018普及组-基础题4-逻辑推理、分类归纳、找规律

PDF文档公众号回复关键字:20240809 NOIP2018 基础题4 1 甲乙丙丁四人在考虑周末要不要外出郊游 已知①如果周末下雨,并且乙不去,则甲一定不去;②如果乙去,则丁一定去;③如果丙去,则丁一定不去&#xff1b…

TLS 证书有效期缩短预计将使管理工作复杂化

76% 的安全领导者认识到迫切需要缩短证书有效期来提高安全性。然而,许多人觉得自己还没有准备好采取行动,77% 的人表示,改为使用 90 天证书将意味着不可避免地会出现更多中断。 谷歌计划缩短 TLS 证书有效期 81% 的安全主管认为&#xff0c…

性能分析的思想和方法

性能分析的思想和方法 作为新手,经历了性能测试需求分析、性能测试计划、性能测试压测工具/脚本等前置的一系列准备后,到了实施环节,支棱起来压测后,怎么判断有没有问题呢? 本文主要讲一下性能分析思想的几种方法,让大家知道在压测过程中发现了问题后如何去分析问题。…

Cmseasy_5.5的SQL注入

未授权访问进入后台获取Cookie安全码 在cmseasy目录下的lib/admin/admin.php中有这么一句代码,可以让我们实现未授权访问进入到cmseasy的后台获取Cookie安全码,为我们后期的注入做准备。 if($servipfront::ip()&&front::get(ishtml)1) return; …