python要素一:基本数据类型
一、标识符
标识符:我们自己在写代码的时候,取的名字。命名的符号。
项目名:project name、包名:package name、模块名:.py python文件名
标识符规范:
1:由字母数字下划线组成 但是不能以数字开头
2:见名知意
3:不同的字母 数字之间 用下划线隔开 提升你的可读性
4:不能用关键字 例如:int if while
注释:
注释:# 单行注释 ctrl+/
多行注释:成对的三个单/双引号 ''' '''
基本数据类型 :Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组)
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
二、Integral类型
包括int和bool两种类型。
(一)整数
整数的大小只受限于机器内存的大小。默认采取的十进制,也可以使用其他进制,如0b01(二进制)、0o67(八进制)、0xab(十六进制)。
常见的数学函数和操作符都能作用于整数,如+、-、*、/、//(整除,保留商的整数部分)、%(取模)、(幂),函数abs(x)返回x的绝对值,divmod(x,y)以二元组的形式返回x除以y所得的商和余数,pow(x,y)返回x的y次幂,pow(x,y,z)返回xy%z的值,round(x,n)返回浮点数x保留n位小数后四舍五入的值。
整数转换函数:
- bin(i)返回二进制表示的字符串
- hex(i)返回十六进制表示的字符串
- int(x)数据类型转换,返回整数
- int(s,base)将字符串s转换为整数,如果给定了可选的基参数,那么应该为2到36之间的整数。如int(‘a4’,16)表示值为164的整数。
- oct(i)返回八进制表示的字符串
(二)布尔型
有两个内置的布尔型对象,True与False。
三、浮点类型
Python提供了3种浮点值:内置的float与complex类型,以及来自标准库的decimal.Decimal类型。计算机总是有效地将浮点数以近似值的方式存储。
(一)浮点数
float存放双精度浮点数,具体取值范围依赖构建Python的C(C#、Java等)编译器,由于精度受限,对其进行相等性比较并不可靠。sys.float_info.epsilon是可以区分出两个浮点数的最小区别。Python的float类型通常会至多提供17个数字的精度。
(二)复数
复数存放的是一对数,一个表示实数部分,一个表示虚数部分,如z=-89.5+2.125j,z.real和z.imag分别为-89.5和2.125。复数类型有一个方法conjugate(),用于改变虚数部分的符号。
math模块中的函数不能处理复数,要使用复数,可以先导入cmath模块。
(三)十进制数字
decimal模块提供的十进制数,精度可以自行指定,准确性比float类型高,但计算速度比float慢。
十进制数由decimal.Decimal()创建
四、字符串
字符串是由单引号、双引号或三个单(双)引号创建的。
Python字符串转义如下所示,由r引导的字符串其内部所有字符均按照字面意义理解,不需要进行转义。
转义字符 | 描述 |
---|---|
(在行尾时) | 续行符,忽略换行 |
\ | 反斜杠符号 |
' | 单引号 |
" | 双引号 |
\a | 响铃(BEL) |
\b | 退格(BS) |
\N{name} | 给定名称的Unicode字符 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\000 | 三位八进制数代表的字符,例如:\012代表换行 |
\xyy | 十六进制数yy代表的8位Unicode字符,例如:\x0a代表换行 |
\uyyyy | 十六进制数yyyy代表的16位Unicode字符 |
\Uyyyyyyyy | 十六进制数yyyyyyyy代表的32位Unicode字符 |
长字符串跨行时,可以用三个引号封装,也可以用转义符"(在行尾)",或者用“()”将各行字符串封装起来。
(一)比较字符串
字符串比较运算符与数字比较运算符相同。
字符串比较时,通常遇到两个问题:①有些Unicode字符可以使用多种字节序列表示,如Å(Unicode字元0x00c5)可以3种不同方式使用utf-8编码的字节表示(16进制数表示):[E2,84,AB]、[C3,85]、[41,CC,8A],调用函数unicodedata.normalize('NFKD','Å')进行标准化,返回的字符串中Å的字节序列总是[41,CC,8A];②有些字符的排序是特定于某种语言的。Python在字符串比较时,采取的是字符串的内存字节表示,此时排序是基于Unicode字元的。
(二)字符串分片与步距
seq[start](取单个元素)
seq[start:end](能取到start至end-1的元素,即顾头不顾尾。start、end可正可负,可以将负数下标+lenth变为正数下标)
seq[start🔚step](当step为正数时,start从0开始算起,应满足start<=end;当step为负数时,start从-1开始算起,应满足start>=end)
其中,seq可以是任意序列,比如列表、字符串或元组。seq的每个元素可以用正反向两个下标表示,即seq[i]与seq[i-lenth(0<=i<lenth),start、end、step必须是整数。
(三)字符串操作符与方法
参考资料1
#strip
a = "allexexeexx"print(a.lstrip("ex"))#allexexeex
print(a.rstrip("ex"))#all
print(a.strip("ex"))#all
print(a.lstrip("lex"))#allexexeex
print(a.rstrip("lex"))#a
print(a.strip("lex"))#a
print(a.lstrip("alex"))#空
print(a.rstrip("alex"))#空
print(a.strip("alex"))#空
#结论:strip() 处理的时候,如果不带参数,默认是清除两边的空白符,例如:/n, /r, /t, ' ')。 带有参数的时候,分别从两边删除参数中包含的字符,直到遇到不在参数中的字符为止。
#lower,upper
name='egon'
print(name.lower())
print(name.upper())
#startswith,endswith
name='alex_SB'
print(name.endswith('SB'))
print(name.startswith('alex'))
#format的三种玩法
res='{} {} {}'.format('egon',18,'male')
res='{1} {0} {1}'.format('egon',18,'male')
res='{name} {age} {sex}'.format(sex='male',name='egon',age=18)
#split
name='root:x:0:0::/root:/bin/bash'
print(name.split(':')) #默认分隔符为空格
name='C:/a/b/c/d.txt' #只想拿到顶级目录,切分1次
print(name.split('/',1))
name='a|b|c'
print(name.rsplit('|',1)) #从右开始切分
#join
tag=' '
print(tag.join(['egon','say','hello','world'])) #可迭代对象必须都是字符串
#replace
name='alex say :i have one tesla,my name is alex'
print(name.replace('alex','SB',1))
#isdigit:可以判断bytes和unicode类型,是最常用的用于于判断字符是否为"数字"的方法
age=input('>>: ')
print(age.isdigit())
#find,rfind,index,rindex,count
name='egon say hello'
print(name.find('o',1,3)) #顾头不顾尾,找不到则返回-1不会报错,找到了则显示索引
# print(name.index('e',2,4)) #同上,但是找不到会报错
print(name.count('e',1,3)) #顾头不顾尾,如果不指定范围则查找所有
#center,ljust,rjust,zfill
name='egon'
print(name.center(30,'-'))
print(name.ljust(30,'*'))
print(name.rjust(30,'*'))
print(name.zfill(50)) #用0填充
#expandtabs
name='egon\thello'
print(name)
print(name.expandtabs(1))
#captalize,swapcase,title
print(name.capitalize()) #首字母大写
print(name.swapcase()) #大小写翻转
msg='egon say hi'
print(msg.title()) #每个单词的首字母大写
#is数字系列
#在python3中
num1=b'4' #bytes
num2=u'4' #unicode,python3中无需加u就是unicode
num3='四' #中文数字
num4='Ⅳ' #罗马数字
#isdigt:bytes,unicode
print(num1.isdigit()) #True
print(num2.isdigit()) #True
print(num3.isdigit()) #False
print(num4.isdigit()) #False
#isdecimal:uncicode
#bytes类型无isdecimal方法
print(num2.isdecimal()) #True
print(num3.isdecimal()) #False
print(num4.isdecimal()) #False
#isnumberic:unicode,中文数字,罗马数字
#bytes类型无isnumberic方法
print(num2.isnumeric()) #True
print(num3.isnumeric()) #True
print(num4.isnumeric()) #True
#三者不能判断浮点数
num5='4.3'
print(num5.isdigit())
print(num5.isdecimal())
print(num5.isnumeric())
#总结:
#最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
#如果要判断中文数字或罗马数字,则需要用到isnumeric
#is其他
print('===>')
name='egon123'
print(name.isalnum()) #字符串由字母或数字组成
print(name.isalpha()) #字符串只由字母组成
print(name.isidentifier())
print(name.islower())
print(name.isupper())
print(name.isspace())
print(name.istitle())