Python 常用内置函数

目录

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 threadingdef 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 foundb = (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.rhkb.cn/news/397974.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

map和set的使用

关联式容器 在学习关联式容器之前&#xff0c;我们学习过的容器有vector、list、deque…这些容器称为序列式容器&#xff0c;单纯的存储数据存储的数据没有关联性。 即将学习的map 和set属于关联式容器&#xff0c;其里面存储的是<key, value>结构的键值对&#xff0c;…

制造知识普及(九)--企业内部物料编码(IPN)与制造商物料编码(MPN)

在日常的物料管理业务逻辑中&#xff0c;一物一码是物料管理的基本的业务规则&#xff0c;不管物料从产品开发还是仓库管理&#xff0c;甚至成本核算&#xff0c;都要遵循这个原则&#xff0c;才能保证产品数据的准确性&#xff0c;才具备唯一追溯的可行性。大部分企业都是这种…

某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏洞复现 [附POC]

文章目录 某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现0x06 修复建议某通电子文档安全管理系统 CDGAuthoriseTempletService1接口SQL注入漏…

C#数据类型转换

代码&#xff1a; using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Test05 {class Program{static void Main(string[] args){double db 2008;//声明一个double类型变量db&#xff0c;并初始化为2008object obj db;//对db…

JAVA实现判断小程序用户是否关注公众号

本文主要描述了判断小程序用户是否关注公众号的逻辑实现及部分代码 首先阐述一下大致流程&#xff1a; 1、在将小程序和公众号绑定至同一个微信开发平台下&#xff1b; 2、后端拉取公众号已关注用户列表&#xff0c;并获取其中每一个用户的unionID&#xff0c; 建立已关注用户…

OCR调研

OCR调研 一、介绍 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是一种将图像中的文字转换为计算机可处理格式的技术。OCR技术经历了从传统OCR到基于深度学习的OCR的转变。深度学习OCR技术通过模拟人脑神经元结构处理文本和图像数据&am…

MATLAB - 强化学习(Reinforcement Learning)

系列文章目录 前言 一、什么是强化学习&#xff1f; 强化学习是一种以目标为导向的计算方法&#xff0c;计算机通过与未知的动态环境交互来学习执行任务。这种学习方法能让计算机在没有人工干预和明确编程的情况下&#xff0c;做出一系列决策&#xff0c;使任务的累积奖励最大化…

cmake 编译教程

参考链接&#xff1a;cmake使用详细教程&#xff08;日常使用这一篇就足够了&#xff09;_cmake教程-CSDN博客 一、只有一个源文件的程序编译 首先在当前目录下创建两个文件 hello.cpp CMakeLists.txt &#xff08;注意CMakeLists大小写&#xff0c;不要写错了&#xff09; …

推荐一个优秀的 .NET MAUI 组件库

目录 前言 组件介绍 组件展示 布局 按钮 复选框 进度条 导航栏 组件地址 最后 前言 .NET MAUI 的发布&#xff0c;项目中可以使用这个新的跨平台 UI 框架来轻松搭建的移动和桌面应用。 为了帮助大家更快地构建美观且功能丰富的应用&#xff0c;本文将推荐一款优秀…

AcCode核心思路

文章目录 在线OJ项目核心思路1. 项目介绍2.预备知识理解多进程编程为啥采用多进程而不使用多线程?标准输入&标准输出&标准错误 3.项目实现题目API实现相关实体类定义新增/修改题目获取题目列表 编译运行编译运行流程 4.统一功能处理 在线OJ项目核心思路 1. 项目介绍 …

有序转化数组(LeetCode)

题目 给你一个已经 排好序 的整数数组 和整数 、 、 。对于数组中的每一个元素 &#xff0c;计算函数值 &#xff0c;请 按升序返回数组 。 解题 在时间复杂度为解决问题 def sortTransformedArray(nums, a, b, c):def f(x):return a * x * x b * x cn len(nums)result…

4个从阿里毕业的P7打工人,当起了包子铺的老板

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247483727&idx1&sndb05d8c1115a4539716eddd9fde4e5c9&chksmc0e47813f793f105017fb8551c9b996dc7782987e19efb166ab665f44ca6d900210e6c4c0281&scene21#wechat_redirect 《网安面试指南》h…

学生公寓电费信息管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公寓管理员管理&#xff0c;学生管理&#xff0c;楼层信息管理&#xff0c;用电情况管理&#xff0c;缴费清单管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;用电情况…

【数据结构】六、图:4.图的遍历(深度优先算法DFS、广度优先算法BFS)

三、基本操作 文章目录 三、基本操作1.图的遍历1.1 深度优先遍历DFS1.1.1 DFS算法1.1.2 DFS算法的性能分析1.1.3 深度优先的生成树和生成森林 1.2 广度优先遍历BFS1.2.1 BFS算法1.2.2 BFS算法性能分析1.2.3 广度优先的生成树和生成森林 1.3 图的遍历与图的连通性 1.图的遍历 图…

Nginx系列-Nginx Location匹配规则

文章目录 Nginx系列-Nginx Location匹配规则1. 语法基础2. 匹配规则2.1 精确匹配&#xff08;&#xff09;2.2. 最长前缀匹配&#xff08;^~&#xff09;2.3. 正则表达式匹配&#xff08;~和~*&#xff09;2.4. 普通前缀匹配&#xff08;无修饰符&#xff09;2.5. 默认匹配&…

贷齐乐hpp+php特性注入

文章目录 运行过程waf第一层waf拦截第二层waf拦截 数据库查询语句注入思路注入 运行过程 foreach ($_REQUEST as $key > $value) {$_REQUEST[$key] dowith_sql($value);}$request_uri explode("?", $_SERVER[REQUEST_URI]);if (isset($request_uri[1])) {$rewr…

OpenGL3.3_C++_Windows(34)

demo 1 Fresnel-Schlick PBR直接光源 顾名思义&#xff1a;直接光源指有光源直接照射到点p 的辐射强度&#xff0c;由于一个光源只会有一个光线wi影响点p&#xff0c;所以和之前的计算没什么差异对于影响p的光源&#xff0c;并不需要积分计算半球形辐照度&#xff0c;遍历每个…

redis面试(十)锁释放

自动释放 首先锁的释放分为两种&#xff0c;一种是自动释放&#xff0c;加入说加锁的线程宕机了不在了&#xff0c;我们之前说过这个。 那这个线程中的对redis这个锁不断刷新过期时间的看门狗逻辑就没有了&#xff0c;所以这个锁最多等待30s的时间就会自动过期删除&#xff0c…

为什么选择在Facebook投放广告?

2024年了你还没对 Facebook 广告产生兴趣&#xff1f;那你可就亏大了&#xff01; 今天这篇文章&#xff0c;我们会分享它对你扩大业务的好处。要知道&#xff0c;Facebook 广告凭借它庞大的用户群和先进的定位选项&#xff0c;已经是企业主们有效接触目标受众的必备神器。接下…

【uniapp】uniapp+vue2微信小程序实现分享功能

uniappvue2做的微信小程序实现分享功能 问题描述 uniappvue2做的微信小程序&#xff0c;发布以后点击右上角三个点&#xff0c;分享小程序的时候&#xff0c;转发和分享按钮都是灰色 解决方案 转发、分享、复制链接这几个功能需要自己来手动写方法&#xff0c;考虑到每个页…