Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型,一个变量可以通过赋值指向不同类型的对象
Python3 中有六个标准的数据类型:
Python3 的六个标准数据类型中:
string、list 和 tuple 都属于 sequence(序列)。
内置的 type() 和 isinstance() 函数可以用来查询变量所指的对象类型:
isinstance 和 type 的区别在于:type()不会认为子类是一种父类类型,isinstance()会认为子类是一种父类类型。
数字类型是不允许改变的。python中数字有四种类型:整数、布尔型、浮点数和复数。
Python允许在数字中间以_分隔,因此,写成10_000_000_000和10000000000是完全一样的。十六进制数也可以写成0xa1b2_c3d4。
Python的整数和浮点数都没有大小限制。
Python中的布尔值可以用and、or和not运算。
有时候,我们需要对数据内置的类型进行转换,数据类型的转换,你只需要将数据类型作为函数名即可。
int(x) 将x转换为一个整数。
float(x) 将x转换到一个浮点数。
complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。
complex(x, y) 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。x 和 y 是数字表达式。
python中的字符串有以下特点:
单行及多行字符串:
字符串截取及转义:
len()方法可以得到字符串的长度:
在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u。在Python3中,所有的字符串都是Unicode字符串。
在字符串中,我们可以用 % 占位符来代替变量输出格式化字符:
%运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。如果只有一个%?,括号可以省略。
其中,格式化整数和浮点数还可以指定是否补0和整数与小数的位数:
如果不确定应该用什么,可以直接用%s,它会把任何数据类型转换为字符串:
另外,可以用%%来表示一个%:
还可以使用字符串的format()方法来输出格式化的字符串,它会用传入的参数依次替换字符串内的占位符{0}、{1}、、
另外,还可以使用以f开头的字符串,称之为f-string。f-string 是 python3.6 之后版本添加的,称之为字面量格式化字符串,是新的格式化字符串的语法。它和普通字符串不同之处在于,字符串如果包含{xxx},就会以对应的变量替换。
f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去,实例如下:
上述代码中,{r}被变量r的值替换,{s:.2f}被变量s的值替换,并且:后面的.2f指定了格式化参数(即保留两位小数),因此,{s:.2f}的替换结果是19.62。
Python 内置的一种数据类型是列表 list,列表是写在方括号 [] 之间、用逗号分隔开的元素列表。
list是一种有序的集合,可以随时添加和删除其中的元素。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(所谓嵌套),因此 list 可以是一个二维数组,类似的还有三维、四维……数组。。
用len()函数可以获得list元素的个数,如果一个list中一个元素也没有,就是一个空的list,它的长度为0:
可以用 + 号和 * 号对列表进行操作,加号 + 是列表连接运算符,星号 * 是重复操作。如下实例:
和字符串一样,列表同样可以被索引和截取。列表截取的语法格式:变量[头下标:尾下标],不包含尾下标的元素。索引值以 0 为开始值,-1 为从末尾的开始位置。列表被截取后返回一个包含截取元素的新列表。
实例:
当索引超出了范围时,Python会报一个IndexError错误,所以,要确保索引不要越界,记得最后一个元素的索引是len(classmates) - 1。
与Python字符串不一样的是,列表中的元素是可以改变的。要把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
list是一个可变的有序表,所以,可以往list中追加元素到末尾:
也可以把元素插入到指定的位置,比如索引号为1的位置:
要删除list末尾的元素,用pop()方法,pop() 方法返回被移除的元素。
要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
另一种有序列表叫元组:tuple。元组(tuple)与列表类似,不同之处在于元组的元素不能修改,tuple一旦初始化就不能修改。当你定义一个tuple时,在定义的时候,tuple的元素就必须被确定下来。
元组写在小括号 () 里,元素之间用逗号隔开。元组与字符串类似,可以被索引且下标索引从0开始,-1 为从末尾开始的位置。也可以进行截取,同时也可以使用 + 号和 * 符号。我们可以把字符串看作一种特殊的元组。
示例:
tuple 中的元素不能修改,它也没有append()、insert()这样的方法。但如果tuple中的元素含有一些引用类型的值,比如 list ,那该 list 是可变的,但此时 tuple 并不违背定义后不可变的原则,因为只是 tuple 中的 list 发生了改变,但 tuple 指向 list 仍未发生改变。但不允许指向的 list 被替换成另一个 list。
元素中的元素不能修改,但是整个元组可以重新被赋值。所谓元组的不可变指的是元组所指向的内存中的内容不可变。重新赋值的元组就绑定到新的对象了,不是修改了原来的对象,所以是可以的。
构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则:
要定义一个只有1个元素的 tuple 不能直接写 tup2 = (20),此时定义的不是 tuple,而是将 20 赋值给了 tup2 这个变量。这是因为括号()既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义,因此,Python规定,这种情况下,按小括号进行计算,计算结果自然是1。所以,只有1个元素的tuple定义时必须加一个逗号,来消除歧义
集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。在set中,没有重复的值,重复元素在set中自动被过滤。set 不是有序的,打印出的顺序并不能代表它里面元素的排序。set 可以看成数学意义上的无序和无重复元素的集合。集合之间还可以进行集合运算(差集 -、并集 |、交集 &、^)。
可以使用大括号 { } 或者 set() 函数创建集合,使用 set() 函数时,括号里面需提供一个 list 作为输入参数:
实例:
set() 函数为 Python 的内置函数,其功能是将字符串、列表、元组、range 对象等可迭代对象转换成集合。该函数的语法格式如下所示,其中,iteration 就表示字符串、列表、元组、range 对象等数据。
代码示例:
注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
集合的原理和字典一样,所以,同样不可以放入可变对象,因为无法判断两个可变对象是否相等,也就无法保证set内部“不会有重复元素”。比如把 list 放入set 程序将会报错。
通过add(key)方法可以添加元素到set中,重复添加不会报错,但不会有效果:
通过remove(key)方法可以删除元素,但是元素如果不存在,该方法会报错。
Python内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。
字典是一种映射类型,字典用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。
在同一个字典中,键(key)必须是唯一的,并且必须是不可变的,所以可以用数字,字符串或元组充当,而用列表就不行。
不可变对象是常量,该对象的内容是不会发生改变的。对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。
创建及使用 dict 代码示例:
创建空字典使用 { }。
使用构造函数 dict() 可以直接从键值对序列中构建字典如下:
通过dict提供的get()方法可以返回指定键的值,如果该字典中不存在该键,则返回可以返回None,或者第二个参数指定的value:
可以通过in来判断key是否存在于字典中:
要删除一个key,用pop(key)方法,对应的value也会从dict中删除,该方法返回被删除的值: