跟对象介绍十个常用的 Python 内置函数,她夸了我一整天

news/2024/5/2 5:55:17/文章来源:https://blog.csdn.net/s_alted/article/details/129254211

内置函数是什么

了解内置函数之前,先来了解一下什么是函数

将使用频繁的代码段进行封装,并给它起一个名字,当我们使用的时候只需要知道名字就行

函数就是一段封装好的、可以重复使用的代码,函数使得我们的程序更加简洁、模块化,提高了代码的复用性

举个例子

我想实现一个求球表面积功能的程序,当我们知道半径 r 的时候,就可以根据公式来求出表面积

#S为表面积
S = 4 * 3.14 * r * r 

假设我们需要计算三个不同半径的球的表面积

r1 = 12.34
r2 = 9.08
r3 = 73.1
S1 = 4 * 3.14 * 12.34 * 12.34 
S2 = 4 * 3.14 * 9.08 * 9.08
S3 = 4 * 3.14 * 73.1 * 73.1

这样写会发现一个问题,每次都得写 4 * 3.14 * r * r ,而且如果要把 3.14 改成3.1415的话,需要全部替换掉

如何解决呢?既然这段是重复的有规律的代码,我们可以将其封装成函数

def surface_area(r):return 4 * 3.14 * r * r 

有了函数,我们就不再需要每次写 S = 4 * 3.14 * r * r ,而是通过函数调用的形式S = surface_area(r)

而且函数S = surface_area(r)本身只需要写一次,当你需要把 3.14 改成3.1415的时候,只需要对这个函数进行修改就行了

def surface_area(r):return 4 * 3.1415 * r * r 

在 Python 中,解释器自带的函数称为内置函数,这些函数可以直接调用且不需要导入(import)某个模块

运行 Python 需要一个叫做 Python 解释器的东西,这个 Python 解释器其实是一个程序,它为Python使用者提供了一些常用的功能,并取了独一无二的名字,这就是我们所说的“内置函数"

Python 解释器启动以后,内置函数也生效了,可以直接拿来使用

除了内置函数之外,Python 中还有标准库函数

Python 标准库函数相当于解释器的外部扩展,它不会随着解释器的启动而启动,要想使用这些外部扩展函数,需要提前导入,否则函数是无效的

#导入外部函数 time
import time

总的来说

  • 内置函数是解释器的一部分,它随着解释器的启动而生效;标准库函数是解释器的外部扩展,导入模块以后才能生效
  • 一般来说,内置函数的执行效率要高于标准库函数

下面给出官方提供的 Python 内置参数使用手册地址

http://docs.python.org/3/library/functions.html

在这里插入图片描述

常用内置函数

  • abs()
abs(x)

功能:返回一个数的绝对值

print(abs(-100))
print(abs(0))
print(abs(200))

结果

100
0
200

调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个
在这里插入图片描述
如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型
在这里插入图片描述

  • eval()
eval(expression, globals=None, locals=None)

功能:该函数用来执行一个字符串表达式,解析成 Python 表达式并返回表达式的值

x = 1
print(eval('x+1')) #等同于 eval('print(x+1)')str = '我是大帅哥'
eval('print(str)')

结果

2
我是大帅哥
  • max()
max(iterable, *[, default=obj, key=func])
max(arg1, arg2, *args, *[, key=func])

功能:

  • 当传入单个可迭代参数时,返回可迭代参数中最大的元素
  • 当传入两个或多个参数时,返回最大的那个参数
  • default 用来指定最大值不存在时返回的默认值

传入单个参数,该参数为可迭代对象

l1 = [1, 3, 5, 6, 7]
print(max(l1))#结果
7

传入参数不是可迭代对象会报错

l1 = 13567
print(max(l1))#结果
TypeError: 'int' object is not iterable

传入多个参数

print(max(1, 2, 5, 6, 8))#结果
8

至少传入两个参数,否则报错(是有只传入一个参数的例外,此时参数必须为可迭代对象,返回的是可迭代对象中的最大元素)

print(max(1))#结果
TypeError: 'int' object is not iterable
print(max("1"))#结果
1

如果传入可迭代参数为空,必须指定参数 default,用来返回默认值输出,否则报错

print(max((), default=1))#结果
1
print(max(()))#结果
ValueError: max() arg is an empty sequence

命名参数 key

值为一个函数,将传入 max() 中的参数传入 key 指定的函数中加工一遍之后再求最大值

def sum(x):return -xprint(max(1, 3, 5, 6, 7, key=sum))#结果
1
print(max(1,2,'3',key = int))#结果
3
print(max(1, 2,-3,key = abs))#结果
-3
  • min()
min(iterable, *[, default=obj, key=func])
min(arg1, arg2, *args, *[, key=func]) -> value

功能与 max() 相反,返回最小值,这里不过多介绍

  • 数据类型转换函数

比如int()函数可以把其他数据类型转换为整数

print(int('123'))
print(int('0'))#结果
123
0

float() 函数可以把其他数据类型转换为浮点数

print(float('1.12'))
print(float('0'))#结果
1.12
0.0

str() 函数可以把其他数据类型转换为字符串

print(str(1.12))
print(str(0))#结果
1.12
0
  • range()
range(start, stop, step=1)

功能:在Python3中,返回特定范围内的可迭代对象,而不是列表类型

print(range(10))
print(list(range(10))#结果
range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

默认步长为 1,可以指定步长

print(list(range(0, 10, 2)))#结果
[0, 2, 4, 6, 8]
  • reversed()
reversed(seq)

功能:将列表中的元素进行反转排序,返回的是一个可迭代对象,而不是列表类型

l1 = [1,2,3,4,5,6]
print(reversed(l1))
print(list(reversed(l1)))#结果
<list_reverseiterator object at 0x000002D679666FD0>
[6, 5, 4, 3, 2, 1]
str = '123456'
print(list(reversed(str)))#结果
['6', '5', '4', '3', '2', '1']
  • sorted()
sorted(iterable, /, *, key=None, reverse=False)

功能:返回指定可迭代对象的排序列表

l1 = [2,11,3,4,1,6]
t1 = ("b", "g", "a", "d", "f", "c", "h", "e")
s1 = 'adcj'print(sorted(l1))
print(sorted(t1))
print(sorted(s1))

结果

[1, 2, 3, 4, 6, 11]
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
['a', 'c', 'd', 'j']

reverse参数默认为 False,表示非反向输出

l1 = [2,11,3,4,1,6]
t1 = ("b", "g", "a", "d", "f", "c", "h", "e")
s1 = 'adcj'
print(sorted(l1, reverse=True))
print(sorted(t1, reverse=True))
print(sorted(s1, reverse=True))

结果

[11, 6, 4, 3, 2, 1]
['h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']
['j', 'd', 'c', 'a']
  • map()
map(function, iterable, *iterables)

功能:map 将传入的函数依次作用到序列的每个元素,并把结果作为新的迭代器返回

def f(x):return x * xres  = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(res)#结果
[1, 4, 9, 16, 25, 36, 49, 64, 81]

map 传入的第一个参数是 f,即函数对象本身,由于结果 res 是一个 迭代器,是惰性序列,因此需要 list() 函数让它把整个序列都计算出来并返回一个列表

print(list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])))
print(list(map(lambda x : x * x, [1, 2, 3, 4, 5, 6, 7])))#结果
['1', '2', '3', '4', '5', '6', '7', '8', '9']
[1, 4, 9, 16, 25, 36, 49]
  • round()
round(number, ndigits=None)

功能:返回小数点后精确舍入到 ndigits 位的数字,ndigits 参数默认为 None,如果为 None,则返回与其输入最接近的整数

#精确到小数点后两位
print(round(1.341, 2))
print(round(1.346, 2))
print(round(1.341))

结果

1.34
1.35
1

而对于 round(2.675, 2) 返回 2.67 而不是 2.68 的结果官方也进行了说明

Note The behavior of round() for floats can be surprising: for example, round(2.675, 2) gives 2.67 instead of the expected 2.68. This is not a bug: it’s a result of the fact that most decimal fractions can’t be represented exactly as a float. See Floating Point Arithmetic: Issues and Limitations for more information

官方说这不是一个 bug,而是因为大多数小数不能精确的表示为浮点数

而 python3 中的 round() 并不是四舍五入,而是会受到计算机精度的影响

这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。

那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67

如果想要返回 2.68,可以先将数值扩大 n 倍,直到将保留小数位的下一位小数提到小数部分第一位

也就是说保留两位小数就将第三位小数提到第一位,做的操作就是乘以100。依次类推

print(round(2.675,2))
print(round(2.675*100)/100)

结果

2.67
2.68

最后,除非对精确度没什么要求,否则尽量避开用 round() 函数,使用 decimal 模块

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Goframe快速创建项目,并使用Cli工具创建dao、service、logic

GoFrame项目创建与Cli工具创建1.项目创建2.Mysql数据库配置3.Cli工具dao自动生成4.业务模型须知5.Cli工具service/logic自动生成 - 接口6.Controller/Api创建1.项目创建 官网 - 项目创建-init 开发文档 - 目录介绍 官网 - 示例项目 1.gf init 项目名 &#xff08;创建项目…

Java及JVM简介

世界上没有最好的编程语言&#xff0c;只有最适用于具体应用场景的编程语言 懂得JVM内部的内存结构、工作机制&#xff0c;是设计高扩展性应用和诊断运行时问题的基础&#xff0c;也是Java工程师进阶的必备能力。 java介绍 java是目前应用最为广泛的软件开发平台之一。随着…

C++---最长上升子序列模型---登山(每日一道算法2023.2.28)

注意事项&#xff1a; 本题为"线性dp—最长上升子序列的长度" 和 “最长上升子序列模型—怪盗基德的滑翔翼” 的扩展题&#xff0c;所以dp思路这里就不再赘述。 题目&#xff1a; 五一到了&#xff0c;ACM队组织大家去登山观光&#xff0c;队员们发现山上一共有N个景…

复习知识点八之数组

目录 数组 静态初始化练习 打印 索引 数组遍历 练习1:遍历数组并求和 练习2:统计个数 练习3:变化数据​编辑 数组的动态初始化 数组的动态初始化和静态初始化的区别​编辑 数组的常见问题 数组常见操作 练习1:求最值 ​编辑 练习2 : 遍历数组求和 练习3: 练习4: 数…

值得收藏!适合小微企业的万元数字化攻略!

编者按&#xff1a;小微企业数字化之路困难重重&#xff1f;看看这款全新的全面数字化方案&#xff0c;低成本、部署效率、免安装、免维护、数据安全&#xff0c;小微企业的数字化福音&#xff01;关键词&#xff1a;低成本&#xff0c;开箱即用&#xff0c;免安装免维护&#…

SpringMVC使用 redis 实现缓存

简介 SpringMVC 中也可以将缓存标签和 redis 结合起来使用&#xff0c;其实此时缓存没有起作用&#xff0c;只是通过缓存的那几个注解来操作 redis 而已&#xff1b;SpringMVC 中整合 redis 比较麻烦的是注意版本冲突的问题&#xff0c;如下是官网有关于版本的要求 https://d…

I.MX6ULL内核开发12:使用设备树插件实现RGB灯驱动

目录 一、引言 二、设备树插件格式 三、实验说明 四、实验准备 4.1 通过内核工具编译设备树插件 五、实验效果 5.1 uboot加载 5.2 加载RGB驱动 一、引言 Linux4.4以后引入了动态设备树&#xff08;Dynamic DevicesTree&#xff09;&#xff0c;这里翻译位“设备树插件…

银行软件测试面试题目总结,希望可以帮到你

目录 一、根据题目要求写出具体LINUX操作命令 二、JMETER题目 三、根据题目要求写出具体SQL语句 总结感谢每一个认真阅读我文章的人&#xff01;&#xff01;&#xff01; 重点&#xff1a;配套学习资料和视频教学 一、根据题目要求写出具体LINUX操作命令 1、分别写出一种…

SpringMVC源码:HandlerMapping加载1

参考资料&#xff1a; 《SpringMVC源码解析系列》 《SpringMVC源码分析》 《Spring MVC源码》 写在开头&#xff1a;本文为个人学习笔记&#xff0c;内容比较随意&#xff0c;夹杂个人理解&#xff0c;如有错误&#xff0c;欢迎指正。 前文&#xff1a; 《SpringMVC源码&a…

跨设备文件传输工具横评

文章目录对比QQ微信SnapDropLocalSendIntelUnisonLANDropTailscaleAirDroidSendAnywhere参考文献对比 传输速度测试条件大致相同&#xff0c;文件大小约为 100 MB 工具优点缺点传输速度备注QQ支持断点续传不要求同一局域网需要安装1.81 MB/s微信方便需要安装不支持大文件传完还…

ROS1学习笔记:ROS中的坐标管理系统(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a;ROS中的坐标系管理系统 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、机器人中的坐标变换二、TF功能包三、小海龟跟随实验3.1 启动实验3.2 查看当前的TF树3.3 坐标相对位置可视化3.3.1 tf_echo3.3.2 rviz一、机器人中的坐标变换…

15个Spring扩展点,一般人知道的不超过5个!

Spring的核心思想就是容器&#xff0c;当容器refresh的时候&#xff0c;外部看上去风平浪静&#xff0c;其实内部则是一片惊涛骇浪&#xff0c;汪洋一片。Spring Boot更是封装了Spring&#xff0c;遵循约定大于配置&#xff0c;加上自动装配的机制。很多时候我们只要引用了一个…

Maven高级操作,别说你不知道

如果文章对你有帮助欢迎【关注❤️❤️❤️点赞&#x1f44d;&#x1f44d;&#x1f44d;收藏⭐⭐⭐】一键三连&#xff01;一起努力&#xff01; &#x1f916; 一、聚合 &#x1f47b; 1、作用&#xff1a; 用于快速构建maven工程&#xff0c;一次性构建多个模块/项目 &am…

【人脸识别】DDL:数据分布知识蒸馏思想,提升困难样本(遮挡、低分辨率等)识别效果

论文题目&#xff1a;《Improving Face Recognition from Hard Samples via Distribution Distillation Loss》 论文地址&#xff1a;https://arxiv.org/pdf/2002.03662v3.pdf 代码地址&#xff1a;https://github.com/HuangYG123/DDL 1.前言及相关工作 Large facial variatio…

阿里前端二面常考react面试题(必备)

说说 React组件开发中关于作用域的常见问题。 在 EMAScript5语法规范中&#xff0c;关于作用域的常见问题如下。 &#xff08;1&#xff09;在map等方法的回调函数中&#xff0c;要绑定作用域this&#xff08;通过bind方法&#xff09;。 &#xff08;2&#xff09;父组件传递…

华为OD机试模拟题 用 C++ 实现 - 最左侧冗余覆盖子串(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明最左侧冗余覆盖子串题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写…

HCIP-5距离矢量路由协议RIP学习笔记

前言 路由信息协议RIP&#xff08;Routing Information Protocol&#xff09;的简称&#xff0c;它是一种基于距离矢量&#xff08;Distance-Vector&#xff09;算法的协议&#xff0c;使用跳数作为度量来衡量到达目的网络的距离。RIP主要应用于规模较小的网络中。Rip是第一个动…

RK3568平台开发系列讲解(驱动基础篇)SMP(Symmetrical Multi-Processing)

🚀返回专栏总目录 文章目录 一、linux SMP 和 AMP二、linux SMP的启动流程三、CPU的描述:cpumask四、CPU之间的关系沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍 SMP(Symmetrical Multi-Processing)。 一、linux SMP 和 AMP 目前支持多核处理器的实时操…

QT学习14:QtXlsx操作Excel表

一、前言操作excel方式有&#xff1a;QAxObject 和QtXlsx区别&#xff1a;Qt自带的QAxObject库操作excel的前提是电脑已经安装微软的Office&#xff08;包含EXCEL&#xff09;&#xff0c;而QtXlsx可以直接使用免装Office且操作更简单。二、QtXlsx操作示例参考&#xff1a;http…

【Solved】java.lang.IllegalStateException: Could not delete shutdown key file

详细错误&#xff1a; Exception in thread “main” java.lang.IllegalStateException: Could not delete shutdown key file at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.(StanfordCoreNLPServer.java:219) at edu.stanford.nlp.pipeline.StanfordCoreNLPServer.lau…