- 原文博客地址: Python数据类型详解02
- 上文Python数据类型详解01中主要介绍了
Python
中的一些常用的数据类型 - 这篇文章主要介绍一些
Python
中的一些常用的模块
一. Number(数字)
-
Python
中数学运算常用的函数基本都在math
模块、cmath
模块中。 -
math
模块提供了许多对浮点数的数学运算函数。 -
cmath
模块包含了一些用于复数运算的函数。 -
cmath
模块的函数跟math
模块函数基本一致,区别是cmath
模块运算的是复数,math
模块运算的是数学运算。 - 要使用
math
或cmath
函数必须先导入:
import math
# 或者
import cmath
1. Python数学常量
在math
模块中定义了三个数学常量
# 自然常数 e
e = 2.718281828459045
# 圆周率,一般以π来表示
pi = 3.141592653589793
# 2π
tau = 6.283185307179586
2. Python三角函数
要直接访问的,需要导入 math
模块, 然后通过 math 静态对象调用方法
函数 | 描述 |
---|---|
acos(x) | 返回x的反余弦弧度值。 |
asin(x) | 返回x的反正弦弧度值。 |
atan(x) | 返回x的反正切弧度值。 |
atan2(y, x) | 返回给定的 X 及 Y 坐标值的反正切值。 |
cos(x) | 返回x的弧度的余弦值。 |
hypot(x, y) | 返回欧几里德范数 sqrt(x*x + y*y) 。 |
sin(x) | 返回的x弧度的正弦值。 |
tan(x) | 返回x弧度的正切值。 |
degrees(x) | 将弧度转换为角度,如degrees(math.pi/2) , 返回90.0 |
radians(x) | 将角度转换为弧度 |
3.Python数学函数
函数 | 返回值 ( 描述 ) |
---|---|
abs(x) | 返回数字的绝对值,如abs(-12) 返回 12 |
ceil(x) | 返回数字的上入整数(小数向上取整),如math.ceil(4.1) 返回 5, math.ceil(4.0) 返回 4 |
cmp(x, y) | 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1; (Python在3.x中已经弃用) |
exp(x) | 返回e的x次幂, 如math.exp(2) 返回7.38905609893065 |
fabs(x) | 返回数字的绝对值,如math.fabs(-10) 返回10.0 |
floor(x) | 返回数字的下舍整数(小数向下取整),如math.floor(4.9)返回 4 |
log(x) | 如math.log(math.e) 返回1.0, math.log(100,10) 返回2.0 |
log10(x) | 返回以10为基数的x的对数,如math.log10(100) 返回 2.0 |
max(x1, x2,...) | 返回给定参数的最大值,参数可以为序列。 |
min(x1, x2,...) | 返回给定参数的最小值,参数可以为序列。 |
modf(x) | 返回x的整数部分与小数部分(元组形式),两部分的数值符号与x相同,整数部分以浮点型表示; 如:math.modf(99.09) , 返回(0.09000000000000341, 99.0) |
pow(x, y) |
x**y 运算后的值。 |
round(x [,n]) | 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数; 如round(90.09, 1)输出:90.1; 如:round(90.09) 输出:90 |
sqrt(x) | 返回数字x的平方根, 如:math.sqrt(4) 返回 2.0 |
- 其中
abs()
和fabs()
区别-
abs()
是一个内置函数,而fabs()
在math
模块中定义的。 -
fabs()
函数只适用于float
和integer
类型,而abs()
也适用于复数
-
4. Python随机数函数
- 随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。
- 随机数函数需要导入
random
模块,然后通过random
静态对象调用函数方法 -
Python
包含以下常用随机数函数:
4-1. choice
从序列(元组, 列表, 字符串)的元素中随机挑选一个元素
import random
random.choice( seq )
# 测试用例
# 从序列的元素中随机挑选一个元素
print(random.choice((1, 3, 5, 2)))
print(random.choice([1, 2, 3, 4]))
# 随机返回一个字符
print(random.choice("titanjun"))
4-2. randrange
返回指定递增基数集合中的一个随机数,默认基数缺省值为1, 默认类型为int
randrange(self, start, stop=None, step=1, _int=int)
- 参数
-
start
-- 指定范围内的开始值,包含在范围内。 -
stop
-- 指定范围内的结束值,不包含在范围内。 -
step
-- 指定递增基数
-
# 输出 100 <= number < 1000 间的随机偶数
print(random.randrange(100, 1000, 2))
4-3. random
随机生成的一个实数,它在[0,1)范围内
print(random.random())
4-4. seed
该函数没有返回值, 改变随机数生成器的种子, 可生成同一个随机数
random.seed(5)
print(random.random())
random.seed()
print(random.random())
4-5. shuffle
- 将列表的所有元素随机排序, 没有返回值
- 因元组不支持二次赋值, 所以元组不支持重新排列
# 将序列的所有元素随机排序
list1 = [1, 2, 3, 4]
random.shuffle(list1)
print(list1)
4-6. uniform
- 随机生成一个在[x, y)范围内的实数
- 参数:
- x -- 随机数的最小值,包含该值。
- y -- 随机数的最大值,不包含该值。
print(random.uniform(2, 5))
二. 字符串
上一篇文章Python数据类型详解01介绍了字符串的一些基础知识, 这里就主要介绍字符创中常用的函数和语法
1. in
和 not in
判断字符串是否包含指定字符串
# 判断字符串中是否包含某字符串
str = 'Hello Python'
if ('llo' in str):
str += ' True'
else:
str += ' False'
print(str)
# 判断字符串是否不包含某字符串
if ('py' not in str):
str += ' not in'
else:
str += ' in'
print(str)
// 分别输出
Hello Python True
Hello Python True not in
2. 字符串格式化
把其他类型的数据格式化为字符串形式返回, 字符串和其他类型之间要有%
分开
符号 | 描述 |
---|---|
%c |
格式化字符及其ASCII码 |
%s |
格式化字符串 |
%d |
格式化整数 |
%u |
格式化无符号整型 |
%o |
格式化无符号八进制数 |
%x |
格式化无符号十六进制数 |
%X |
格式化无符号十六进制数(大写) |
%f |
格式化浮点数字,可指定小数点后的精度 |
%e |
用科学计数法格式化浮点数 |
%E |
作用同%e,用科学计数法格式化浮点数 |
%g |
%f和%e的简写 |
%G |
%f 和 %E 的简写 |
%p |
用十六进制数格式化变量的地址 |
使用方式
print('che is %d' % 19)
// 跟C语言的写法
prin他("che is %d", 19)
3. str.format()
函数
-
Python2.6
开始,新增了一种格式化字符串的函数str.format()
,它增强了字符串格式化的功能。
基本语法是通过{}
和:
来代替以前的%
。 -
format
函数可以接受不限个参数,位置可以不按顺序。
简单使用
# format函数
# 不设置指定位置,按默认顺序
str1 = '{} {}'.format('hello', 'python')
print(str1)
# 设置指定位置
str2 = '{0}{1}'.format('Python', '字符串')
print(str2)
# 设置指定位置
str3 = '{1} {0} {1}'.format('hello', 'che')
print(str3)
# 设置参数
print("姓名: {name}, 年龄: {age}".format(name='che', age=18))
# 设置字典参数
dic = {'name': 'jun', 'age': 20}
print("姓名: {name}, 年龄: {age}".format(**dic))
# 设置列表参数
list0 = ['titan', 20]
print("姓名: {0[0]}, 年龄: {0[1]}".format(list0))
/*输出结果
hello python
Python字符串
che hello che
姓名: che, 年龄: 18
姓名: jun, 年龄: 20
姓名: titan, 年龄: 20
*/
4. 格式化操作符辅助指令
相关操作符具体的使用后面再说
符号 | 功能 |
---|---|
* |
定义宽度或者小数点精度 |
- |
在负数前面显示加号( - ) |
+ |
在正数前面显示加号( + ) |
# |
在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') |
0 |
显示的数字前面填充'0'而不是默认的空格 |
% |
%% 输出一个单一的'%' |
m.n. |
m 是显示的最小总宽度,n 是小数点后的位数(如果可用的话) |
: |
后面带填充的字符,只能是一个字符,不指定则默认是用空格填充 |
{{}} |
转义大括号, 类似%的输出 |
5. 数字格式化操作符
数字 | 格式 | 输出 | 描述 |
---|---|---|---|
3.1415926 | {:.2f} |
3.14 | 保留小数点后两位 |
3.1415926 | {:+.2f} |
+3.14 | 带符号保留小数点后两位 |
-1 | {:+.2f} |
-1.00 | 带符号保留小数点后两位 |
2.71828 | {:.0f} |
3 | 不带小数 |
5 | {:0>2d} |
05 | 数字补零 (填充左边, 宽度为2) |
5 | {:x<4d} |
5xxx | 数字补x (填充右边, 宽度为4) |
10 | {:x<4d} |
10xx | 数字补x (填充右边, 宽度为4) |
1000000 | {:,} |
1,000,000 | 以逗号分隔的数字格式 |
0.25 | {:.2%} |
25.00% | 百分比格式 |
1000000000 | {:.2e} |
1.00e+09 | 指数记法 |
13 | {:10d} |
13 | 右对齐 (默认, 宽度为10) |
13 | {:<10d} |
13 | 左对齐 (宽度为10) |
13 | {:^10d} |
13 | 中间对齐 (宽度为10) |
进制转换(以十进制数字11为例)
进制 | 格式 | 输出 |
---|---|---|
二进制 | '{:b}'.format(11) |
1011 |
十进制 | '{:d}'.format(11) |
11 |
八进制 | '{:o}'.format(11) |
13 |
十六进制 | '{:x}'.format(11) |
b |
小写十六进制 | '{:#x}'.format(11) |
0xb |
大写十六进制 | '{:#X}'.format(11) |
0XB |
print('百分比: %d%%' % 23)
print('{}索引值: {{0}}'.format('jun'))
print('{:#x}'.format(9))
print('{:#X}'.format(9))
/*输出结果:
百分比: 23%
jun索引值: {0}
0x9
0X9
*/
6.字符串的内建函数
下列方法实现了string
模块的大部分方法,如下表所示列出了目前字符串内建支持的方法,所有的方法都包含了对Unicode
的支持,有一些甚至是专门用于Unicode
的
方法 | 返回结果 | 描述 |
---|---|---|
'titan'.capitalize() |
Titan | 把字符串的第一个字符大写 |
'hello\tpython'.expandtabs() |
hello python | 把字符串 string 中的 tab 符号转为空格,tab 符号默认的空格数是 8 |
str5.find('irl') |
11 | 检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1 |
str5.rfind('irl') |
11 | 同find方法, 从右向左查询 |
str5.index('gi') | 10 | 跟find()方法一样,只不过如果str不在 string中会报一个异常. |
str5.rindex('gi') | 10 | 同index方法, 从右向左查询 |
'jun0929'.isalnum() |
True | 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False |
'titan'.isalpha() |
True | 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False |
u'23e'.isdecimal() |
False | 字符串只包含十进制字符返回True,否则返回False(只针对unicode对象) |
"123456".isdigit() |
True | 字符串只包含数字则返回 True 否则返回 False |
'23e'.islower() |
True | 字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False |
u"23443434"isnumeric() |
True | 字符串中只包含数字字符,则返回 True,否则返回 False(只针对unicode对象) |
" ".isspace() |
True | 字符串中只包含空格,则返回 True,否则返回 False. |
'JING'.isupper() |
True | 字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False |
'-'.join( ['a', 's', 'd'] ) |
a-s-d | 用于将序列中的元素以指定的字符连接生成一个新的字符串 |
'THIS'.lower |
this | 返回将字符串中所有大写字符转换为小写后生成的字符串 |
"88this".lstrip('8') |
this | 返回截掉字符串左边的空格或指定字符后生成的新字符串 |
'this88'.rstrip('8') |
this | 返回截掉字符串右边的空格或指定字符后生成的新字符串 |
max('python') |
z | 返回字符串中最大的字母 |
min('python') |
h | 返回字符串中最小的字母 |
'https://www.titanjun.top'.partition('://') |
('https', '://', 'www.titanjun.top') | 返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串 |
'this'.startswith('th', 1, 4) |
False | 检查字符串在制定范围内是否是以指定子字符串开头 |
"0jun0".strip('0') |
jun | 返回移除字符串头尾指定的字符生成的新字符串 |
'Python'.swapcase() |
pYTHON | 返回大小写字母转换后生成的新字符串 |
'hello python'.title() |
Hello Python | 返回所有单词都是以大写开始 |
'jun'.upper() |
JUN | 返回小写字母转为大写字母的字符串 |
除了以上方法外还有下列重要方法
6-1. count()方法
返回子字符串在字符串中出现的次数
str.count(sub, start= 0,end=len(string))
//使用
print('hello world'.count('l', 1, 8))
print('hello world'.count('l'))
//输出:
2
3
- 参数
-
sub
-- 搜索的子字符串 -
start
-- 字符串开始搜索的位置。默认为第一个字符,第一个字符索引值为0。 -
end
-- 字符串中结束搜索的位置。字符中第一个字符的索引为 0。默认为字符串的最后一个位置。
-
6-2. center()方法
返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格
str.center(width, fillchar)
//使用
>>> str = 'titan'
>>> str.center(8, '-')
'--titan---'
>>> str.center(9)
' titan '
>>>
- 不提供
fillchar
参数则默认为空格 - 当
width
参数小于等于原字符串的长度时,原样返回 - 无法使左右字符数相等时候,左侧字符会比右侧少 1
6-3. encode()方法
以 encoding 指定的编码格式编码字符串。errors参数可以指定不同的错误处理方案
str.encode(encoding='UTF-8',errors='strict')
//示例
'titan'.encode('UTF-8','strict')
//输出: b'titan'
-
encoding
-- 要使用的编码,如"UTF-8"。 -
errors
-- 设置不同错误的处理方案。默认为strict
,意为编码错误引起一个UnicodeError
。 其他可能得值有ignore
,replace
,xmlcharrefreplace
,backslashreplace
以及通过codecs.register_error()
注册的任何值。
6-4. endswith()方法
用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False
str.endswith(suffix[, start[, end]])
//使用示例
str5 = 'her is my girl friend haha!!'
print(str5.endswith('!!'))
print(str5.endswith('ha', 0, len(str5) - 2))
//输出结果: 都是True
-
suffix
-- 该参数可以是一个字符串或者是一个元素 -
start
-- 字符串中的开始位置, 可不传 -
end
-- 字符中结束位置, 可不传
6-5. ljust() 和 rjust()方法
-
ljust()
: 返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。如果指定的长度小于原字符串的长度则返回原字符串 -
rjust()
: 返回一个原字符串右对齐 - 参数
-
width
-- 指定字符串长度。 -
fillchar
-- 填充字符,默认为空格
-
str.ljust(width[, fillchar])
str.rjust(width[, fillchar])
//测试用例
str = "this is string example....wow!!!";
print str.ljust(50, '0');
print str.rjust(50, '0');
//输出:
this is string example....wow!!!000000000000000000
000000000000000000this is string example....wow!!!
6-6. replace()方法
返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次
str.replace(old, new[, max])
//测试
str = 'Python is a good language!'
print(str7.replace('o', 'i', 2))
//输出:
Pythin is a giod language!
6-7. split()方法
通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则仅分隔 num 个子字符串
str.split(str="", num=string.count(str))
//测试
str7 = 'Python is a good language!'
print(str7.split(' '))
print(str7.split(' ', 3))
//输出:
['Python', 'is', 'a', 'good', 'language!']
['Python', 'is', 'a', 'good language!']
6-8. splitlines()方法
按照行('\r', '\r\n', \n'
)分隔,返回一个包含各行作为元素的列表,如果参数 keepends 为 False,不包含换行符,如果为 True,则保留换行符
str.splitlines([keepends])
//测试
str8 = 'ab c\n\nde fg\rkl\r\n'
print(str8.splitlines())
str9 = 'ab c\n\nde fg\rkl\r\n'
print(str9.splitlines(True))
//输出:
['ab c', '', 'de fg', 'kl']
['ab c\n', '\n', 'de fg\r', 'kl\r\n']
- 对于
Python
语言, 我也正在努力学习中, 文中如有不足之处, 还望多多指教 - 测试代码详见 GitHub地址
- 后期会持续更新相关文章, 未完待续...