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'.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地址
  • 后期会持续更新相关文章, 未完待续...
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,552评论 5 474
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,666评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,519评论 0 334
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,180评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,205评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,344评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,781评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,449评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,635评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,467评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,515评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,217评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,775评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,851评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,084评论 1 258
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,637评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,204评论 2 341

推荐阅读更多精彩内容

  • 〇、前言 本文共108张图,流量党请慎重! 历时1个半月,我把自己学习Python基础知识的框架详细梳理了一遍。 ...
    Raxxie阅读 18,903评论 17 410
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,204评论 0 4
  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 4,205评论 4 16
  • 《小窗幽记》云:“余尝净一室,置一几,陈几种快意书,放一本旧法帖;古鼎焚香,素麈挥尘,意思小倦,暂休竹榻。饷时而起...
    馨香子阅读 687评论 0 0