当前位置: 首页 > news >正文

Python小白学习教程从入门到入坑------第十七课 内置函数拆包(语法基础)

一、内置函数

1.1 查看所有内置函数

内置函数:Python 提供了许多内置函数,这些函数无需导入任何模块即可直接使用。它们涵盖了各种用途,从数学运算到类型检查,再到输入输出操作等。

如何查看内置函数呢?

在Pycharm中,用 import builtins 查看内置函数

eg:

import builtins
print(dir(builtins))

1.2 常见内置函数分类

以下是一些常用的内置函数及其简要说明:

  1. 数学运算相关
    • 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 是可选的起始值
  2. 类型转换
    • 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 转换为二进制字符串
  3. 类型检查
    • isinstance(object, classinfo):检查对象是否是给定类的实例
    • issubclass(class, classinfo):检查类是否是另一个类的子类
    • type(object):返回对象的类型
  4. 输入输出
    • input([prompt]):读取用户输入
    • print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False):打印对象到标准输出
  5. 内存和对象管理
    • id(object):返回对象的唯一标识符(内存地址)
    • hash(object):返回对象的哈希值(如果对象是可哈希的)
  6. 迭代器和生成器
    • iter(iterable):获取迭代器
    • next(iterator, default):返回迭代器的下一个项目,如果迭代器耗尽则返回 default
  7. 可调用对象
    • callable(object):检查对象是否可调用(如函数、方法、带有 __call__ 方法的对象等)
  8. 其他
    • 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 注意事项

  1. 拆包时,可迭代对象中的元素数量必须与要赋值的变量数量相匹配,否则会引发 ValueError

  2. 如果可迭代对象中的元素多于变量数量,则多余的元素将被忽略。如果少于变量数量,则未赋值的变量将引发 ValueError(在 Python 3 中),或者在 Python 2 中,未赋值的变量将被设置为 None(但这通常不是推荐的做法,因为 Python 2 已经不再维护)

相关文章:

Python小白学习教程从入门到入坑------第十七课 内置函数拆包(语法基础)

一、内置函数 1.1 查看所有内置函数 内置函数&#xff1a;Python 提供了许多内置函数&#xff0c;这些函数无需导入任何模块即可直接使用。它们涵盖了各种用途&#xff0c;从数学运算到类型检查&#xff0c;再到输入输出操作等。 如何查看内置函数呢&#xff1f; 在Pycharm…...

动态规划 —— 路径问题-最小路径和

1. 最小路径和 题目链接&#xff1a; 64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/minimum-path-sum/description/ 2. 算法原理 状态表示&#xff1a;以莫一个位置位置为结尾 dp[i&#xff0c;j]表示&#xff1a;到达[i&#xff0c;j…...

《链表篇》---删除链表的倒数第N个节点(中等)

题目传送门 方法一&#xff1a;计算链表长度&#xff08;迭代&#xff09; 1.计算链表长度&#xff0c;并且定义哑节点链接链表。 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应用安全的信息泄露的知识&#xff0c;今天跟大家分享点。 robots.txt泄漏敏感信息 漏洞描述&#xff1a;搜索引擎可以通过robots文件可以获知哪些页面可以爬取&#xff0c;哪些页面不可以爬取。Robots协议是网站国际互联网界通行的道德规范&#xff0c…...

大数据治理:策略、技术与挑战

随着信息技术的飞速发展&#xff0c;大数据已经成为现代企业运营和决策的重要基础。然而&#xff0c;大数据的复杂性、多样性和规模性给数据管理带来了前所未有的挑战。因此&#xff0c;大数据治理应运而生&#xff0c;成为确保数据质量、合规性、安全性和可用性的关键手段。本…...

vscode插件-08 Golang

文章目录 Go安装其他必须软件 Go Go语言环境&#xff0c;只需安装这一个插件。然后通过vscode命令下载安装其他go环境需要的内容。 程序调试&#xff0c;需要创建.vscode文件夹并编写launch.json文件。 安装其他必须软件 ctrlshiftp&#xff0c;调出命令面板&#xff0c;输入…...

数据结构+算法分析与设计[15-18真题版]

2015年考试试题 一、给出数组A[3..8,2..6]0F integer,当它在内存中按行存放和按列存放时&#xff0c;分别写出元素A[i,j]的地址计算公式(设每个元素占两个存储单元)。(10分) 二、已知一棵二叉树的中序序列的结果是BDCEAFHG,后序序列的结果是DECBHGFA,试画出这棵二叉树。(10分…...

单链表OJ题(2):反转链表(三指针法)、找中间节点(快慢指针)

目录 1.反转链表 反转链表总结&#xff1a; 2.链表的中间节点&#xff08;快慢指针法&#xff09; 快慢指针法总结 1.反转链表 在这道题中&#xff0c;我们需要把一个单链表反转它们的指向&#xff0c;这里&#xff0c;我们给出了一个好理解的简单解法&#xff0c;就是用三…...

Rows 行

Goto Data Grid 数据网格 Rows 行...

十个常见的软件测试面试题,拿走不谢

所有面试问题一般建议先总后分的方式来回答&#xff0c;这样可以让面试官感觉逻辑性很强。 1. 自我介绍 之所以让我们自我介绍&#xff0c;其实是面试官想找一些时间来看简历&#xff0c;所以自我介绍不用太长的时间&#xff0c;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

文章中会用到的文件&#xff0c;如果官网下不了可以在这下 链接: https://pan.baidu.com/s/1SeRdqLo0E0CmaVJdoZs_nQ?pwdxr76 提取码: xr76 一、 ES 环境搭建 注&#xff1a;环境搭建过程中的命令窗口不能关闭&#xff0c;关闭了服务就会关闭&#xff08;除了修改设置后重启的…...

ElSelect 组件的 onChange 和 onInput 事件的区别

偶然遇到一个问题&#xff0c;在 ElSelect 组件中设置 filterable 属性后&#xff0c;监测不到复制粘贴的内容&#xff0c;也就意味着不能调用接口&#xff0c;下拉框内容为空。 简要代码如下&#xff1a; <ElSelectstyle"width: 256px"multiplev-model{siteIdL…...

加密与数据提取:保护隐私的新途径

加密与数据提取&#xff1a;保护隐私的新途径 在数字化时代&#xff0c;数据已成为驱动社会进步和经济发展的关键要素。然而&#xff0c;随着数据量的爆炸性增长&#xff0c;个人隐私保护成为了一个亟待解决的问题。如何在利用数据价值的同时&#xff0c;确保个人隐私不被侵犯…...

博客摘录「 宋宝华:Linux文件读写(BIO)波澜壮阔的一生」2024年11月1日

同时内核会给第2页标识一个PageReadahead标记&#xff0c;意思就是如果app接着读第2页&#xff0c;就可以预判app在做顺序读&#xff0c;这样我们在app读第2页的时候&#xff0c;内核可以进一步异步预读。 每个bio对应的硬盘里面一块连续的位置&#xff0c;每一块硬盘里面连续…...

使用华为云数字人可以做什么

在数字化和智能化快速发展的今天&#xff0c;企业面临着如何提升客户体验、优化运营效率的挑战。华为云数字人作为一种创新的智能交互解决方案&#xff0c;为企业提供了全新的可能性&#xff0c;助力企业在各个领域实现智能化升级。 提升客户服务体验 华为云数字人能够模拟真…...

leetcode刷题记录——(十六)349. 两个数组的交集

&#xff08;一&#xff09;问题描述 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/intersection-of-two-arrays/ …...

vue3实现规则编辑器

组件用于创建和编辑复杂的条件规则&#xff0c;支持添加、删除条件和子条件&#xff0c;以及选择不同的条件类型。 可实现json数据和页面显示的转换。 代码实现 &#xff1a; index.vue: <template><div class"allany-container"><div class"co…...

【快速上手】pyspark 集群环境下的搭建(Standalone模式)

目录 前言 &#xff1a; 一、spark运行的五种模式 二、 安装步骤 安装前准备 1.第一步&#xff1a;安装python 2.第二步&#xff1a;在bigdata01上安装spark 3.第三步&#xff1a;同步bigdata01中的spark到bigdata02和03上 三、集群启动/关闭 四、打开监控界面验证 前…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...