Python小白学习教程从入门到入坑------第十七课 内置函数拆包(语法基础)
一、内置函数
1.1 查看所有内置函数
内置函数:Python 提供了许多内置函数,这些函数无需导入任何模块即可直接使用。它们涵盖了各种用途,从数学运算到类型检查,再到输入输出操作等。
如何查看内置函数呢?
在Pycharm中,用 import builtins 查看内置函数
eg:
import builtins
print(dir(builtins))
1.2 常见内置函数分类
以下是一些常用的内置函数及其简要说明:
- 数学运算相关
abs(x):返回数字x的绝对值divmod(a, b):返回(a // b, a % b),即商和余数max(iterable, *args, key, default):返回可迭代对象中的最大值,或者多个参数中的最大值min(iterable, *args, key, default):返回可迭代对象中的最小值,或者多个参数中的最小值pow(x, y, z):返回x的y次幂,如果z存在,则返回x的y次幂对z取模的结果round(number, ndigits):返回四舍五入到ndigits位小数的numbersum(iterable, start):返回可迭代对象中所有元素的总和,start是可选的起始值
- 类型转换
bool(x):将x转换为布尔值chr(i):返回 Unicode 码点为i的字符int(x, base=10):将x转换为整数,base指定进制float(x):将x转换为浮点数complex(real, imag):返回复数(real + imagj)str(object, encoding='utf-8', errors='strict'):将对象转换为字符串repr(object):返回对象的官方字符串表示,通常用于调试ord(c):返回字符c的 Unicode 码点hex(x):将整数x转换为十六进制字符串oct(x):将整数x转换为八进制字符串bin(x):将整数x转换为二进制字符串
- 类型检查
isinstance(object, classinfo):检查对象是否是给定类的实例issubclass(class, classinfo):检查类是否是另一个类的子类type(object):返回对象的类型
- 输入输出
input([prompt]):读取用户输入print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False):打印对象到标准输出
- 内存和对象管理
id(object):返回对象的唯一标识符(内存地址)hash(object):返回对象的哈希值(如果对象是可哈希的)
- 迭代器和生成器
iter(iterable):获取迭代器next(iterator, default):返回迭代器的下一个项目,如果迭代器耗尽则返回default
- 可调用对象
callable(object):检查对象是否可调用(如函数、方法、带有__call__方法的对象等)
- 其他
eval(expression, globals=None, locals=None):执行一个字符串表达式,并返回表达式的值exec(object, globals=None, locals=None):支持动态执行 Python 代码globals():返回当前全局符号表的字典locals():返回当前局部符号表的字典len(object):返回对象(字符、列表、元组等)的长度或项目数sorted(iterable, key=None, reverse=False):返回一个新的已排序的列表reversed(seq):返回一个反转的迭代器slice(start, stop, step):返回一个表示由range(start, stop, step)指定索引集的切片对象super():返回父类(超类)的一个对象,通常用于调用父类的方法vars([object]):返回对象的__dict__属性,如果没有提供对象,则返回当前局部符号表idle():启动 Python 的 IDLE(集成开发和学习环境)help([object]):启动内置帮助系统(可选地用于对象)memoryview(obj):返回给定参数的“内存查看”对象
1.3 常用内置函数介绍
1.3.1 abs()
abs():返回绝对值
eg:
print(abs(-10)) # 输出结果:10
1.3.2 sum()
sum():求和
注意:sum()函数内需要放除字符串、字典外的可迭代对象(列表、元组、集合)
当你使用 sum() 函数时,请确保你传递的是一个包含数字的可迭代对象,这样函数才能正确地计算总和
如果可迭代对象中包含非数字元素,或者根本就不是一个可迭代对象(比如单个数字或字符串),那么 sum() 函数将无法正常工作,并可能引发错误。
eg1: 列表(List):包含数字的列表可以直接传递给 sum() 函数
numbers = [1, 2, 3, 4]
total = sum(numbers) # total 的值为 10
eg2: 元组(Tuple):与列表类似,包含数字的元组也可以传递给 sum() 函数
numbers = (1, 2, 3, 4)
total = sum(numbers) # total 的值为 10
eg3: 集合(Set):虽然集合是无序的,但只要它们包含的是数字,也可以传递给 sum() 函数。不过,由于集合不允许重复元素,所以使用集合来计算总和不是最常见的情况
numbers = {1, 2, 3, 4} # 注意:集合可能不包含所有重复元素
total = sum(numbers) # total 的值取决于集合中的实际元素,可能是 1+2+3+4=10,但如果有重复则会被去除
eg4: 字符串(String):字符串中的元素是字符,它们不是数字,因此不能相加。尝试对字符串使用 sum() 会导致类型错误
# 这将引发 TypeError
text = "1234"
total = sum(text) # 错误
eg5:字典(Dictionary):字典中的元素是键值对,它们不是单一的数字,因此也不能直接相加。虽然你可以对字典中的值(如果它们是数字)进行求和,但你需要先提取这些值
# 正确的做法是先提取字典的值,然后求和
data = {'a': 1, 'b': 2, 'c': 3}
total = sum(data.values()) # total 的值为 6
1.3.3 min & max()
min():求最小值
max():求最小值
print(min(4,1,8)) # 输出结果:1
print(max(4,1,8)) # 输出结果:8
# tips:比绝对值大小
print(max(-9,3,4,key=abs))
# 输出结果:-9 ,-9的绝对值为最大,传入了求绝对值函数,则参数就会先求绝对值再取较大者
1.3.4 zip()
zip():函数是一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)打包成一个元组的迭代器。如果各个可迭代对象的元素个数不一致,则返回的列表长度与最短的对象相同,利用 * 操作符,可以将元组解压为列表。
eg:
li = [1,2,3]
li2 = ['a','b']
print(zip(li,li2)) # 输出结果:<zip object at 0x000002C76F875188>
zip 函数的取出方式:
方法一:通过 for 循环
eg:
li = [1,2,3]
li2 = ['a','b']
print(zip(li,li2)) # 输出结果:<zip object at 0x000002C76F875188>
for i in zip(li,li2):print(i)print(type(i)) # 如果元素个数不一致,就按照长度最短的返回
# 输出结果:
# (1, 'a')
# <class 'tuple'>
# (2, 'b')
# <class 'tuple'>
方法二:转换成列表打印
li = [1,2,3]
li2 = ['a','b']
print(list(zip(li,li2))) # 输出结果:[(1, 'a'), (2, 'b')] # 转换成列表打印
# 注意:必须是可迭代对象才能转换成列表打印
# print(list(zip(li,3))) # 存在非可迭代对象,报错
1.3.5 map()
map():可以对可迭代对象中的每一个元素进行映射,分别去执行,简单来说就是对象中的每一个元素都会去执行这个函数
map(func,iter1):
func---自己定义的函数
iter1---要放进去的可迭代对象
eg:
li = [1,2,3]
def funa(x):return x * 5
mp = map(funa,li) # 将列表映射后的值储存到mp中
print(mp) # 输出结果:<map object at 0x000002B26B630048>
map()函数的取出方式和zip()函数类似,同样也有两种方式:
方式一:通过 for 循环
eg:
li = [1,2,3]
def funa(x):return x * 5
mp = map(funa,li) # 将列表映射后的值储存到mp中
print(mp) # 输出结果:<map object at 0x000002B26B630048>
for i in mp:print(i)
# 输出结果:5 10 15
方式二:转换成列表打印
eg:
li = [1,2,3]
def funa(x):return x * 5
mp = map(funa,li) # 将列表映射后的值储存到mp中,只用写函数名,不要加上()
print(list(mp)) # 输出结果:[5, 10, 15]
1.3.6 reduce()
reduce 函数是一个高阶函数,通常用于对可迭代对象中的元素进行累积计算(即逐步合并成一个单一结果)。它位于 functools 模块中,因此需要先从该模块导入
reduce函数的基本语法如下:
from functools import reduce # 需要先导包reduce(function, sequence)
- function:一个二元函数,即接受两个参数的函数。这个函数会对可迭代对象中的元素进行累积计算
- sequence:序列,可迭代对象
下面是一些使用 reduce 函数的示例:
eg1:计算列表中所有数字的和
from functools import reduce numbers = [1, 2, 3, 4, 5] # 定义一个二元函数,用于相加
def add(x, y): return x + y # 使用 reduce 计算和
total = reduce(add, numbers)
print(total) # 输出:15
eg2:计算列表中所有数字的乘积
from functools import reduce numbers = [1, 2, 3, 4, 5] # 定义一个二元函数,用于相乘
def multiply(x, y): return x * y # 使用 reduce 计算乘积
product = reduce(multiply, numbers)
print(product) # 输出:120
eg3:使用 lambda 表达式简化代码
from functools import reduce numbers = [1, 2, 3, 4, 5] # 使用 lambda 表达式计算和
total = reduce(lambda x, y: x + y, numbers)
print(total) # 输出:15 # 使用 lambda 表达式计算乘积
product = reduce(lambda x, y: x * y, numbers)
print(product) # 输出:120
eg4:使用初始值:有时,我们希望在累积计算中使用一个初始值。例如,计算字符串列表中所有字符串的连接,并在前面添加一个特定的前缀。
from functools import reduce strings = ["Hello", " ", "World", "!"] # 使用 reduce 连接字符串,并指定初始值 "Prefix:"
concatenated = reduce(lambda x, y: x + y, strings, "Prefix:")
print(concatenated) # 输出:Prefix: Hello World!
二、拆包
2.1 基本含义
在 Python 中,"拆包"(unpacking)通常指的是将可迭代对象(如列表、元组、集合或字符串等)中的元素赋值给多个变量的过程。这个过程可以通过多种方式实现,包括使用星号(*)操作符、多重赋值以及函数返回值的解包等。
2.2 使用星号(*)操作符拆包
星号操作符可以将可迭代对象中的元素解包到多个变量中,或者将它们收集到一个新的列表中
eg:
# 将列表中的元素拆包到多个变量中
a, b, c = [1, 2, 3]
print(a, b, c) # 输出: 1 2 3 # 将元组中的元素拆包到一个新的列表中
t = (4, 5, 6)
*rest = t
print(rest) # 输出: [4, 5, 6]
在此例子中,*rest 将元组 t 中的所有元素解包到一个名为 rest 的新列表中
2.3 多重赋值拆包
这是最直接和常见的拆包方式,即将可迭代对象中的元素直接赋值给多个变量
eg:
# 多重赋值拆包
x, y, z = 7, 8, 9
print(x, y, z) # 输出: 7 8 9
2.4 函数返回值的拆包
当函数返回多个值时(实际上返回的是一个元组),可以使用拆包来将这些值分别赋值给多个变量
# 定义一个返回多个值的函数
def get_coordinates(): return 10, 20 # 拆包函数返回值
lat, lon = get_coordinates()
print(lat, lon) # 输出: 10 20
2.5 在循环中使用拆包
在循环中,可以使用拆包来同时迭代多个可迭代对象
# 使用 zip 和拆包同时迭代两个列表
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3] for char, num in zip(list1, list2): print(char, num)
# 输出:
# a 1
# b 2
# c 3
在此例子中,zip 函数将 list1 和 list2 中的元素配对成一个新的迭代器,然后循环中的拆包操作将这些配对分别赋值给 char 和 num
2.6 注意事项
-
拆包时,可迭代对象中的元素数量必须与要赋值的变量数量相匹配,否则会引发
ValueError -
如果可迭代对象中的元素多于变量数量,则多余的元素将被忽略。如果少于变量数量,则未赋值的变量将引发
ValueError(在 Python 3 中),或者在 Python 2 中,未赋值的变量将被设置为None(但这通常不是推荐的做法,因为 Python 2 已经不再维护)
相关文章:
Python小白学习教程从入门到入坑------第十七课 内置函数拆包(语法基础)
一、内置函数 1.1 查看所有内置函数 内置函数:Python 提供了许多内置函数,这些函数无需导入任何模块即可直接使用。它们涵盖了各种用途,从数学运算到类型检查,再到输入输出操作等。 如何查看内置函数呢? 在Pycharm…...
动态规划 —— 路径问题-最小路径和
1. 最小路径和 题目链接: 64. 最小路径和 - 力扣(LeetCode)https://leetcode.cn/problems/minimum-path-sum/description/ 2. 算法原理 状态表示:以莫一个位置位置为结尾 dp[i,j]表示:到达[i,j…...
《链表篇》---删除链表的倒数第N个节点(中等)
题目传送门 方法一:计算链表长度(迭代) 1.计算链表长度,并且定义哑节点链接链表。 2.从哑节点开始前进length-n次。即为被删除节点的前置节点。 3.进行删除操作。 4.返回哑节点的后置节点 class Solution {public ListNode remo…...
duilib 进阶 之 TileListBox 列表
目录 一、TileListBox 1、样式 1)、整体列表分列设置 2)、列表项样式设置 3)、选中后出现√号,horver时 出现边框色 的实例 2、代码 1)、普通动态添加列表项 2)、列表项样式中有自定义控件时 3)、获得选中项 一、TileListBox Tile [taɪl] ,瓦片 棋子 Ti…...
Web应用安全—信息泄露
从书本和网上了解到Web应用安全的信息泄露的知识,今天跟大家分享点。 robots.txt泄漏敏感信息 漏洞描述:搜索引擎可以通过robots文件可以获知哪些页面可以爬取,哪些页面不可以爬取。Robots协议是网站国际互联网界通行的道德规范,…...
大数据治理:策略、技术与挑战
随着信息技术的飞速发展,大数据已经成为现代企业运营和决策的重要基础。然而,大数据的复杂性、多样性和规模性给数据管理带来了前所未有的挑战。因此,大数据治理应运而生,成为确保数据质量、合规性、安全性和可用性的关键手段。本…...
vscode插件-08 Golang
文章目录 Go安装其他必须软件 Go Go语言环境,只需安装这一个插件。然后通过vscode命令下载安装其他go环境需要的内容。 程序调试,需要创建.vscode文件夹并编写launch.json文件。 安装其他必须软件 ctrlshiftp,调出命令面板,输入…...
数据结构+算法分析与设计[15-18真题版]
2015年考试试题 一、给出数组A[3..8,2..6]0F integer,当它在内存中按行存放和按列存放时,分别写出元素A[i,j]的地址计算公式(设每个元素占两个存储单元)。(10分) 二、已知一棵二叉树的中序序列的结果是BDCEAFHG,后序序列的结果是DECBHGFA,试画出这棵二叉树。(10分…...
单链表OJ题(2):反转链表(三指针法)、找中间节点(快慢指针)
目录 1.反转链表 反转链表总结: 2.链表的中间节点(快慢指针法) 快慢指针法总结 1.反转链表 在这道题中,我们需要把一个单链表反转它们的指向,这里,我们给出了一个好理解的简单解法,就是用三…...
Rows 行
Goto Data Grid 数据网格 Rows 行...
十个常见的软件测试面试题,拿走不谢
所有面试问题一般建议先总后分的方式来回答,这样可以让面试官感觉逻辑性很强。 1. 自我介绍 之所以让我们自我介绍,其实是面试官想找一些时间来看简历,所以自我介绍不用太长的时间,1-2分 钟即可。 自我介绍一般按以下方式进行介…...
windows 11 配置 kafka 使用SASL SCRAM-SHA-256 认证
1. 下载安装apache-zookeeper-3.9.2 配置 \conf\zoo.cfg # The number of milliseconds of each tick tickTime2000 # The number of ticks that the initial # synchronization phase can take initLimit10 # The number of ticks that can pass between # sending a requ…...
Elasticsearch —— ES 环境搭建、概念、基本操作、文档操作、SpringBoot继承ES
文章中会用到的文件,如果官网下不了可以在这下 链接: https://pan.baidu.com/s/1SeRdqLo0E0CmaVJdoZs_nQ?pwdxr76 提取码: xr76 一、 ES 环境搭建 注:环境搭建过程中的命令窗口不能关闭,关闭了服务就会关闭(除了修改设置后重启的…...
ElSelect 组件的 onChange 和 onInput 事件的区别
偶然遇到一个问题,在 ElSelect 组件中设置 filterable 属性后,监测不到复制粘贴的内容,也就意味着不能调用接口,下拉框内容为空。 简要代码如下: <ElSelectstyle"width: 256px"multiplev-model{siteIdL…...
加密与数据提取:保护隐私的新途径
加密与数据提取:保护隐私的新途径 在数字化时代,数据已成为驱动社会进步和经济发展的关键要素。然而,随着数据量的爆炸性增长,个人隐私保护成为了一个亟待解决的问题。如何在利用数据价值的同时,确保个人隐私不被侵犯…...
博客摘录「 宋宝华:Linux文件读写(BIO)波澜壮阔的一生」2024年11月1日
同时内核会给第2页标识一个PageReadahead标记,意思就是如果app接着读第2页,就可以预判app在做顺序读,这样我们在app读第2页的时候,内核可以进一步异步预读。 每个bio对应的硬盘里面一块连续的位置,每一块硬盘里面连续…...
使用华为云数字人可以做什么
在数字化和智能化快速发展的今天,企业面临着如何提升客户体验、优化运营效率的挑战。华为云数字人作为一种创新的智能交互解决方案,为企业提供了全新的可能性,助力企业在各个领域实现智能化升级。 提升客户服务体验 华为云数字人能够模拟真…...
leetcode刷题记录——(十六)349. 两个数组的交集
(一)问题描述 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/intersection-of-two-arrays/ …...
vue3实现规则编辑器
组件用于创建和编辑复杂的条件规则,支持添加、删除条件和子条件,以及选择不同的条件类型。 可实现json数据和页面显示的转换。 代码实现 : index.vue: <template><div class"allany-container"><div class"co…...
【快速上手】pyspark 集群环境下的搭建(Standalone模式)
目录 前言 : 一、spark运行的五种模式 二、 安装步骤 安装前准备 1.第一步:安装python 2.第二步:在bigdata01上安装spark 3.第三步:同步bigdata01中的spark到bigdata02和03上 三、集群启动/关闭 四、打开监控界面验证 前…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
