1. 变量
(1)变量 = 值
(2)由字母、数字、下划线组成
(3)不能以数字开头
(4)不能与关键字重名
(5)单词都用小写字母
(6)单词之间用“_”连接
(7)获取变量的相关属性:
# name = "ABC"
# | |
# \ | / \ | /
# label value
(8)获取变量的id
id(obj)
(9)获取变量的type
type(obj)
(10)获取变量的value
obj
例1.1:获取变量信息
name = "ABC"
print(id(name)) #1672858375792
print(type(name)) #<class 'str'>
print(name) #ABC
2. 数据类型
2.1 整型int
(1)binary / octal / decimal(default) / hexadecimal
例2.1:整型变量
print(18) #18
print(0b1001) #9
print(0o17) #15
print(0x1a) #26
2.2 浮点型float
(1)计算结果不精确,需要精确结果请使用工具: Decimal(‘数字字符串’)
例2.2:浮点型变量
print(1.1 + 2.2) # 3.3000000000000003
from decimal import Decimal
print(Decimal('1.1') + Decimal('2.2')) # 3.3
print(Decimal(1.1) + Decimal(2.2)) # 3.300000000000026464....
2.3 布尔型bool
(1)一切对象都有一个布尔值
(2)布尔值只有两种:True和False
(3)以下对象的布尔值为False:False/0/None/空字符串/空列表/空元组/空字典/空集合
(4)其他对象的布尔值均为True
例2.3:bool型变量
print(True) #True
print(False) #False
print(True + 1) #2
print(False + 1) #0
print(bool(False)) #False
print(bool(0)) #False
print(bool(None)) #False
print(bool("")) #False
print(bool([])) # or: print(bool(list())) #False
print(bool(())) # or: print(bool(tuple())) #False
print(bool({})) # or: print(bool(dict())) #False
print(bool(set())) #False
2.4 字符串string
见第3节
2.5 数据类型转换
(1)其他类型转为字符串:str(***)
(2)其他类型转为整型:int(***)
注意:字符串类型转化为整型只能是整数字符串
(3)其他类型转化为浮点型:float(***)
注意:字符串类型转化为浮点型只能是数字字符串
例2.5:数据类型转换
print(str(10) + str(5.5) + str(True)) # 105.5True
print(int(5.5)) #5
print(int(True)) #1
print(int('128')) #128
print(int('A')) # error
print(int('5.5')) # error
print(float(True)) #1.0
print(float(128)) #128.0
print(float('128')) #128.0
print(float('128.5')) #128.5
print(float('A')) # error
3. 字符串
3.1 字符串表示方式
(1)单引号:'***'(必须在同一行)
(2)双引号:"***"(必须在同一行)
(3)三引号:"""***"""(不必在同一行,三引号里的内容全部都属于字符串,包括换行符等)
例3.1:字符串的几种表示方式
str1 = 'A'
str2 = "B"
str3 = """C
D """
print(str1) #A
print(str2) #B
print(str3) #C
# D
3.2 字符串的驻留机制
(1)驻留机制:即若字符串内容相同,对象就只有一个
(2)非pycharm模式下驻留机制需要满足以下条件之一:
a)字符串长度为0或1:即任意字符都可以
b)字符串符合标识符(即由数字字母下划线组成):即若包含空格等其它字符就不会触发驻留机制
c)字符串只在编译时驻留,而不是运行时
d)-5到256之间的整数数字
例3.2:字符串的驻留机制
a = 'abc'
b = 'abc'
c = 'ab'+'c'
d = ''.join(['ab','c'])
e = 'ab'
f = e+'c'
print(a, id(a)) # abc 2626773437040
print(b, id(b)) # abc 2626773437040
print(c, id(c)) # abc 2626773437040
print(d, id(d)) # abc 2626777516784 , run time
print(f, id(f)) # abc 2626777516656 , run time
3.3 字符串查询
(1)index(): 查找第一次出现的位置,若不存在,抛出异常
(2)find(): 查找第一次出现的位置,若不存在,返回-1
(3)rindex(): 查找最后一次出现的位置,若不存在,抛出异常
(4)rfind(): 查找最后一次出现的位置,若不存在,返回-1
例3.3:字符串查询
str1 = 'jsgeyhegy'
print(str1.index('g')) #2
print(str1.find('g')) #2
print(str1.rindex('g')) #7
print(str1.rfind('g')) #7
3.4 字符串大小写转换
(1)upper(): 全部转换为大写,会产生新的对象(即使原来的字符串对象都是大写)
(2)lower():全部转换为小写,会产生新的对象(即使原来的字符串对象都是小写)
(3)swapcase(): 把字符串中的大写转换为小写,小写转换为大写
(4)title(): 把每个单词的首字母转换成大写,其余转换成小写
例3.4:
str1 = 'jsgeyhegyZ word SHBjdh'
print(str1.upper()) # JSGEYHEGYZ WORD SHBJDH
print(str1.lower()) # jsgeyhegyz word shbjdh
print(str1.swapcase()) # JSGEYHEGYz WORD shbJDH
print(str1.title()) # Jsgeyhegyz Word Shbjdh
3.5 字符串对齐
(1)center(): 居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数可选,默认空格。若指定宽度小于实际字符串宽度,则返回原字符串
(2)ljust(): 左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数可选,默认空格。若指定宽度小于实际字符串宽度,则返回原字符串
(3)rjust(): 右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数可选,默认空格。若指定宽度小于实际字符串宽度,则返回原字符串
(4)zfill(): 右对齐,只有一个参数来指定宽度,若指定宽度小于实际字符串宽度,则返回原字符串,左边固定用0填充
例3.5:
str1 = 'jsgeyhegyZ word SHBjdh'
print(str1.center(50, '$')) # $$$$$$$$$$$$$$jsgeyhegyZ word SHBjdh$$$$$$$$$$$$$$
print(str1.ljust(50, '$')) # jsgeyhegyZ word SHBjdh$$$$$$$$$$$$$$$$$$$$$$$$$$$$
print(str1.rjust(50, '$')) # $$$$$$$$$$$$$$$$$$$$$$$$$$$$jsgeyhegyZ word SHBjdh
print(str1.zfill(50)) # 0000000000000000000000000000jsgeyhegyZ word SHBjdh
3.6 字符串劈分
(1)split(): 从左侧开始劈分,返回字符串列表,有两个可选参数:1)sep:分割操作符,默认空格2)maxsplit:最大分割次数
(2)rsplit(): 从右侧开始劈分,返回字符串列表,有两个可选参数:1)sep:分割操作符,默认空格2)maxsplit:最大分割次数
(3)list = re.split(分割操作符,字符对象):当分割对象不是某个确定的字符时,就可以用正则匹配。
例3.6:
str1 = 'jsgeyhegyZ word SHBjdh'
lst1 = str1.split(sep='g', maxsplit=1)
lst2 = str1.rsplit(sep='g', maxsplit=1)
print(lst1) # ['js', 'eyhegyZ word SHBjdh']
print(lst2) # ['jsgeyhe', 'yZ word SHBjdh']
str = "aaa bbb ccc"
list = re.split(r’[ ]+’,str)
print(list) #[‘aaa’,’bbb’,’ccc’]
3.7 字符串判断
(1)isidentifier(): 判断字符串是否是合法的标识符
(2)isspace(): 判断字符串是否全部由空白字符组成()
(3)isalpha(): 判断指定的字符串是否全部由字母组成
(4)isdecimal(): 判断指定字符串是否全部由十进制的数字组成
(5)isnumeric(): 判断指定的字符串是否全部由数字组成
(6)isalnum(): 判断指定字符串是否全部由字母和数字组成
(7)isdigit():如果字符串只包含数字则返回True
例3.7:
str1 = 'jsgeyhegyZ word SHBjdh12 34od'
print(str1.isidentifier()) #False
print(str1.isspace()) #False
print(str1.isalpha()) #False
print(str1.isdecimal()) #False
print(str1.isnumeric()) #False
print(str1.isalnum()) #False
3.8 字符串替换
(1)replace(): 第一个参数是被替换的子字符串,第二个参数是要替换成的子字符串,第三个参数指定最大替换次数。返回替换后的字符串
例3.8:
str1 = 'hhhhhwgdyehhhwoeurbdy'
print(str1.replace('h','o',5)) #ooooowgdyehhhwoeurbdy
3.9 字符串拼接
(1)join(): 将列表或元组中的字符串合并成一个字符串(效率比+高)
(2)不同内容的字符串拼接使用加号+
(3)相同内容的字符串拼接使用乘号*(即重复)
例3.9:字符串拼接
print(str(10) + str(5.5) + str(True)) # 105.5True
print(‘str’*4) # strstrstrstr
lst1 = ['hsgd', 'whhd', 'syye']
print(''.join(lst1)) # hsgdwhhdsyye
lst2 = ('hsgd', 'whhd', 'syye')
print(''.join(lst2)) # hsgdwhhdsyye
print('$'.join('hdue')) # h$d$u$e
3.10 字符串比较
(1)比较字符串内容(实际比较的是ascii码):# > >= < <= == !=
(2)比较字符串id:is
例3.10:
print('apple' > 'app') #True
print('apple' > 'banana') #97>98?False
print('banana' >= 'apple') #True
3.11 获取字符串原始值
(1)ord():即获取ASCII码
例3.11:
print(ord('a')) #97
3.12 字符串切片
(1)切片产生新的对象[start:end:step],步长为负数默认从最后一个字符开始
例3.12:
str1 = 'hshb sjwh0281;kwi'
print(str1[5:]) #sjwh0281;kwi
print(str1[:9]) #hshb sjwh
print(str1[0:3]) #hsh
print(str1[5:12]) #sjwh028
print(str1[5:12:2]) #sw08
print(str1[::2]) #hh jh21ki
print(str1[::-1]) #iwk;1820hwjs bhsh
3.13 格式化字符串
(1)方式一:%作为占位符
%s:字符串
%i或%d:整数
%f:浮点数
%10d:10表示的是宽度,表示这个数字将占据10个宽度
%.3f: .3表示该浮点数的精度为3,即小数点后保留3位
%10.3f: 总宽度为10,小数点后保留3位
{序号:.3}: .3表示一共是3位数字
{序号:10.3}: 表示宽度是10,数字有3位
(2)方式二:{}作为占位符,调用format:当{}只有1个时,里面的序号可以不写
{0:<50}:0表示占位符,<表示左对齐,^表示居中对齐,>表示右对齐,50表示此字符串占据50个宽度
(3)方式三:f-string
例3.13:
name = 'Julie'
age = 18
print('my name is %s, my age is %d' % (name, age)) #my name is Julie, my age is 18
print('my name is {0}, you can call me {0}, and my age is {1}'.format(name, age))# my name is Julie, you can call me Julie, and my age is 18
print(f'my name is {name}, my age is {age}') #my name is Julie, my age is 18
print('%10d' % (3)) # 3
print('%.3f' % (3.1415926)) #3.142
print('%10.3f' % (3.1415926)) # 3.142
print('{0:.3}'.format(3.1415926)) #3.14
print('{:.3}'.format(3.1415926)) #3.14
print('{:10.3}'.format(3.1415926)) # 3.14
3.14 字符串编码转换
(1)编码:将字符串转换成二进制
(2)解码:将二进制转换成字符串
(3)注意:编码和解码的格式必须保持一致,否则会报错
例3.14:
str = '我是xxx'
byte = str.encode(encoding='GBK') #GBK: 一个汉字占两个字节
str1 = byte.decode(encoding='GBK')
byte2 = str.encode(encoding='UTF-8') #UTF-8: 一个汉字占三个字节
str2 = byte2.decode(encoding='UTF-8')
print(byte) #b'\xce\xd2\xca\xc7xxx'
print(str1) #我是xxx
print(byte2) #b'\xe6\x88\x91\xe6\x98\xafxxx'
print(str2) #我是xxx
3.15 获取字符串长度
(1)len()
例3.15:
str = 'abcxxx'
print(len(str)) #6