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

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

文章目录

      • 🚀一、常见内置函数
      • 🌈二、高级内置函数
        • ⭐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 + bprint(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 使用时,非常适合进行简单的数据处理任务。然而,在某些情况下,列表推导式可能提供更清晰的代码可读性。

相关文章:

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

文章目录 🚀一、常见内置函数🌈二、高级内置函数⭐1. enumerate函数👊2. eval函数❤️3. exec函数💥4. eval与exec 中 globals与locals如何用☔4-1 globals 参数🎬4-2 locals 参数 ❤️5. filter函数👊6. z…...

JS-09-es6常用知识1

目录 1 模板字符串 1.1 模板字符串基本用法 1.2 模板字符串解决了一些痛点 2 解构赋值 2.1 对象的解构赋值 2.2 函数参数的解构赋值 2.3 补写:属性的简写 3 rest参数 3.1 arguments 3.2 rest参数 3.3 补充:判断数据类型 4 箭头函数 4.1 …...

SpringBoot 基础之自动配置

SpringBoot 自动配置 SpringBoot 通过 自动配置 简化了大量的繁复的配置信息。 启动类 Application 中有两处特别之处: 注解:SpringBootApplication run 方法:SpringApplication.run(…) SpringBootApplication 注解至少等价于以下三个注…...

Oracle dblink 发现Network 等待事件的分析 enq: KO - fast object checkpoint

所有的sql 通过dblink 查询全部等待中, 同一个SQL 20多个session 在跑,等待事件network,可能怀疑是不是网络断开了,导致没有返回 执行sql 如下: BEGIN Xdblink ; END; 去到dblink 所在的db,发现20多个sql在…...

SpringMVC:向三大域对象存数据

1. 简介 Servlet中的三个域对象 请求域:request会话域:session应用域:application 主要是通过:setAttribute getAttribute方法来完成在域中数据的传递和共享。 点击跳转Servlet详细概念 // 向域中存储数据 void setAttribute(St…...

如何用python做一个用户登录界面——浔川python社

1 需解决的问题: 1.1如何用python做一个用户登录界面? 1.2需要用到哪些库、模块? 2 问题解决: 2.1 回答 1.1 :合理即可,无标准回答。 2.2 回答 1.2 :tk库(缩写)、GUL界面…...

Python知识点9---推导式

提前说一点:如果你是专注于Python开发,那么本系列知识点只是带你入个门再详细的开发点就要去看其他资料了,而如果你和作者一样只是操作其他技术的Python API那就足够了。 Python提供的推导式,只对列表、字典、集合三种数据类型生…...

用C++做一个跑酷游戏

要用C创建一个跑酷游戏是一个相对复杂的任务,因为它涉及到图形渲染、用户输入处理、物理模拟等多个方面。由于C本身并不直接支持图形渲染,我们通常需要使用一个图形库来帮助我们实现这一点。 一个常用的选择是使用SFML(Simple and Fast Mult…...

基于字典树可视化 COCA20000 词汇

COCA20000 是美国当代语料库中最常见的 20000 个词汇,不过实际上有一些重复,去重之后大概是 17600 个,这些单词是很有用,如果能掌握这些单词,相信会对英语的能力有一个较大的提升。我很早就下载了这些单词,…...

TypeScript 中的命名空间

1. 命名空间的概念 命名空间是 TypeScript 提供的一种组织代码的方式,它类似于其他编程语言中的模块化系统,但有一些不同之处。命名空间可以包含变量、函数、类等,并且可以嵌套使用,从而更好地组织和管理代码。 2. 定义命名空间…...

[C++] 小游戏 斗破苍穹 2.2.1至2.11.5全部版本(上) zty出品

大家好,今天zty整合了斗破苍穹2.2.1到2.11.5的所有版本 我这么辛苦,就要50个赞吧 2.2.1 #include<stdio.h> #include<ctime> #include<time.h> //suiji #include<windows.h> //SLEEP函数 struct Player //玩家结构体,并初始化player { char name[…...

单元测试的心法分享

大家好&#xff0c;我是G探险者&#xff01; 今天我们简单聊聊单元测试的哪些事儿~ 两天时间我玩明白了单元测试的套路。 这里我分享一下思路。 在我眼里单元测试室什么&#xff1f; 请看这张草图&#xff1a; 单元测试主要关注单个代码单元&#xff08;通常是类或方法&am…...

【python】多线程(3)queue队列之不同延时时长的参数调用问题

链接1&#xff1a;【python】多线程&#xff08;笔记&#xff09;&#xff08;1&#xff09; 链接2&#xff1a;【python】多线程&#xff08;笔记&#xff09;&#xff08;2&#xff09;Queue队列 0.问题描述 两个线程&#xff0c;但是不同延时时长&#xff0c;导致数据输出…...

Java开发常见基础问题

Java开发的多个方面&#xff0c;包括但不限于Java基础知识、多线程并发、JVM、框架使用、数据库、设计模式、网络编程等。 以下是一些常见的问题以及回答的方向&#xff1a; Java 开发技术常见问题&#xff08;一&#xff09; Java 基础知识 对象和类的区别是什么&#xff1…...

大数据组件doc

1.flink Apache Flink Documentation | Apache Flink 2.kafka Apache Kafka 3.hbase Apache HBase ™ Reference Guide 4.zookeeper ZooKeeper: Because Coordinating Distributed Systems is a Zoo 5.spark Overview - Spark 3.5.1 Documentation 6.idea组件&#xff08;…...

Docker Hub 国内镜像源配置

Docker Hub 国内镜像源配置 Docker Hub 国内镜像源是指在国内境内提供 Docker 镜像服务的镜像源。由于国际网络带宽等问题&#xff0c;国内用户下载 Docker 镜像通常速度较慢。因此&#xff0c;为了解决这个问题&#xff0c;一些国内的公司和组织提供了 Docker 镜像的国内镜像…...

持续总结中!2024年面试必问 20 道 Kafka面试题(一)

一、Kafka 的基础概念有哪些&#xff1f; Kafka 是一个分布式流处理平台&#xff0c;由 LinkedIn 开发&#xff0c;并于 2011 年成为 Apache 软件基金会的一部分。以下是 Kafka 的一些基础概念&#xff1a; Broker: Kafka 集群由多个 Broker 组成&#xff0c;每个 Broker 存储…...

Linux共享内存创建和删除

最近项目中使用到了共享内存记录下 创建共享内存: 删除共享内存: 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/mman.h> #include <sys/stat.h> #include <u…...

微信小程序如何自定义tabbar

微信小程序自定义底部tabbar是一个提升用户体验和增加小程序个性化的重要功能。以下是自定义底部tabbar的步骤&#xff0c;以供参考&#xff1a; 一、自定义tabbar的重要性 微信小程序默认的底部导航栏&#xff08;tabbar&#xff09;样式和布局是固定的&#xff0c;开发者无…...

【并发程序设计】15.信号灯(信号量)

15.信号灯(信号量) Linux中的信号灯即信号量是一种用于进程间同步或互斥的机制&#xff0c;它主要用于控制对共享资源的访问。 在Linux系统中&#xff0c;信号灯作为一种进程间通信&#xff08;IPC&#xff09;的方式&#xff0c;与其他如管道、FIFO或共享内存等IPC方式不同&…...

【操作与配置】VS2017与MFC环境配置

【操作与配置】VS2017与MFC环境配置 概述 Visual Studio 是一款强大且多功能的集成开发环境&#xff08;IDE&#xff09;&#xff0c;适用于软件开发人员和团队。使用此应用程序&#xff0c;您可以构建和调试现代Web应用程序&#xff0c;并利用扩展帮助探索几乎任何编程语言。…...

遥感影像信息提取

刘老师&#xff08;副教授&#xff09;&#xff0c;来自双一流重点高校&#xff0c;长期从事GIS/RS/3S技术及其生态环境领域中的应用等方面的研究和教学工作&#xff0c;并参与GIS的二次开发&#xff0c;发表多篇sci论文&#xff0c;具有资深的技术底蕴和专业背景。 专题一&am…...

LRU算法

文章目录 LRU算法LRU 如何实现LinkedHashMap来实现的LRU算法的缓存HashMap实现LRU算法的缓存 LRU算法 LRU&#xff08;Least Recently Used&#xff09;算法可以使用哈希表和双向链表来实现。哈希表用于快速查找数据&#xff0c;双向链表用于记录数据的访问顺序。以下是LRU算法…...

JVM运行时数据区 - 程序计数器

运行时数据区 Java虚拟机在执行Java程序的过程中&#xff0c;会把它管理的内存划分成若干个不同的区域&#xff0c;这些区域有各自的用途、创建及销毁时间&#xff0c;有些区域随着虚拟机的启动一直存在&#xff0c;有些区域则随着用户线程的启动和结束而建立和销毁&#xff0…...

1.JAVA小项目(零钱通)

一、说明 博客内容&#xff1a;B站韩顺平老师的视频&#xff0c;以及代码的整理。此项目分为两个版本&#xff1a; 面向过程思路实现面向对象思路实现 韩老师视频地址&#xff1a;【【零基础 快速学Java】韩顺平 零基础30天学会Java】 https://www.bilibili.com/video/BV1fh4…...

Redis这一篇就够了

一.概述 Redis是什么&#xff1f; Redis是远程服务字典服务&#xff0c;是一个开源的使用ANSI C语言编写&#xff0c;支持网络&#xff0c;可基于内存亦可持久化的日志型&#xff0c;Key-Value数据库&#xff0c;并提供多种语言的API。 redis会周期性把更新的数据写入磁盘或把…...

Java web应用性能分析之【jvisualvm远程连接云服务器】

Java web应用性能分析之【java进程问题分析概叙】-CSDN博客 Java web应用性能分析之【java进程问题分析工具】-CSDN博客 前面整理了java进程问题分析和分析工具&#xff0c;现在可以详细看看jvisualvm的使用&#xff0c;一般java进程都是部署云服务器&#xff0c;或者托管IDC机…...

springboot发送短信验证码,结合redis 实现限制,验证码有效期2分钟,有效期内禁止再次发送,一天内发送超3次限制

springboot结合redis发送短信验证码,实现限制发送操作 前言(可忽略)实现思路正题效果图示例手机号不符合规则校验图成功发送验证码示例图redis中缓存随机数字验证码&#xff0c;2分钟后失效删除redis缓存图验证码有效期内 返回禁止重复发送图验证码24小时内发送达到3次&#xf…...

【Python】使用 Pandas 统计每行数据中的空值

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 在数据分析…...

1pannel部署onenav导航容器编排模板

onenav导航 1pannel部署onenav导航容器编排模板 networks:1panel-network:external: true services:onenav:container_name: onenavimage: helloz/onenav:latestlabels:createdBy: Appsnetworks:- 1panel-networkports:- 127.0.0.1:{port}:80environment:- TZAsia/Shanghaivol…...