python3数据类型
1、介绍
python是解释型语言,变量不声明类型,而是由赋值进行确定,比如=之后的字面量或类型,或者形参接收的实参。
每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
2、标准数据类型
包括数值number(int、float、bool、comlex)、字符串str、元组tuple、列表list、集合set、字典dict
关于各类型的具体内容,另外分别记录。
2.1 可变和不可变
这六个标准数据类型中,可分为两组。
不可变数据:number、str和tuple,可变数据:list、set和dict
可变数据类型,是指的该类型的数据,允许改变其元素或属性,而不会改变对象整体,准确的说是对其内部操作,不改变对象的地址。
不可变数据类型,是不允许直接改写其元素或属性。
一般对象类型,是天然的可变数据类型。
2.2 传地址与传值
在方法或函数使用中,传地址还是传值取决于实参是可变类型还是不可变类型。
传地址,即对应的实参是可变类型,在方法或函数内对该变量操作,会直接影响方法或函数外的变量
相对的,则传值对应不可变类型,在方法或函数内对该变量操作,不会直接影响方法或函数外的变量
需要注意一种场景,方法或函数中通过形参接收到实参的对象或者list等可变类型,想在方法或函数内直接操作并改变实参的值,那么绝对不能重新使用该形参通过=赋值。而应该是直接对该形参的属性或者集合元素进行操作。
3、None值和未定义
(1)在python中,不存在未定义的变量,会提示报错
(2)python中,如果一个变量的值或类型暂不确定,又或者想清除某变量的值,可以将其赋值为None
None的类型是NoneType
4、数据类型转换
分为主动转换和被动转换
4.1 主动转换
基于函数或类的初始化进行转换
(1)str可以将所有类型转换为字符串
- 对于基本数据类型,可以理解为直接就是字面量的str
- 对于浮点数转换时,末尾无效的0会被抹除
- 对非基础类型对象转换,输出<__main__.stu object at 0x0000027B1AE4BFD0>形式
- 如果list、dict、set、tuple中包含非基础类型对象,则在其它部分是直接输出,对包含的对象占位输出
print(str([stu(), 'abc', 3.200, None, True, 2e5]))
[<__main__.stu object at 0x0000019DDFB7BFD0>, 'abc', 3.2, None, True, 200000.0]
(2)int转换
- 可以将float转为int,是保留整数部分
print(int(5.4), int(5.5), int(5.6), int(-5.4), int(-5.5), int(-5.6))
5 5 5 -5 -5 -5
- 可以将str转为int,包括正负数,但是不能是浮点数。空字符串或其它情况会报错
print(int('5'), int('+5'), int('-5'))
5 5 -5
- 能将bool类型转换,True表示1,False表示0
(3)bool转换
print(bool(''), bool('abc'), bool(None), bool(5), bool(0), bool(-5), bool([]), bool(['aaa']))
False True False True False True False True
- 空字符串、None值、0值、空list为False
class Stu:
def __init__(self):
pass
print(bool(Stu()), bool(list()), bool(str()), bool(dict()), bool(int()), bool(bytes()))
# True False False False False False
- 对象一般会被转为True,但是基础数据类型以及部分builtins模块中的类创建会转为False
4.2 被动转换
(1)python中str只能与str相加,与其他类型相加会报错
(2)0+True的结果是1,int类型
5、type类