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

女朋友,介绍,十个,常用,python,内置,函数,一整天 · 浏览次数 : 62

小编点评

**内置函数** 内置函数是 Python 中自带的函数,可以直接调用且不需要导入。它们随着解释器的启动而生效,无需手动导入。 **常见内置函数** * `abs()`:返回一个数的绝对值。 * `float()`:返回一个数的浮点数表示。 * `str()`:返回一个字符串。 * `range()`:返回一个指定范围的数字。 * `sorted()`:返回一个列表的排序列表。 * `map()`:将函数作用到序列中的每个元素,并返回一个新的迭代器。 * `round()`:返回小数点后精确舍入到指定位数的数字。 * `Decimal`:一个类,用于处理浮点数。 **使用内置函数的优点** *无需手动导入。 * 作为函数,可以像其他函数一样被调用。 * 随着解释器的启动而生效。 * 不需要考虑浮点数的精度问题。 **使用内置函数的缺点** * 某些情况下,使用内置函数可能比使用其他函数更困难。 * 某些内置函数可能没有与其他函数相同的功能。

正文

内置函数是什么

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

 

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

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

 

举个例子

 

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

 

 

 

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

 

 

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

 

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

 

 

 

 

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

 

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

 

 

 

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

 

运行 Python 需要一个叫做 Python 解释器的东西

 

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

 

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

 

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

 

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

 

 

 

总的来说

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

  • 一般来说,内置函数的执行效率要高于标准库函数

 

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

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

 

 

 

常用内置函数

abs()

abs()

 

 

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

 

 

 

结果

100
0
200

 

调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个

 

调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个

 

 

 

如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型

 

 

 

eval()

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

 

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

 

 

 

结果

2
我是大帅哥

 

max()

max(iterable, *[, default=obj, key=func])
max(arg1, arg2, *args, *[, key=func])

 

功能:

  • 当传入单个可迭代参数时,返回可迭代参数中最大的元素

  • 当传入两个或多个参数时,返回最大的那个参数

  • default 用来指定最大值不存在时返回的默认

 

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

 

 

 

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

 

 

传入多个参数

 

 

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

 

 

 

 

 

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

 

 

 

 

命名参数 key

 

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

 

 

 

 

min()

min(iterable, *[, default=obj, key=func])
min(arg1, arg2, *args, *[, key=func]) -> value

 

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

 

数据类型转换函数

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

 

 

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

 

 

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

 

 

range()

 

range(start, stop, step=1)

 

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

 

 

 

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

 

 

reversed()

reversed(seq)

 

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

 

 

 

 

sorted()

sorted(iterable, /, *, key=None, reverse=False)

 

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

 

 

结果

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

 

map()

map(function, iterable, *iterables)

 

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

 

 

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

 

 

 

round()

round(number, ndigits=None)

 

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

 

 

 

结果

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。以此类推

 

 

 

结果

2.67
2.68

 

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

 


感谢阅读,喜欢作者就动动小手[一键三连],这是我写作最大的动力

 

与跟女朋友介绍十个常用的 Python 内置函数,她夸了我一整天相似的内容:

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

内置函数是什么 了解内置函数之前,先来了解一下什么是函数 将使用频繁的代码段进行封装,并给它起一个名字,当我们使用的时候只需要知道名字就行 函数就是一段封装好的、可以重复使用的代码,函数使得我们的程序更加简洁、模块化,提高了代码的复用性 举个例子 我想实现一个求球表面积功能的程序,当我们知道半径 r

记一次线上问题 → Deadlock 的分析与优化

开心一刻 今天女朋友很生气 女朋友:我发现你们男的,都挺单纯的 我:这话怎么说 女朋友:脑袋里就只想三件事,搞钱,跟谁喝点,还有这娘们真好看 我:你错了,其实我们男人吧,每天只合计一件事 女朋友:啥事呀? 我:这娘们真好看,得搞钱跟她喝点 问题复现 需求背景 MySQL8.0.30 ,隔离级别是默认

Docker 中的 .NET 异常了怎么抓 Dump

## 一:背景 ### 1. 讲故事 有很多朋友跟我说,在 Windows 上看过你文章知道了怎么抓 Crash, CPU爆高,内存暴涨 等各种Dump,为什么你没有写在 Docker 中如何抓的相关文章呢?瞧不上吗? 哈哈,在DUMP的分析旅程中,跑在 Docker 中的 .NET 占比真的不多,

记一次 .NET 某埋线管理系统 崩溃分析

## 一:背景 ### 1. 讲故事 经常有朋友跟我反馈,说看你的文章就像看天书一样,有没有一些简单入手的dump 让我们先找找感觉,哈哈,今天就给大家带来一篇入门级的案例,这里的入门是从 WinDbg 的角度来阐述的,这个问题如果你通过 记日志,分析代码 的方式,可能真的无法解决,不信的话继续往下

坚持与确定性:毒药还是良药?

前段时间跟几个大龄程序员一起吃饭,聊了大家的现状,后来写了篇博客总结了一下《从大龄程序员现状聊聊出路》,本想着给朋友们提供些观点和思路,结果被有些网友批评了。 1. 我的认知达不到赚快钱 有的网友认为我在瞎扯,有的觉得我在灌鸡汤,还有的认为我在指错路。 文中虽然总结了一些自认为有价值的观点,本想着让

LeetCode 周赛 340,质数 / 前缀和 / 极大化最小值 / 最短路 / 平衡二叉树

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 大家好,我是小彭。 上周跟大家讲到小彭文章风格的问题,和一些朋友聊过以后,至少在算法题解方面确定了小彭的风格。虽然竞赛算法题的文章受众非常小,但却有很多像我一样的初学者,他们有兴趣参加但容易被题目难度和大神选

一文讲尽Thread类的源码精髓

摘要:今天,我们就一起来简单看看Thread类的源码。 本文分享自华为云社区《【高并发】Thread类的源码精髓》,作者:冰 河。 前言 最近和一个朋友聊天,他跟我说起了他去XXX公司面试的情况,面试官的一个问题把他打懵了!竟然问他:你经常使用Thread创建线程,那你看过Thread类的源码吗?我

跟我一起学习和开发动态表单系统-前端用vue、elementui实现方法(3)

基于 Vue、Element UI 和 Spring Boot + MyBatis 的动态表单系统前端实现解析 在现代企业信息系统中,动态表单是一种非常常见的功能。它可以根据业务需求灵活地调整表单结构,以满足不同的数据收集和展示需求。在本文中,我们将探讨一种基于 Vue、Element UI 和 S

[转帖]dmidecode详解

跟硬件相关的命令有uname, lspci,/proc目录下的文件等,有时候Linux/Unix系统下获取有关硬件方面的信息,这个时候,就要用到dmidecode, 使用该命令可以查询BIOS、系统、主板、处理器、内存、缓存等非常重要信息。下面是其常用的几个命令: # dmidecode | gre

一份55页Java性能调优PPT分享

跟大家分享一份由唯品会资深技术专家,著名开源项目springSide作者——“江南白衣”,结合自己近20年软件开发、架构经验,深度总结的,针对高并发、海量数据场景下的一份性能调优手册(曾在Qcon分享),其内容涵盖微基准测试、JVM、并发与锁等主题方向上的调优笔记,内容含金量很高,大家一定看到最后,相信会对大家有所帮助或启发!