16. python 强制类型转换
通过type()函数检测数据类型
16.1 int()
强制转换为整型,数字类型之间是互相转换的,只有字符串可以转换为数字类型,并且字符串中的元素必须是纯数字,包括点号也不行,开头为正负(+/-)副号是可以转换的,否则无法转换。
16.2 float()
将其他类型数据转换为浮点型。浮点型转换为整型时不进行四舍五入,仅向下取整。布尔值也代表数字,True代表1,False代表0
16.3 str()
强制转换为字符串,所有的类型都可以转换成字符串类型
16.4 bool()
其他类型传数字类型有个特殊情况,就是其他类型传布尔类型,bool()可以将其他类型转换为True或者False
16.4.1 容器类型传布尔类型
容器类型数据:字符串,列表,元组,字典,集合
非容器类型数据: 数字类型,布尔类型
容器中有元素:True
容器中无元素:False
16.4.2 数字类型转布尔类型
int类型中,0为False,1为True
float类型中,0.0为False,其他为True
a = " " #空格元素
b = []
c = ()
d = {}
e = set()
print(bool(a))
print(bool(b))
print(bool(c))
print(bool(d))
print(bool(e))
True
False
False
False
False
a = 0.0
print(bool(a))
False
a = 0.000
print(bool(a))
False
a = 0.001
print(bool(a))
True
16.5 list()
16.5.1 数字类型转列表类型
数字类型是非容器类型的,不能转换为列表
16.5.2 字符串类型转列表类型
字符串转列表类型时,会把字符串中的每个字符素当成列表的元素
a = '123'
print(list(a))
['1', '2', '3']
16.5.3 元组转换列表
元组转换列表类型时,会把元组中的每个字符当成列表的元素
a = (1,2,3,'abcd')
print(list(a))
[1, 2, 3, 'abcd']
16.5.4 字典转换为列表类型
字典转换为列表类型时,值保留字典中的键
a = {
'name': 'ajunyu',
'age': 27,
'skill': {
'skill1': 'python',
'skill2': 'java'
}
}
print(list(a))
['name', 'age', 'skill']
16.5.5 集合转换为列表类型
集合转换为列表类型时,结果是无序的,集合本身是无序的
a = {1,2,'ajunyu',3,4}
print(list(a))
[1, 2, 3, 'ajunyu', 4]
tuple()
16.6 tuple()
其他类型转元组类型与其他类型转列表类型的规则相同
数字类型是非容器类型,不能转换为元组
字符串转元组时,会把字符串中的每个元素当成元组的元素
列表转元组时,会把列表中的每一个元素当成元组的元素
字典转元组时,只保留字典当中的键
a = {
'name': 'ajunyu',
'age': 27,
'skill': {
'skill1': 'python',
'skill2': 'java'
}
}
print(tuple(a))
['name', 'age', 'skill']
('name', 'age', 'skill')
集合转元组时,结果是无序的,集合本身是无序的
a = {1,2,'ajunyu',3,4}
print(tuple(a))
(1, 2, 3, 'ajunyu', 4)
16.7 set()
16.7.1 数字转换为集合类型
数字类型是非容器类型,不能转换为集合
16.7.2 字符串转换为集合类型
字符串转换为集合类型时,结果是无序的
a = 'abcdefg123456'
print(set(a))
{'d', '5', 'e', '1', '2', 'f', 'a', 'c', '6', '4', '3', 'b', 'g'}
16.7.3 列表转换为集合类型
列表转换为集合类型时,结果是无序的
16.7.4 元组转换为集合类型
元组转换为集合类型时,结果是无序的
16.7.5 字典转换为集合类型
字典转换为集合类型时,只保留字典中的键,结果是无序的
16.8 dict()
16.8.1 数字类型转换为字典类型
数字类型是非容器类型,不能转换为字典
16.8.2 字符串转换为字典类型
字符串不能转换为字典类型,因为字符串不能生成二级容器(嵌套)
16.8.3 列表类型转换为字典类型
列表类型转换为字典类型,列表必须为等长的二级容器(集合嵌套),子容器的元素个数必须为2
a = [1,2,3,'a','b','c']
print(dict(a))
TypeError: cannot convert dictionary update sequence element #0 to a sequence
b = [[1,'a'],[2,'b']]
print(dict(b))
{1: 'a', 2: 'b'}
16.8.4 元组类型转换为字典类型
元组类型转换为字典类型,列表必须为等长的二级容器,子容器的元素个数必须为2
16.8.5 集合类型转换为字典类型
集合不能转换为字典类型(相当于元素无序排列,无法一一对应)
17. instance()函数
用来判断一个对象是否是一个一直的类型。
返回值是布尔值,若对象的类型为已知的类型,返回True,否则返回False
17.1 语法
instance(对象,对象类型),满足一个对象类型,则返回True
对象类型有int、float、bool、str、list、tuple、set、dict
a = 1234
print(isinstance(a,(float,str,dict)))
False
a = 1234
print(isinstance(a,(float,int,dict)))
True
18. python条件语句
条件必须是真值,if后面的冒号必须有。if语句是单独存在的。else后面不用跟条件。
if...elif......else,
if 条件:
执行语句一
elif 条件二:
执行语句二
else:
执行语句三(以上条件均不满足)
19. for循环
用来循环遍历序列,通过不使用下标的方式实现对序列中的每一个元素的访问,可以实现对 list、tuple、str、set、dict等的访问
for 变量名称 in 数据类型:
执行语句
遍历数字用range()函数
range(0,10),取左不取右
遍历字典的键和值
a = {
'name': 'ajunyu',
'age': 27,
'skill': {
'skill1': 'python',
'skill2': 'java'
}
}
for i in a:
print(i)
for j in a.items():
print(j)
name
age
skill
('name', 'ajunyu') #以元组的形式
('age', 27)
('skill', {'skill1': 'python', 'skill2': 'java'})
range()函数的步长
range(0,10,2)
for i in range(0,10,2):
print(i)
0
2
4
6
8
19.1 Python双重循环
a = [1,2,3,[40,50,60],[700,800,900]]
for i in a:
if isinstance(i,list):
for j in i:
print(j)
20. Python while循环\
20.1 语法
while True:
执行语句
c = 0
while c < 6:
print(c)
c += 1
while循环可以配合else运行
c = 0
while c < 6:
print(c)
c += 1
else:
print("当前的C值{}已不满足循环条件".format(c))
20.2 循环中的关键字
break和continue。
break 跳出循环
continue跳出当前循环执行循环模块的剩余语句,进行下一轮循环
for i in 'python':
if i == 'o':
break
print(i)
p
y
t
h
for i in 'python':
if i == 'o':
continue
print(i)
p
y
t
h
n
a = 0
while a < 6:
a += 1
if a == 3:
continue
print('当前a的值:', a)
20.3 pass
空语句,为了保持程序结构的完成性
21. Python的函数
函数是组织好的,可以重复使用的,函数的目的是封装业务逻辑,实现代码的重复使用
21.1 函数的创建
用def关键字:
def 函数名(形参):
函数体
21.2 函数的调用(运行函数)
函数名(实参)
函数必须先定义再调用
21.3 函数的参数
21.3.1 位置参数
在对函数进行调用的时候,有几个位置参数就需要传递几个参数,否则会触发异常,并且,传入参数(形参)和函数参数(实参)列表时一一对应的关系,形参和实参都是位置参数,传入的参数可以是任意的数据类型
21.3.2 默认参数
默认参数是指带有默认值的参数,在对该函数进行调用的时候,可以不必显示传递给该函数,当不传递的时候,函数将使用默认值。默认值只能回执行一次,这条规则在默认值为可变对象(列表、字典以及大多数的类的实例)是非常重要。官方建议默认参数尽量使用不可变对象。
省略传入所有参数,函数会默认使用默认参数的默认值。
def abc(a=300,b=400):
print(a+b)
abc()
700
如果传入一个参数,默认为第一个参数进行参数
def abc(a=300,b=400):
print(a+b)
abc(600)
1000
传入,另一个参数继续使用默认值
def abc(a=300,b=400):
print(a+b)
abc(600)
1000
传入多个参数时,替换默认参数
def abc(a=300,b=400):
print(a+b)
abc(600,600)
1200
对指定的参数进行传入值
def abc(a=300,b=400):
print(a+b)
abc(b=600)
900
可变类型传参
def abc(a,b=[]): #列表时可变对象
b.append(a)
print(b)
abc(100)
[100]
def abc(a,b=[]):
b.append(a)
print(b)
abc(100)
abc(200) #多次调用
[100]
[100, 200] #第一次调用会影响第二次调用
解决问题:使两次调用之间没有联系
def abc(a,b=None):
if b is None:
b = []
b.append(a)
print(b)
abc(100)
abc(200)