【Python内功心法】:深挖内置函数,释放语言潜能

news2024/11/17 21:28:35

文章目录

      • 🚀一、常见内置函数
      • 🌈二、高级内置函数
        • ⭐1. enumerate函数
        • 👊2. eval函数
        • ❤️3. exec函数
        • 💥4. eval与exec 中 globals与locals如何用
            • ☔4-1 globals 参数
            • 🎬4-2 locals 参数
        • ❤️5. filter函数
        • 👊6. zip函数
        • 🚲7. map函数

🚀一、常见内置函数

在这里插入图片描述
Python 提供了许多内置函数,这些函数无需导入任何模块即可直接使用,极大地丰富了编程的便捷性。以下是一些常用的Python内置函数及其简要说明:

函数概念
len()查长度
min()求最小值
max()求最大值
sorted()排序
reversed()反向(返回一个反转的迭代器)
sum()求和
bin()转化二进制
int(‘转化进制数据’,‘进制类型’)转化为十进制
oct()转化为八进制
hex()转化为十六进制
ord()字符转ASCLL码
chr()ASCLL码转字符
range()生成一个给定范围内的数字序列。

这些只是冰山一角,Python还有许多其他有用的内置函数,建议查阅官方文档或使用help()函数深入学习。

🌈二、高级内置函数

⭐1. enumerate函数

enumerate是Python的一个内置函数,它在遍历(如循环)过程中为可迭代对象(如列表、元组、字符串等)的每个元素生成索引号,这样就可以同时访问到元素的索引和值。这对于需要追踪元素位置的情况非常有用,而无需单独维护一个计数器变量。

基本语法

enumerate(iterable, start=0)
  • iterable:需要遍历的可迭代对象。
  • start:索引起始值,默认为0。你可以设置任意整数作为起始索引。
a = ['apple', 'banana', 'orange']
for index, value in enumerate(a):
    print(index, value)

在这里插入图片描述

👊2. eval函数

eval() 是 Python 中的一个内置函数,它的作用是执行一个字符串表达式,并返回表达式的值。这个功能强大但也危险,因为它可以执行任意的 Python 代码,这可能导致安全风险,特别是当处理来自不可信来源的数据时。

基本语法

eval(expression, globals=None, locals=None)
  • expression: 要被解析和执行的字符串形式的 Python 表达式。
  • globals: 可选参数,一个字典,将用作全局命名空间。如果未提供,则使用当前的全局命名空间。
  • locals: 可选参数,一个映射,将用作局部命名空间。如果未提供,则使用当前的局部命名空间。
x = 10
y = 5

# 使用 eval 计算两个数的和
sum_str = "x + y"
result = eval(sum_str)

print("The sum is:", result)  # 输出: The sum is: 15

在这里插入图片描述
注意:尽管 eval() 可用于动态执行代码或计算字符串形式的表达式,但应谨慎使用,特别是在处理用户输入时,以避免代码注入攻击。最佳实践是尽量寻找更安全的替代方案,如使用 ast.literal_eval() 处理安全的字面量数据结构,或者直接编写代码来避免执行用户提供的代码。

❤️3. exec函数

exec() 函数也是 Python 的一个内置函数,它用来执行储存在字符串或文件中的 Python 代码。与 eval() 类似,exec() 功能更为强大,可以执行复杂的代码块,包括声明、赋值、函数定义等,而不只是简单的表达式。然而,这也意味着它带来了更大的安全风险,尤其是在执行来自不可信来源的代码时。

基本语法

exec(object[, globals[, locals]])
  • object: 一个包含 Python 代码的字符串,或者一个代码对象。
  • globals: 可选参数,一个字典,用作全局命名空间。如果未提供,默认使用当前的全局命名空间。
  • locals: 可选参数,一个映射,用作局部命名空间。如果未提供,默认使用全局命名空间的一个拷贝,或者如果提供了 globals 参数且它是一个字典,则使用 globals 的拷贝。
code = """
def greet(name):
    print(f"Hello, {name}!")
greet("World")
"""
# 执行代码
exec(code)

在这里插入图片描述
注意:由于 exec() 可以执行任意的 Python 代码,因此也存在一些安全性问题。如果向 exec() 中传入了恶意代码,就可能会导致程序出现安全漏洞。建议只在必要的情况下使用 exec(),并且不要将用户输入的字符串直接作为参数传入。

💥4. eval与exec 中 globals与locals如何用
☔4-1 globals 参数

globals 参数接受一个字典对象,用于指定全局变量的名称和值。当代码块中访问某个未定义的全局变量时,默认会在 globals 参数所指定的字典中查找对应的值。

【示例】

a = 100
b = 200
my_globals = {"a": 300, "b": 400}
exec("""
def func():
    c = a + b
    print(c)
func()""", my_globals)

在这里插入图片描述
使用 exec() 函数来执行函数 func(),并通过 my_globals 参数指定了全局变量 a 和 b 的值为 300 和 400。因此,代码块中计算出的 c 的值为 700。

🎬4-2 locals 参数

locals 参数接受一个字典对象,用于指定局部变量的名称和值。当代码块中声明了一个新的局部变量时(如:x=100),该变量将被添加到 locals 参数所指定的字典中。

【示例】

my_locals = {}
exec("x = 100", None, my_locals)
print(my_locals["x"])
# 输出 100

在这里插入图片描述
exec() 函数执行了一个简单的赋值语句,并将结果保存在 my_locals 字典中。由于局部变量 x 被添加到了 my_locals 中,因此我们可以通过该字典获取变量的值。

locals 参数仅在 exec() 函数中生效。在 eval() 函数中,局部变量会被设置为 eval() 函数内部定义的变量。

【示例】

x = 100
y = eval("x + 1")
print(y)
# 输出 101

在这里插入图片描述
eval() 函数执行了简单的算术表达式,其中包含了全局变量 x。由于 eval() 函数的局部环境是固定的,因此它无法读取或修改其他变量定义。

❤️5. filter函数

filter() 函数是 Python 中的一个内置高阶函数,用于对序列进行过滤操作,构造一个新的迭代器,该迭代器生成满足特定条件的元素。filter() 函数接收两个参数:一个是函数(该函数用于测试序列中的每个元素),另一个是可迭代对象(如列表、元组、字符串等),然后返回一个迭代器,该迭代器生成经过测试函数筛选后的元素。

基本语法

filter(function, iterable)
  • function: 一个函数,它接受一个元素并返回 True 或 False。如果该参数为 None,则假定它是一个身份函数,即只保留那些在布尔上下文中为 True 的元素(例如,非零、非空元素)。
  • iterable: 一个可迭代的对象,如列表、元组、字符串等。

【示例】:过滤掉所有的偶数,只保留奇数

numbers = [1, 2, 3, 4, 5, 6]
# 定义一个函数来测试是否为奇数
is_odd = lambda x: x % 2 != 0
# 使用 filter 函数
filtered_numbers = filter(is_odd, numbers)
# 将迭代器转换为列表查看结果
print(list(filtered_numbers))  # 输出: [1, 3, 5]

在这里插入图片描述
注意:从 Python 3 开始,filter() 直接返回一个迭代器而不是列表,因此如果需要实际的列表或其他容器,通常需要将结果转换为所需的类型。

👊6. zip函数

zip() 是 Python 中的一个内置函数,用于将多个可迭代对象(如列表、元组、字符串等)打包成一个元组的列表(在 Python 2 中返回列表,在 Python 3 中返回迭代器,但通常习惯性转换为列表使用)。如果传入的各个可迭代对象长度不一致,zip() 函数会以最短的那个对象为准。

迭代器对象(Iterator)是 Python 的内置类型之一,用于对序列进行遍历和访问。所有的 Python 可迭代对象都可以通过 iter() 函数生成一个迭代器。
迭代器的优点在于可以逐个返回元素,从而可以直接在序列上进行操作,而不需要创建一个新的列表或元组。
迭代器有两个常用的方法,即 iter() 和 next():

  • iter():返回迭代器本身。
  • next():返回当前迭代位置的下一个元素。

基本语法

zip(iterable1, iterable2, ..., iterableN)
  • iterable1, iterable2, ..., iterableN:多个可迭代对象作为参数。

功能说明

  • 当传入两个或多个可迭代对象时,zip() 会将这些可迭代对象中相同位置的元素配对,形成一个元组,然后将这些元组合并成一个列表(或在 Python 3 中直接返回一个迭代器)。
  • 如果只有一个可迭代对象被传入,zip() 会将这个对象的元素与它们自己的索引配对。
  • 当可迭代对象长度不同时,zip() 会停止于最短的那个可迭代对象结束。
names = ['Alice', 'Bob', 'Charlie']
ages = [24, 30, 22]

# 使用 zip 函数配对姓名和年龄
pairs = list(zip(names, ages))
print(pairs)  # 输出: [('Alice', 24), ('Bob', 30), ('Charlie', 22)]

# 如果有不同长度的列表
heights = [165, 180]
# 配对时以最短的列表为准
short_pairs = list(zip(names, ages, heights))
print(short_pairs)  # 输出: [('Alice', 24, 165), ('Bob', 30, 180)]

在这里插入图片描述
解压 zip 对象
已经创建了一个 zip 对象并想恢复原始的可迭代对象,可以使用 zip(*zipped) 结构,这里的 * 操作符用于解包 zip 对象。

# 假设我们有之前创建的 pairs
pairs = [('Alice', 24), ('Bob', 30), ('Charlie', 22)]

# 解压 pairs 回到 names 和 ages
names_back, ages_back = zip(*pairs)
print(list(names_back))  # 输出: ['Alice', 'Bob', 'Charlie']
print(list(ages_back))   # 输出: [24, 30, 22]

在这里插入图片描述

🚲7. map函数

map() 是 Python 的一个内置函数,它接受一个函数和一个或多个可迭代对象作为输入,将函数依次应用于可迭代对象的每个元素上,并返回一个由处理结果组成的迭代器(在 Python 2 中返回列表,在 Python 3 中返回迭代器,通常可以通过 list()、tuple() 等转换为具体的数据结构)。

基本语法

map(function, iterable1, iterable2, ...)
  • function:一个接受单个或多个参数的函数,会被应用到每个迭代器的元素上。
  • iterable1, iterable2, ...:一个或多个可迭代对象,这些对象的元素将作为参数传递给 function。

功能说明

  • map() 会遍历每个可迭代对象,并将相应的元素作为参数传递给 function。
  • 当提供多个可迭代对象时,function 必须接受与可迭代对象数量相等的参数。
  • 如果可迭代对象长度不一致,map() 会以最短的那个为准。
# 将列表中的每个元素平方
numbers = [1, 2, 3, 4]
squared = map(lambda x: x**2, numbers)
print(list(squared))  # 输出: [1, 4, 9, 16]

# 对两个列表中的元素进行相加
nums1 = [1, 2, 3]
nums2 = [4, 5, 6]
sums = map(lambda x, y: x+y, nums1, nums2)
print(list(sums)) 

在这里插入图片描述
注意

  • 在 Python 3 中,map() 返回的是一个迭代器,因此通常需要通过 list()、tuple() 或在循环中直接使用来获取具体的结果。
  • 使用 map() 可以使代码更加简洁和高效,尤其是配合匿名函数 lambda 使用时,非常适合进行简单的数据处理任务。然而,在某些情况下,列表推导式可能提供更清晰的代码可读性。

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

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

相关文章

发电机组故障的原因、解决方案及解决措施

发电机组故障的原因、解决方案及解决措施可以总结如下: 一、故障原因 供电中断 原因:电网故障、线路短路或电力负荷过重等。 燃油问题 原因:燃油供应系统问题,如燃油管路堵塞、燃油质量不佳等。 轴承过热 原因:轴承过…

小学生四则运算练习器,用户可以选择进行加减乘除任意一项,也可以选择退出,然后每次计算后会提示正确与否,最后计算总分然后并给出评语。

⑴ 用户可以从菜单中选择某种运算进行练习。具体包括:加法,减法,乘法,除法;也可以退出程序. ⑵ 用户可以指定每次练习的题目数量、设置练习的总分; ⑶ 每小题练习后给出结果正确与否的提示;一…

【机器学习】智能选择的艺术:决策树在机器学习中的深度剖析

在机器学习的分类和回归问题中,决策树是一种广泛使用的算法。决策树模型因其直观性、易于理解和实现,以及处理分类和数值特征的能力而备受欢迎。本文将解释决策树算法的概念、原理、应用、优化方法以及未来的发展方向。 🚀时空传送门 &#x…

基于单片机的微型嵌入式温度测量仪的设计与实现分析

摘要 : 作为信息技术中重要的技术手段之一嵌入式单片机系统已经被应用到越来越多不同的行业领域中。如,各种手持监测设备、智能家电设备等。当前展开对单片机的微型嵌入式温度测量仪的设计和实现研究,从微型嵌入式单片机相关理论入手&#xf…

Java Apache Jaccard文本相似度匹配初体验

文章目录 前言一、文本相似度算法的选择二、常见的文本相似度算法介绍三、使用示例1、引入jar包2、方法示例3、Jaccard源码剖析4、Jaccard源码解释 写在最后 前言 产品今天提了个需求,大概是这样的,来,请看大屏幕。。。额。。。搞错了&#…

IDEA插件开发:自动生成setter

背景 在给Java局部变量的实体赋值时,往往有很多setter,一个一个写很麻烦,也会漏掉,因此开发一款插件,可以自动生成局部变量实体的所有setter。 插件效果如下: 可以在plugin marketplace 搜索&#xff1…

Nginx 1.26.0 爆 HTTP/3 QUIC 漏洞,建议升级更新到 1.27.0

据悉,Nginx 1.25.0-1.26.0 主线版本中涉及四个与 NGINX HTTP/3 QUIC 模块相关的中级数据面 CVE 漏洞,其中三个为 DoS 攻击类型风险,一个为随机信息泄漏风险,影响皆为允许未经身份认证的用户通过构造请求实施攻击。目前已经紧急发布…

【ARM-Linux篇】u-boot编译

一、u-boot简介 uboot是一种通用的引导加载程序,它可以用于多种嵌入式系统,支持多种操作系统,如Linux, Android,NetBSD等。uboot的主要作用是将操作系统内核从存储设备(如Flash, SD卡等)加载到内存中,并执…

Thread的stop和interrupt的区别

Thread.stop Thread.stop()方法已被废弃。 因为本质上它是不安全的,使用该方法可能会导致数据、资源不一致的问题, public class ThreadDemo {static class MyThread extends Thread {Overridepublic void run() {while (true) {try {Thread.sleep(10…

C#WPF数字大屏项目实战03--数据内容区域

1、内容区域划分 第一行标题,放了几个文本框 第二行数据,划分成3列布局 2、第1列布局使用UniformGrid控件 最外面放UniformGrid,然后里面放3个GroupBox控件,这3个groupbox都是垂直排列 3、GroupBox控件模板 页面上的3个Group…

基于SSM的“健身俱乐部网站”的设计与实现(源码+数据库+文档)

基于SSM的“健身俱乐部网站”的设计与实现(源码数据库文档) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 用户注册界面图 系统登录界面 添加管理员账户界面…

微服务架构-微服务实施

目录 一、概述 二、微服务拆分 2.1 概述 2.2 拆分原则 2.3 拆分方法 2.3.1 以数据为维度进行拆分 2.3.2 按照使用场景拆分 2.3.3 重要和非重要的拆分 2.3.4 变和不变的拆分 三、微服务通信 3.1 概述 3.2 微服务通信方式选择 3.3 微服务编排 3.4 API接口设计 3.5 …

CANDela studio新建和编辑服务

服务定义和编辑只能够在CDDT里面进行,思路分为三步: 1、Protocol Services里面添加服务,定义服务的格式、请求和正负响应。 2、根据服务的功能归类到Diagnostic Class Tenplates 3、Variant里面的Supported Diagnostic Classes勾选 然后我…

CrossOver支持M4新品吗?苹果M4芯片对游戏支持的怎么样?

CrossOver是一款可以在不同平台之间无缝切换的软件,它可以让你在MacOS或者Linux操作系统上运行Windows应用程序,无需安装双系统或虚拟机。CrossOver是基于Wine项目开发的,Wine是一个可以在非Windows平台上运行Windows应用程序的兼容层。 那么…

十四天学会Vue——Vue核心下篇(理论+实战)(第三天)

一、Vue核心下篇 1.15 常用的内置指令 1. v-text <!--准备好一个容器 --><div id"root"><!-- 1.v-text中的字符替换掉div整个字符 --><div v-text"name">你好,{{name}}</div><!-- 2.将标签当做字符串解析 --><di…

前端3剑客(第1篇)-初识HTML

100编程书屋_孔夫子旧书网 当今主流的技术中&#xff0c;可以分为前端和后端两个门类。 前端&#xff1a;简单的理解就是和用户打交道 后端&#xff1a;主要用于组织数据 而前端就Web开发方向来说&#xff0c; 分为三门语言&#xff0c; HTML、CSS、JavaScript 语言作用HT…

文件夹损坏0字节:原因、恢复方案与预防措施

在使用电脑或移动设备时&#xff0c;我们有时会遇到文件夹突然损坏并显示为0字节的情况。这种故障不仅令人困惑&#xff0c;更可能导致重要数据的丢失。本文将深入探讨文件夹损坏0字节的现象&#xff0c;分析其产生的原因&#xff0c;并给出两种有效的数据恢复方案&#xff0c;…

特别实用的8个机器学习算法总结!建议收藏,反复观看!

个人主页&#xff1a;.Boss.-CSDN博客 目录 1.线性回归&#xff08;Linear Regression&#xff09; 2.多项式回归&#xff08;Polynomial Regression&#xff09; 3.岭回归&#xff08;Ridge Regression&#xff09; 4.Lasso回归&#xff08;Lasso Regression&#xff09; …

Linux sudo用户权限管理小实验001

Linux sudo用户权限管理和审计-初步 1、设置历史指令的保存数量 默认history指令可以查看当前用户执行的1000条历史命令的条目 2、使用export指令设置HISTSIZE环境变量的数量为999999条。 3、基于date指令&#xff0c;输出日期和时间 4、设置linux系统history相关变量&…

【Springboot】——项目的创建与请求参数应用

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…