数据类型
不可变对象
- 数字 Number
- 字符串 Strring
- 布尔值 Bloon
不可变对象指数据类型本身调用某些内置方法或属性后,其本身的值不会改变,只是会生成一个新的对象。
数字Number
# 整数
a = 123
print(a)
结果:
123
int整数
int()方法可以将字符串类型数据转换为数字类型。常用以input()用户输入后的值的转换。
# int()转换
bNum = input("输入数字:")
print("转换前的数据类型:", type(bNum))
print("转换后的值:", int(bNum))
print("转换后的数据类型:", type(int(bNum)))
结果:
输入数字:10
转换前的数据类型:
转换后的值: 10
转换后的数据类型:
浮点数float
- 整数部分和小数部分
- 可以采用科学计数法
# 浮点数
b = 3.141592
print(b)
# 科学计数法
b = 3.14e2
print(b)
# 小于1时,省略0
c = .7
print(c)
结果:
3.141592
314.0
0.7
float()方法
将数字类型转换为字符串类型。
# 数字转换为字符串
cFlo = 123
print(float(cFlo))
print(type(float(cFlo)))
结果:
123.0
布尔值
- 表示真假的两个值:True和False
- 将布尔值当作数字时:True为1,False为0
- 将数字当作布尔值时:0为False,其余为True
# 布尔值当作数字
a = 1 + True
print(a)
print(True)
# 数字当作布尔值
b = 1 + False
print(b)
# True
if -1:
print("-1为True")
else:
print("-1为False")
结果:
2
True
1
-1为True
注:在Python中,除0以外的其它数字均被当作True。
字符串类型 Str
- 字符串定义
- 常见的方法、内置方法
- 字符串格式化(%、format()、f-string、模块)
通过单引号''、双引号""或者三引号括起来的文本。在字符串中,一个空格也算一个字符。
# 单引号
str1 = 'Tom'
print(str1)
#双引号
str2 = "Bob"
print(str2)
# 三引号
str3 = """
I am
Jon
I love my home!
"""
print(str3)
结果:
Tom
Bob
I am
Jon
I love my home!
注:单引号和双引号表达的意思相同,表示单行字符串,三引号表示多行字符串。
字符串中常见的方法和属性
遍历和访问
可以通过for……in……循环来遍历字符串中的每个字符。通过“str[start : end : step]”方法来访问和修改字符串。
# 遍历字符串并打印
str1 = "hello world!"
for i in str1:
print(i)
# 通过索引访问字符
str2 = "I love python!"
print(str2[2 : 6])
结果:
h
e
l
l
o
w
o
r
l
d
!
love
切片操作
切片是Python中最常见的操作方式,意思就是从一个对象中抽取部分值来。何为切片?就是将字符串中的子串抽取出来并返回。常见的切片操作“[start : end : step]”。
start:切片的起始位置,表示方法为索引(包括本索引位)。当它为0时,表示从字符串的开头开始切片。当省略掉start时,默认从开头切片。
end:切片的最终索引位,抽取的字符是start到end - 1 之间的字符。当它为0时,默认切片start到字符串末尾之间的所有字符。
step:切片的步长,决定着切片的长度。当它为正时,表示从左到右开始切片。当它为负时,表示从右向左开始切片。
start、end和step的正负影响着切片的方向。
下面,我们就以切片str1 = "I am Tom, I love Python!"为例子,详细讲讲切片的相关操作。
切取单个字符
# 字符串
str1 = "I am Tom, I love Python!"
# 切取单个字符
print(str1[0]) #正数第一个字符
print(str1[-1])#倒数第一个字符
结果:
I
!
I am Tom, I love Python!
I am Tom, I love Python!
!nohtyP evol I ,moT ma I
可以看出,当start为负数时,表示从字符串的末尾开始向前切片。
切取完整的字符串
# 切取整个字符串
print(str1[ : ]) #从左向右切片
print(str1[ : : ]) #从左向右切片
print(str1[ : : -1]) #从右向左切片
结果:
I am Tom, I love Python!
I am Tom, I love Python!
!nohtyP evol I ,moT ma I
start和end均为正(+)的情况
# 切取start到end - 1之间的所有元素
print(str1[1 : 7]) #切取索引1位置到6位置之间的所有字符
#
print(str1[3 : 4])
#当start 大于end时
print(str1[7 : 3]) #切取空值
#step为负时
print(str1[2 : : -1]) # 从右向左切取
结果:
am To
m
a I
start和end均为负(-)的情况
# 均为负时,表示从末尾向前切片
print(str1[-8 : -1])
# 从索引-7的位置反向切片
print(str1[ : -7 : -1])
# 负数表示从左向向取值,start = -2 到end=-7 从右向左取值,两者矛盾,取值为空
print(str1[-2 : -7])
#步长为负时
print(str1[-5 : -11 : -1])
#
print(str1[-8 : ]) #索引-8的位置到末尾之间的元素
#
print(str1[ : -8]) #从字符串开头到-8索引之间的元素
结果:
Python
!nohty
tyP ev
Python!
I am Tom, I love
start和end混合正负(+-)的情况
# start=2,step=1,表示从左向右取值,end为负表示从末尾开始倒数7个索引位
print(str1[2 : -7])
# start=-2,倒数第2个索引开始,step=1,表示从左向右取值,结束位在索引5,取值为空。
print(str1[-2 : 5])
结果:
am Tom, I love
常见内置方法
分割方法 str.split(str, num) 和 " ".join(str)
str.split(str1, num) 表示以字符串str中指定的字符str1作为分割符(变成逗号“,”)将整个字符串分割,并以list的形式输出。num表示分割为num + 1个子字符串,当num为-1或者不指定时,表示将整个字符串分割。
# 定义字符串
str1 = "I am Tom, I love hello world!"
# 以m作为分割符,将字符串分割两次
print(str1.split("m", 2)) #可以看到,整个字符串只分割了两次,m变成了分割符号“,”
# 以l作为分割符,将字符串分割3次
print(str1.split("l", 3)) #字符串有四个字符l,num为3,表示只分割3次
# 以空格为分割符
print(str1.split(" "))
结果:
['I a', ' To', ', I love hello world!']
['I am Tom, I ', 'ove he', '', 'o world!']
['I', 'am', 'Tom,', 'I', 'love', 'hello', 'world!']
" ".join(str) 表示以" "中的内容作为分割符,将字符串str全部分割,并以list形式输出。就以上述的str1为例:
# 以逗号作为分割符
print(",".join(str1)) #将str1每个字符均分割开来,包括空格符
# 以|作为分割符
print("|".join(str1)) #
# 相同字符作为分割符
print("l".join(str1))
结果:
I, ,a,m, ,T,o,m,,, ,I, ,l,o,v,e, ,h,e,l,l,o, ,w,o,r,l,d,!
I| |a|m| |T|o|m|,| |I| |l|o|v|e| |h|e|l|l|o| |w|o|r|l|d|!
Il lalml lTlolml,l lIl lllolvlel lhlelllllol lwlolrllldl!
str.split(str1)与"",join(str)的不同之处:
- split是以原字符串中的字符作为分割符的,且可以规定分割的次数。指定的字符会消失,变成分割符
- join可以自定义分割符将字符串中的字符全部分割开来。**即使指定的分割符与字符串中的字符一样,字符串中的字符也不会消失。
str.replace(oldStr, newStr, num)替换方法
str.replace(oldStr, newStr, num)表示用newStr字符串替换掉str中的oldStr字符串,num表示替换次数,毕竟会有重复的字符出现。
#
str2 = "Hello worlD!"
# 用g替换l
print(str2.replace("l", "g", 2)) #指定替换次数2次
print(str2.replace("l", "w", -1)) #num为-1时,表示全部替换掉
结果:
Heggo worlD!
Hewwo worwD!
其它常见内置方法
# 大写变小写
print(str2.lower())
# 小写变大写
print(str2.upper())
# 大写变小写,小写变大写
print(str2.swapcase())
# 字符串标题化
print(str2.title()) #标题化,就是每个单词的首字母大写
# 返回字符串的长度,即返回字符的个数
print(len(str2))
# 返回字符串中最大的字符
print(max(str2))
# 返回字符串中最小的字符
print(min(str2)) #返回的是空格
# 返回字符l出现的次数
print(str2.count("l"))
结果:
hello world!
HELLO WORLD!
hELLO WORLd!
Hello World!
12
w
3
del str 删除字符串
# 删除字符串
del str2 #内存中已经没有字符串了,会出现错误的提示
删除的变量再访问,程序会报错,表示内存中已经没有这个变量了。
字符串的格式化(%、format()、f-string)
格式化:就是将一种数据类型转换为另一种类型。作用:可以用来检测用户输入的数据的安全性。
%()旧式格式化
在文本内或者需要输出的地方用%(s、d、r)来表示需要转换的类型,然后在后面紧跟着%(str1[num[list[...]]])等输出的数据。
# 旧式%()格式化
str3 = "Tom"
age = 25
print("I am %s, I %d years old today, I vervy love %r!" %(str3, age, "Python"))
结果:
I am Tom, I 25 years old today, I vervy love 'Python'!
可以看到,用%s、%d、%r分别表示需要输入的数据类型,然后%()里面的就相应按类型替换输出。其中,%s表示字符串,%d表示数字,%r表示 原始数据对象,
所以输出时加了双绰号,表示它是原始数据对象。
特别注意: 双引号中以%表示的符号数量必须与%()里面的数据数量相同,不然程序会出错。
format()新式格式化
- 使用函数形式进行格式化,替代%百分号格式化
- 使用索引参数进行格式化。
- 使用命名参数进行格式化。
- 使用字典dict进行格式。
format()是Python最新出推出的字符串格式化函数。它的格式为“{}.format()”,{}对应着后面括号内的数据。
format函数是使用“{}”来占位的,有“{}”的地方就可以使用format里面的参数。
# format()格式化
print("I am {}, I {} years old today, I vervy love {}!".format(str3, age, "Python")) #{}与()中的数据相对应。
# 在{}中使用索引来对应后面的数据
print("I am {1}, I {2} years old today, I vervy love {0}!".format("Python", age, str3))
# 使用命名参数格式化
s = "我叫{name},我今年{age}岁了,我喜欢{Object}!"
print(s.format(name = "Tom", age = 25, Object = "Python"))
#使用字典dict格式化字符
dict_s = {"name" : "Tom", "age" : 25, "Object" : "Python"} # 这里的age应该对应上字符串中的字符
s = s.format(**dict_s) # **为解包。
print(s)
结果:
I am Tom, I 25 years old today, I vervy love Python!
I am 25, I Tom years old today, I vervy love Python!
我叫Tom,我今年25岁了,我喜欢Python!
我叫Tom,我今年25岁了,我喜欢Python!
可以看出,format()与%能够实现相同的功能。而且,format()可以通过索引、命名参数和dict方式来格式化字符。
其中,“**” 表示解包
# 将format前面的内容提取出来,然后再调用这个函数
s = "{}{}{}{}{}{}!"
print(s.format("hello ", "world", ",", "I ", "love ", "Python"))
结果:
hello world,I love Python!
f-String格式化
格式:f"{}"。{}中就是需要传递的参数值。
#f-string格式化
obj = "Python"
print(f"I am {str3}, I {age} years old, I vervy love {obj}!")
结果:
I am Tom, I 25 years old, I vervy love Python!
f-string格式化符最主要用于检测用户输入的数据的安全性。
附加: r""" """可以实现换行输入,而且里面的转义字符也不会发生作用,只相当于普通字符输出。
# 换行输入
print(r"""I am Tom, I \n
25 years old \n""") #转义字符没有发生功能作用,相当于普通字符。
结果:
I am Tom, I \n
25 years old \n
in 与 not in
in 用于检测某字符是否属于某字符串,如果在字符串中返回True,否则返回False。not in 起相反的效果,如果某字符不在某字符串中返回True。
# in、not in的使用
str4 = "hello python!"
print("h" in str4)
print("w" in str4)
print("w" not in str4)
print("l" not in str4)
结果:
True
False
True
False
转义字符(\t、\n、\、r"")
转义字符是具有特殊意义的字符系列。如\n表示换行,\t表示制表符,\表示一个斜杠。
在引号中有转义字符时,一般会被当作特殊字符看待,r""可以让其被看作普通字符。
# 将转义字符当作普通字符
print(r"\n\n\t\\")
结果:
\n\n\t\\
常用的转义字符:
\:些行没有结束,下一行继续书写
\n:换行符
\r:回车符
\t:制表符
\000:空格
\':单引号
\"":双引号
\\:转义成反斜杠
举例:
#
print("I love Python!")
# 换行字符
print("I love \n Python!")
print(r"I love \\ Python!")
# 表示此行没有结束,下一行继续书写
print("I love \
Python!")
结果:
I love Python!
I love
Python!
I love \\ Python!
I love Python!
none类型
noen表示空值,什么也没有。一般用于在函数中返回。函数中没有return时就默认为return none。
# 返回空值
def a():
return none