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
位小数的number
sum(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上 三、集群启动/关闭 四、打开监控界面验证 前…...

中文NLP地址要素解析【阿里云:天池比赛】
比赛地址:中文NLP地址要素解析 https://tianchi.aliyun.com/notebook/467867?spma2c22.12281976.0.0.654b265fTnW3lu长期赛: 分数:87.7271 排名:长期赛:56(本次)/6990(团体或个人)方案…...

使用AddressSanitizer内存检测
修改cmakelist.txt,在project(xxxx)后面追加: option(MEM_CHECK "memory check with AddressSanitizer" OFF) if(MEM_CHECK)set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitizeaddress")set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS…...

11月1日星期五今日早报简报微语报早读
11月1日星期五,农历十月初一,早报#微语早读。 1、六大行今日起实施存量房贷利率新机制。 2、谷歌被俄罗斯罚款35位数,罚款远超全球GDP。 3、山西吕梁:女性35岁前登记结婚,给予1500元奖励。 4、我国人均每日上网时间…...

实用篇:Postman历史版本下载
postman历史版本下载步骤 1.官方历史版本发布信息 2.点进去1中的链接,往下滑动;选择你想要的版本 例如下载v11.18版本 3.根据操作系统选择 mac:mac系统postman下载 window:window系统postman下载 4.在old version里找到对应版本下载即可 先点击download 再点击free downlo…...

微服务实战系列之玩转Docker(十七)
导览 前言Q:如何实现etcd数据的可视化管理一、创建etcd集群1. 节点定义2. 集群成员2.1 docker ps2.2 docker exec2.3 etcdctl member list 二、发布数据1. 添加数据2. 数据共享 三、可视化管理1. ETCD Keeper入门1.1 简介1.2 安装1.2.1 定义compose.yml1.2.2 启动ke…...

操作系统-实验报告单(1)
目录 1 实验目标 2 实验工具 3 实验内容、实验步骤及实验结果 一、安装虚拟机及Ubuntu 5、*存在虚拟机不能安装的问题 二、Ubuntu基本操作 1、桌面操作 2、终端命令行操作 三、在Ubuntu下运行C程序 3、*Ubuntu中编写一个Hello.c的主要程序 4 实验总结 实 验 报 告…...

rom定制系列------小米8青春版定制安卓14批量线刷固件 原生系统
💝💝💝小米8青春版。机型代码platina。官方最终版为 12.5.1安卓10的版本。客户需要安卓14的固件以便使用他们的软件。根据测试,原生pixeExpe固件适配兼容性较好。为方便客户批量进行刷写。修改固件为可fast批量刷写。整合底层分区…...

CATIA许可证常见问题解答
在使用CATIA软件的过程中,许可证问题常常是用户关心的焦点。为了帮助大家更好地理解和解决这些问题,我们整理了一份CATIA许可证常见问题解答,希望能为您提供便捷的参考。 问题一:如何激活CATIA许可证? 解答:…...

PySpark Standalone 集群部署教程
目录 1. 环境准备 1.1 配置免密登录 2. 下载并配置Spark 3. 配置Spark集群 3.1 配置spark-env.sh 3.2 配置spark-defaults.conf 3.3 设置Master和Worker节点 3.4 设配置log4j.properties 3.5 同步到所有Worker节点 4. 启动Spark Standalone集群 4.1 启动Master节点 …...

【源码+文档】基于SpringBoot+Vue旅游网站系统【提供源码+答辩PPT+参考文档+项目部署】
作者简介:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容:🌟Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…...