python中的变量不需要声明。但是每个变量在使用之前必须赋值
在python中变量没有类型的说法,我们所说的类型是变量在内存中对象的类型
在python3中常见的数据类型有
number(数字);string(字符串);bool(布尔类型);list(列表);tuple(元组);set(集合);dictionary(字典)
其中不可变数据类型:number(数字);string(字符串);tuple(元组)
可变数据类型:set(集合);dictionary(字典);list(列表)
不可变数据类型指的是一旦创建,其值就不能被改变的数据类型。这些类型的数据在内存中是只读的,任何修改操作都会在内存中新的位置创建新的数据(可以理解成创建一个新的内存空间)。
可变数据类型指的是可以在原地修改其值的数据类型。这些类型的数据在内存中是可写的,可以直接修改其内容而不需要创建新的数据。
number(数字)
python3支持int、float、bool、complex(复数)
在python3中,只有一种整数类型int表示长整型,没有python2中的Long
在整数类型中,十进制不需要引导符号;二进制引导符号是0b或0B(0到1);八进制引导符号是0o或0O(0到7);十六进制引导符号是0x或0X(0到9以及A到F)。输出的时候默认是十进制
也可以使用科学计数法
不确定的尾数问题(不只存在于python)
a=0.1 b=0.2 print(a+b)
最后的输出结果是0.30000000000000004
如果不想出现这种情况,就要使用函数round()
round(a+b,保留的小数位数)
复数
复数的一般形式是 a + bj,其中 a 是实部,b 是虚部,而 j 或者 J 是虚数单位,满足 j * j = -1。
使用real表示实部;imag来表示虚部
a=123+456j
print("实数部分",a.real)
print("虚数部分",a.imag)
可以用函数type()和isinstance()来判断数据类型
他们的区别在于type不会认为子类是一种父类类型;而isinstance会认为子类是一种父类类型
class Parent:passclass Child(Parent):passchild_instance = Child()
print(type(child_instance) == Parent)
print(isinstance(child_instance, Parent))
#所谓子类和父类就是指继承关系,子类是父类的一个子集,具有父类的所有属性和方法,但是也有自己独有的属性和方法。
type()直接返回数据类型,isinstance(变量,数据类型)判断true或flase
另外在python3中,bool是int的子类,true和flase可以和数字相加,true=1、flase=0
也可以使用del删除一些对象
del的语法是:del 变量名1,变量名2……
创建一个变量后,使用del删除再次使用这个变量会产生错误
string(字符串)
python中的字符串使用单引号或者双引号括起来,可以使用反斜杠转义特殊字符
使用三引号定义多行字符串
a='''
123
456
789'''
a2="""
123
456
789"""
print(a)
print("----------------")
print(a2)
#三个单引号和三个双引号是没有区别的
字符串的索引值从做到右0开始n-1结束,末尾从-1开始-n结束
n是指字符串的长度
a="hello world"
b=0
c=-2
print(a[b]) # 输出第一个字符
print(a[::2])# 输出每隔两个字符
print(a[::-1])# 输出反向输出
print(a[::c])#反向输出每隔2个字符
print(a[::])#输出所有字符
print(a[:-1:])#输出除最后一个字符外的所有字符
print(a[b:c])# 输出第一个到倒数第三个字符
print(a[1::])#输出除第一个字符外的所有字符
#在字符串的切片中,list[start:end:step],start表示切片开始的位置,end表示切片结束的位置,step表示切片的步长,如果step为负数,则表示逆向切片。
#输出的字符串包括start位置的字符,但不包括end位置的字符。
python使用反斜杠(\)转义特殊字符,如果不想发生转义,在字符串前面添加一个r,表示原始字符串
print("hellow\nworld")
print(r"hello\nworld")
转义字符 | 说明 |
\n | 换行符,可以同时使用多个 |
\t | 水平制表位,用于跳到下一个制表位,一个制表符占据八个字符 |
\\ | 反斜杠 |
\' | 单引号 |
\" | 双引号 |
a="abc\tdefghijk" #一个制表符占据八个,一个字母占据一个 8-3=5 所以五个空字符
b="abcdefghijk"
print(a)
print(b)
操作符 | 描述说明 |
+ | 将两个字符串连接起来 |
x in s | 如果x是s的字串,结果为true负责是false |
x*s | 复制x次字符串s;复制s次字符串x |
布尔类型
布尔类型只有True和False两个值,其中True表示整数1;False表示整数0
python中一切皆对象,而一切对象都有以一个布尔值
可以使用内置的函数bool()测试布尔值
print(bool(5))
print(bool(0))
print(bool("hello world"))
print(bool(""))
print(bool(None))
数值中的非零值表示True;零(0.0)表示False
字符值中非空字符表示True;空字符表示False
由上可知空序列(空字符串、孔元组、空列表、空字典、空集合)以及None都表示False,当bool()返回值是False或len()返回值为零时布尔值同样表示False
数据类型之间的转换
数据类型的转换分为两种分别时隐式转换和显式转换
隐式转换就是通过运算直接转换
a=10
b=3
z=a/b
print(z)
print("z的数据类型时",type(z))
在执行除法运算时将整数int隐式转换成浮点数float
而显式转换则需要用到函数
函数 | 描述说明 |
int | 转换成整数类型 |
float | 转换成浮点数类型 |
str | 转换成字符串 |
chr | 将整数转换成对应Unicode表中的字符 |
ord | 将字符转换成对应Unicode表中的整数 |
hex | 转换成十六进制字符串 |
oct | 转换成八进制字符串 |
bin | 转换成二进制字符串 |
将float类型转换成int类型,只保留整数部分
也可以将str类型转换成int类型,但是只能是整数十进制,负责会报错
print(int('12'),type(int('12')))
print(int('12a'))# ValueError: invalid literal for int() with base 10: '12a' a并不是一个十进制数
print(int('3.14')# ValueError: invalid literal for int() with base 10: '3.14' 3.14不是一个整数
str类型转换成float类型,可以是整数,但必须是十进制
print(float('3.14'))
print(float('2'))
print(float('3.14abc'))
chr()函数和ord()函数是一一对应的
print(ord('杰')) #‘杰’的unicode表中的编码
print(chr(26480)) #unicode表中的编码26480对应的字符