欢迎来CILMY23的博客
本篇主题为 数学函数和特殊内置函数大揭秘:Python中隐藏的秘密武器
个人主页:CILMY23-CSDN博客
个人专栏系列: Python | C语言 | 数据结构与算法 | C++
感谢观看,支持的可以给个一键三连,点赞关注+收藏。
写在前头:
Python作为一门功能强大的编程语言,拥有许多特殊的内置函数,它们往往隐藏在平常不易被注意到的角落里。这些特殊内置函数提供了许多强大且灵活的功能,为程序员们带来许多便利。但是在揭开魔术师的盒子之前我们会用数学函数和特殊的数据类型来开端。
目录
一、复数,分数和高精度实数
1.1 复数类型
1.2 分数和高精度实数
二、常用数学函数
常用内置数学函数
Math中的常用数学函数
三、特殊内置函数
3.1 内置函数介绍
3.2.1 range()函数
3.2.2 type()和isinstance()函数
3.2.3 eval()函数
3.2.4 map()函数
3.2.5 filter()函数
3.2.6 zip()函数
3.2.7 enumerate()函数
一、复数,分数和高精度实数
在之前讲解数据类型时,我们并没有写到这一部分,因为这些是和数学函数挂钩的,所以单独拿出来写
1.1 复数类型
复数 (Complex)由实数部分和虚数部分构成,可以用 a + b j 或 a + bJ 或complex(a,b)表示,如 12.6 + 5 j,3 + 4J。对于复数z 可以用 z.real 来获得实部,用 z.imag 来获得虚部
# 1.1 复数
z1 = 3 + 9j
z2 = 5 + 7J
print(f"z1的实部{z1.real},z2的实部{z2.real},实部和{z1.real+z2.real}")
print(f"z1的虚部{z1.imag},z2的虚部{z2.imag}")
# 复数求模,用数学函数abs求解
print(f"z1的模长:{abs(z1)},z2的模长:{abs(z2)}")
# 复数求共轭,conjugate()方法
print(f"z1的共轭复数:{z1.conjugate()}")
当然复数的运算在python中远不止这些,我们也只是稍微举个例子,感兴趣可以自行探究。
1.2 分数和高精度实数
Python标准库模块fractions中的Fraction对象和Decimal对象分别支持分数运算和高精度实数运算。
from fractions import Fraction
frac = Fraction(3, 4) # 表示 3/4
print(frac)
result = frac + Fraction(1, 2) # 分数运算
print(result)
print(f"{frac.denominator}") #打印分母
print(f"{frac.numerator}") #打印分子
结果如下:
高精度实数:
from decimal import Decimal
x = Decimal(6/99)
y = Decimal(1/3)
result = x + y
print(result)
结果如下:
二、常用数学函数
Python中提供一些数学函数帮助用户对数字进行运算和处理。Python中的数学函数有以下两种使用方式。
(1).Python中的常用内置数学函数。这类函数的数量不多,可以直接在程序中使用
(2).Math中的常用数学函数,Math为数学运算提供了对底层C函数库的访问,其函数种类多,功能较全,需要导入Math模块后才能在程序中调用。
常用内置数学函数
函数名称 | 功能说明 | 举例 | 结果 |
abs(x) | 返回数字的绝对值 | abs(-10) | 10 |
pow(x,y) | 返回x**y运算后的值 | pow(2,3) | 8 |
round(x,y) | 返回浮点数x的四舍五入值,y 是指定的小数位数。当不提供 y 参数时,round将对 x 进行到最接近的整数值的四舍五入。 | round(1.23456,2) | 1.23 |
max(x1,x2,x3……) | 返回给定参数的最大值 | max(1,2,3) | 3 |
min(x1,x2,x3……) | 返回给定参数的最小值 | min(1,2,3) | 1 |
Math中的常用数学函数
函数名 | 功能 | 例子 | 结果 |
math.pow(x,y) | 返回x**y运算后的值 | math.pow(2,3) | 16.0 |
math.ceil(x) | 用于返回大于或等于 x 的最小整数,向上取整 | math.ceil(2.1) | 3 |
math.exp(x) | 返回e的x次幂 | math.exp(2) | 7.389056 09893065 |
math.fabs(x) | 返回数字的绝对值(常用于浮点数类型) | math.fabs(-8.0) | 8.0 |
math.floor(x) | 返回小于或等于 x 的最大整数,向下取整 | math.floor(2.8) | 2 |
math.log(y,x) | 计算以 x 为底、y 为真数的对数 | math.log(8, 2) 表示log2(8) | 3 |
math.log10(y) | 计算以10为底、y为真数的对数 | math.log10(100) | 2 |
math.modf(x) | 返回x的整数和小数部分 | math.modf(3.6) | (0.6000000000000001, 3.0) |
math.sqrt(x) | 返回数字x的平方根 | math.sqrt(9.0) | 3.0 |
math.sin(x) | 计算给定角度 x(单位为弧度)的正弦值 | math.sin(3) | 0.1411200080598672 |
math.cos(x) | 计算给定角度 x(单位为弧度)的余弦值 | math.cos(3) | -0.9899924966004454 |
math.tan(x) | 计算给定角度 x(单位为弧度)的正切值 | math.tan(0.785) | 0.9992039901050427 |
另外,Math中还有一些常用的数学常量,如e,pi等可以用。
E = math.e
pi = math.pi
三、特殊内置函数
3.1 内置函数介绍
内置函数(Built-In Functions,BIF)是 Python 的内置对象类型之一,封装在标准库模块__builtins__中,可以直接在程序中使用的,如input(),print(),abs(),sum()等。Python中的内置函数使用C语言进行了大量优化,推荐使用,提高效率。
我们可以使用help()函数来查看内置函数的用法
help(sum)
结果如下:
3.2.1 range()函数
range() 函数返回一个整数序列的迭代对象,其语法为:
range(start,stop,step)
简单来说,它是一个用于生成一系列数字的函数。它通常用于迭代(循环),例如在循环中遍历一定范围内的数字。
它有三种用法:
- 只提供一个参数时,它会生成从0开始,到该参数值之前的一系列数字(不包括该参数值本身)。
- 提供两个参数时,第一个参数指定起始值,第二个参数指定结束值(不包括结束值本身)
- 提供三个参数时,第一个参数指定起始值,第二个参数指定结束值(不包括结束值本身),第三个参数指定步长(即两个相邻数字之间的间隔)。
例如:
# 生成从0到4的一系列数字
for i in range(5):
print(i,end=" ")
# 生成从2到6的一系列数字
for i in range(2, 7):
print(i)
# 生成从1到10的奇数
for i in range(1, 11, 2):
print(i,end=" ")
注意, range() 函数返回的是一个范围对象,而不是一个实际的列表。如果需要将其转换为列表,可以使用 list() 函数来实现。
3.2.2 type()和isinstance()函数
在Python中我们可以使用type(),isinstance()函数来判断一个对象的类型。
1.type(obj) : 接收一个对象obj作为参数,返回这个对象的类型
2.isinstance(obj,class): 判断接收的对象object 是否是给定类型class的对象 ,如果是,返回True,如果不是,返回False
例如:
# 3.2.2 type 和 isinstance
x = 5
print(type(x))
x = 5
print(isinstance(x, int))
y = 'Hello'
print(isinstance(y, str))
z = [1, 2, 3]
print(isinstance(z, (list, tuple)))
总结:type返回对象的确切类型,而isinstance可以检查对象是否是某个类型或者其子类的实例。
区别:(在之后学习会提到现在看不懂没关系)
1.type()不会认为子类对象是一种父类类型,不考虑继承关系
2.isinstance()会认为子类对象是一种父类类型,考虑继承关系
3.2.3 eval()函数
eval() 是一个内置函数,用于执行字符串中的有效Python表达式,并返回结果。
它的语法是:
eval(expression, globals, locals)
- expression 是一个字符串,包含要执行的Python表达式。
- globals 是一个字典,用于指定全局命名空间(可选参数)。
- locals 是一个字典,用于指定局部命名空间(可选参数)。
例如:
# 计算简单的数学表达式
result = eval("2 + 3 * 4")
print(result)
# 使用局部变量执行表达式
x = 10
result = eval("x + 5")
print(result)
简单来说,eval()会将字符串转换成一个表达式,执行,并且返回这个表达式的值,后面的两个参数为搜索的范围,要么是局部,要么是全局。
3.2.4 map()函数
map() 函数吧函数依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,其语法为:
map(function,iterable,……)
其中,function为被调用函数(暂时不理解没关系,简单理解函数就是有特定功能的一个东西),iterable为一个或多个序列。
例如:
# 3.2.4 map
# 定义一个函数,用于对每个元素加1
def add_one(x):
return x + 1
my_list = [1, 2, 3, 4, 5]
result = map(add_one, my_list)
# 将结果转换为列表并输出
print(list(result))
简单来说,就是map会将每个元素都将函数用一遍,然后返回一个可迭代的map对象,在上述代码中,我们将迭代的对象用list()内置函数转换成列表,并用print函数打印输出。
3.2.5 filter()函数
filter() 函数用于过滤掉不符合条件的元素,返回一个迭代器对象,语法如下:
filter(function,iterable)
其中,function 为判断函数,iterable为可迭代对象
# 3.2.5 filter
# 定义一个函数,用于判断是否为偶数
def is_even(x):
return x % 2 == 0
my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = filter(is_even, my_list)
print(list(result))
filter就是判断参数是否满足函数,满足函数就记录下来返回。可以理解为一个过滤器。
3.2.6 zip()函数
zip()函数接收任意多个可迭代对象作为参数,将对象中对应的元素打包成一个元组,然后返回一个可迭代的zip对象,其语法为:
zip([iterable,...])
其中,iterable为一个或多个迭代器
zip()函数会从每个可迭代对象中依次取出对应位置的元素,然后将这些元素组合成一个元组,并返回一个迭代器,该迭代器会生成所有这些元组。当输入的可迭代对象中的长度不同时,zip()函数会以最短的可迭代对象为准,不会生成超出最短长度的元组。
例如:
# 3.2.6 zip
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
# 使用 zip() 将两个列表中的元素组合成元组
result = zip(list1, list2)
# 将结果转换为列表并输出
print(list(result)) # 输出:[('a', 1), ('b', 2), ('c', 3)]
3.2.7 enumerate()函数
枚举函数enumerate()用于将一个可遍历的数据对象(如列表,元组或字符串)组合为一个索引序列,同时列出数据和数据下标,其语法为:
enumerate(sequence,start)
其中:
sequence:一个序列、迭代器或其他支持的迭代对象。
start:下标起始位置
例如:
# 3.2.7 enumerate
my_list = ['a', 'b', 'c', 'd', 'e']
# 使用 enumerate() 获取索引和对应的值
for index, value in enumerate(my_list):
print(index, value)
在学C语言的时候,我们在结构体篇也见过枚举类型呢,是不是非常眼熟,如果你不懂什么是枚举可以点击链接跳转看看。
【C语言结构体】用户自定义类型--结构体,结构体传参,位段,联合体和枚举【图文详解】-CSDN博客https://blog.csdn.net/sobercq/article/details/136383033?spm=1001.2014.3001.5501
感谢各位同伴的支持,本期python就讲解到这啦,如果你觉得写的不错的话,可以给个一键三连,点赞,关注+收藏,若有不足,欢迎各位在评论区讨论。