Python数据类型详解02

一. Number(数字)

  • Python 中数学运算常用的函数基本都在 math 模块、cmath 模块中。
  • math 模块提供了许多对浮点数的数学运算函数。
  • cmath 模块包含了一些用于复数运算的函数。
  • cmath 模块的函数跟 math 模块函数基本一致,区别是 cmath 模块运算的是复数,math 模块运算的是数学运算。
  • 要使用 mathcmath 函数必须先导入:
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()函数只适用于floatinteger类型,而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. innot 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'.lowerthis返回将字符串中所有大写字符转换为小写后生成的字符串
"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地址
  • 后期会持续更新相关文章, 未完待续…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值