(二)Python语法基础(下)
接上一篇点击链接即可跳转
6.数据类型
生活中也经常遇到各种各样的数据,比如整数、小数、文本这些都是数据。
6.1常用数据类型
下表列出了Python常用的一些数据类型。
数据类型 | 类型名称 | 示例 | |
数字类型 | 整数 | int | 能表示的最大值受限于系统内存,数字过大建议使用字符串保存,除了十进制整数,还有八进制、二进制、十六进制 |
浮点数 | float | 小数:0.0, 2.343232 , -3.555 | |
复数 | complex | 实部和虚部:1+2j | |
布尔类型 | bool | True真、False假,配合7.1的逻辑运算符看 | |
字符串类型 | str | 序列不可变类型,带成对的英文单、双、三引号的数据 '3.1415' "hah" ''(空字符串) 'c' | |
元组类型 | tuple | 序列不可变类型:(5,'haha',7.8,5)、()空元组 | |
列表类型 | list | 序列可变类型:[5,'haha',7.8,5] [ ]空列表 | |
集合类型 | set | 可变元素唯一无序类型:{5,'haha',7.8} | |
字典类型 | dict | 可变无序键唯一类型:{5:'haha',6:'jike'} {}空字典 | |
空类型 | NoneType | 只有一个取值None |
- 元素:元组、列表、集合、字典里面可能有0个或多个元素,元素与元素之间以逗号隔开
- 序列类型:以有序的整数作为索引的有限序列,索引从0开始,依次为0,1,2....,所以如果是序列类型,那他的元素一定是有序的,可以通过索引访问元素。
- 可变类型:定义完之后,可以对里面的元素进行增删改
- 不可变类型:定义完之后,不可以对里面的元素进行增删改
- 元素唯一无序:里面的元素是独一无二的,且不具备序列类型的特征,即元素没有顺序,不能用索引访问元素。
- 键唯一:字典的元素由键:值构成,字典的键具有唯一性,不可重复。
代码示例如下:
a=True #这是一个布尔类型的变量
print(a)str0='' #这是一个空字符串
str1='hello' #这是一个字符串lst2=[] #这是一个空列表
lst3=list() #这也是一个空列表
lst1 = [1, 2, 'apple'] # 这是一个列表
print(lst1)
print(lst1[2]) #根据索引访问列表元素,索引为2,表示第三个元素tuple1 = (1, 2, 'apple') # 这是一个元组
tuple2 = () # 这是一个空元组set1 = {'apple', 'orange', 1} # 这是一个集合
set2 = set() # 这是一个空集合
set3 = {} # 这不是一个空集合,是一个字典,不信你用type(set3)打印一下这个变量的类型看看dict1 = {"name": "张三", "age": 18} # 这是一个字典
dict2 = {} # 这是一个空字典
dict3 = dict() # 这是一个空字典
6.2数据类型转换
Python内置了一系列可强制转换数据类型的函数,使用这些函数可将目标数据转换为指定的类型,比如用于转换数字类型的函数有int()、float()。
6.1里面有个花里花哨的表格,看类型名称那一列,当你想将一些类型1的数据转换为类型2的数据时,就可以用类型2名称(原数据/变量)将原数据或变量进行转换。
num_one = 1.5
print(int(num_one)) # 将浮点型数据转换为整型数据,只保留整数部分
num_two = 5
print(float(num_two)) # 将整型数据转换为浮点型数据words_one = '10.01'
print(float(words_one)) # 将字符串类型的数据转换为浮点型数据
words_two = '10'
print(int(words_two)) # 将字符串类型的数据转换为整型数据str1='hello'
lst1 = list(str1)
print(lst1) #将字符串类型的数据转换为列表,结果['h', 'e', 'l', 'l', 'o']set1 = set(lst1) #将列表转换集合,集合具有唯一性,所以转换后的集合会将原列表元素进行去重
print(set1) #结果{'h', 'e', 'l', 'o'},元素也无序了(只是表面看着顺序没变而已)print(list(set1)) #结果['h', 'e', 'l', 'o'],元素有顺序了
但是这种转换不是随意妄为的。
比如当字符串'10'里面的内容确实为一个数字时才可以强制转化为数字类型
若字符串为'abc',里面的内容与数字根本不搭边,就不能转换为数字类型
7.运算符与表达式
在python里,运算符是可以用来对变量或数据进行算术、逻辑等多种运算的符号,参与运算的变量或数据叫操作数。
- 如果一个运算符需要1个操作数,这个运算符就叫做单目运算符,比如逻辑非
- 需要2个操作数,这个运算符就叫做双目运算符,比如加法运算,需要两个加数
- 需要3个操作数,这个运算符就叫做三目运算符
7.1运算符
7.1.1算术运算符
Python中的算术运算符既支持对相同类型的数值进行运算,也支持对不同类型的数值进行混合运算。在进行混合运算时Python会强制将数值的类型进行类型转换,类型转换遵循如下原则:
(1)整型与浮点型进行混合运算时,将整型转化为浮点型。
(2)其他类型与复数运算时,将其他类型转换为复数类型。
# 算术运算符
a=2
b=8
#输出函数会按序输出括号内的内容,字符串内容会原样输出
print("a+b=",a+b) #输出:a+b= 10
print("a-b=",a-b) #输出:a-b= -6
print("a*b=",a*b) #乘法,输出:a*b= 16
print("a/b=",a/b) #除法,输出:a/b= 0.25
print("a//b=",a//b) #整除,商取整,输出:a//b= 0
print("a%b=",a%b) #取余,输出:a%b= 2
print("a**b=",a**b) #a的b次方,输出:a**b= 256
7.1.2赋值运算符
赋值运算符用于将一个表达式或值赋值给变量。最简单的赋值运算符是=,当使用赋值运算符=同时为多个变量赋不同的值时,赋值运算符=左右两边的变量和值的数量必须保持一致,否则运行后会出现错误。
# 赋值运算符(带一个等号的),赋值运算要从右往左看
c = d = f = 1 #把1赋给f,d,c
a1 , a2 = 3 , 5 #把3,5分别赋给a1,a2
print('c,d,f,a1,a2:',c,d,f,a1,a2) #运行结果c,d,f,a1,a2: 1 1 1 3 5
a1=a1+1 #与a1+=1等价,从右往左看,把a1+1赋值给a1
print(a1) #a1结果是2了
a1=a1*2 #a1=a1/2,a1=a1//2,a1=a1**1
7.1.3比较运算符
比较运算符也叫关系运算符,用于比较两边操作数之间的关系。Python中的比较运算符包括==、!=、>、<、>=、<=,它们通常用于布尔测试,测试的结果只能是True或False。
#比较运算符(判断大小、相等,如>、<、>=、<=、==、!=),结果是布尔类型的值
print(3<4) #3<4成立,返回结果True(真)
print(3<=4) #3<=4成立,返回结果True(真)
print(3>4) #3>4不成立,返回结果False(假)
print(3>=4) #3>=4不成立,返回结果False(假)
print(3==4) #3等于4不成立,返回结果False(假)
print(3!=4) #3等于4成立,返回结果True(真)print('------------')
print(0==0.0) #True
print(0=='0') #False
7.1.4逻辑运算符
逻辑运算符可以把多个条件按照逻辑进行连接,变成更复杂的条件。Python中分别使用or、and、not这三个关键字作为逻辑运算符,其中or与and为双目运算符,用于对两个操作数进行逻辑或、逻辑与运算;not为单目运算符,用于对一个操作数进行逻辑非运算。
#逻辑运算符(与and 或or 非not)
aa=3
bb=4
cc=1
print(aa and bb) #4,相同布尔值时,假返左真返右,不同布尔值时返布尔为假的操作数
print(aa or bb) #3,左真返左,其余返右
print(not aa) #False
print(aa>=bb and bb>cc) #False(左右两侧条件都为真结果才为真)
print(aa>=bb or bb>cc) #True(左右两侧条件都为假结果才为假)
print(not aa>=bb) #True,逻辑运算符优先级低于比较运算符,所以先进行比较,比较完成之后再进行非运算(真变假,假变真)
7.1.5成员运算符
成员运算符用于检测给定数据是否存在于字符串、列表、元组、集合、字典等序列中,关于它们的介绍如下。
in:如果指定数据在序列中返回True,否则返回False。
not in:如果指定数据不在序列中返回True,否则返回False。
#成员运算符in、not in,结果是布尔类型的值
x = 'Python'
y = 'P'
#检查子串在不在字符串里面,
print(y in x) #True
print(y not in x) #False
7.1.6位运算符
位运算符用于对操作数的二进制位进行逻辑运算,操作数必须为整数。Python中一共有六个位运算符,分别是<<、>>、&、|、^、~。(这一部分可以暂时不学,如果计算机专业已学过计算机导论或计算机组成原理应当是更容易看懂的,非计算机专业可以不学)
运算符 | 说明 |
<< | 操作数按位左移 |
>> | 操作数按位右移 |
& | 左操作数与右操作数执行按位与运算 |
| | 左操作数与右操作数执行按位或运算 |
^ | 左操作数与右操作数执行按位异或运算 |
~ | 操作数按位取反 |
按位左移是指将二进制形式操作数的所有位向左移动指定的位数,移出位被丢弃,移入位补0。以十进制的整数9为例,当执行9<<4运算时,首先会将9自动转换为二进制数00001001,然后将二进制数00001001的所有位向左移动4位。
按位右移是指将二进制形式操作数的所有位向右移动指定的位数,移出位被丢弃,移入位补0。以十进制的整数8为例,当执行8>>2运算时,首先会将8自动转换为二进制数00001000,然后将二进制数00001000的所有位向右移动2位。
按位与是指将参与运算的两个操作数对应的二进制位进行逻辑与操作。当对应的两个二进制位均为1时,结果位就为1,否则为0。以十进制的整数9和3为例,当执行9&3运算时,首先会将9和3自动转换为二进制数00001001和00000011,然后将二进制数00001001和00000011的对应位进行逻辑与操作。
按位或是指将参与运算的两个操作数对应的二进制位进行逻辑或操作。若对应的两个二进制位有一个为1时,结果位就为1,否则为0。若参与运算的操作数为负数,则参与运算的两个操作数均以补码出现
按位异或是指将参与运算的两个操作数对应的二进制位进行异或操作。当对应的两个二进制位中有一个为1,另一个为0时,结果位为1,否则结果位为0。
按位取反是指将二进制的每一位进行取反,0取反为1,1取反为0。按位取反操作首先会获取这个数的补码,然后对补码进行取反,最后将取反结果转换为原码。 例如,对9进行按位取反的运算过程如下。
① 获取补码。9的二进制数是00001001,因为9属于正数,计算机中正数的原码、反码和补码相等,所以9的补码仍然为00001001。
② 取反操作。对9的补码00001001进行取反操作,即0变为1,1变为0,取反后结果为11110110。
③ 转换原码。将11110110转换为原码时,转换规则为符号位不变,其他位取反,末位加一,经过一系列操作后会得到原码。因此,11110110再次取反后的结果为10001001,之后末位加一后得到的结果为10001010,即-10。
Python支持使用多个不同的运算符连接简单表达式实现相对复杂的功能,为了避免含有多个运算符的表达式出现歧义,Python为每种运算符都设定了优先级。Python中运算符的优先级从高到低如表所示,优先级高的运算符先进行运算。
运算符 | 说明 |
** | 幂运算符 |
*、/、%、// | 乘法运算符、除法运算符、取模运算符、整除运算符 |
+、- | 加法运算符、减法运算符 |
>>、<< | 按位右移、按位左移 |
& | 按位与 |
^、| | 按位异或、按位或 |
==、!=、>=、>、<=、< | 比较运算符 |
in、notin | 成员运算符 |
not、and、or | 逻辑运算符 |
+=,-=,*=,/=,//=,%=,**= | 复合赋值运算符 |
= | 赋值运算符 |
7.2表达式
表达式通常指使用运算符和操作数组合在一起形成值的计算过程。Python中常见的算术表达式(加、减、乘、除、取模、指数)、比较表达式(等于、不等于、大于、小于等)和逻辑表达式(与、或、非)
# 简单的算术、逻辑、比较表达式示例# 算术表达式
a = 10 + 5 * 2
b = 20 / 4
c = 15 % 4 print("算术表达式结果:")
print(a)
print(b)
print(c)# 比较表达式
x = 10
y = 20print("比较表达式结果:")
print(x == y) # False
print(x < y) # True
print(x != y) # True# 逻辑表达式
p = True
q = Falseprint("逻辑表达式结果:")
print(p and q) # False
print(p or q) # True
print(not p) # False