python的基础,数据类型,运算
目录python 是一种面向对象的解释型编程语言。对于python来说,一切皆对象。
所以,在python中,定义变量时,无需声明数据类型。对于解释型语言,在执行时是逐行执行,读取一条,翻译一条,执行一条。
在python2.x版本中使用的是print语句。而在python3.x版本中,print函数代替了print语句
# 在python 2.x版本中,使用print语句 >>>print(3,4) (3,4) # 在python3.x版本中,使用的print函数 >>>print(3,4) 3 4
在python2.x版本中,使用的是ASCII编码。而在python3.x版本中,则默认使用的utf-8编码
python 2中,除法规则时整数相除的结果是一个整数,把小数部分完全忽略。浮点数除法,会保留小数点的部分,得到一个浮点数的结果。
# python2中的除法 >>>1/2 0 >>>1.0/2.0 0.5
python3 中,除法不再这么做。对于整数之间的相除,结果也会是浮点数
# python3中的除法 >>> 1/2 0.5
1)Python2中捕获异常的语法为except exc, var,Python3中捕获异常的语法为except exc as var,使用语法except (exc1, exc2) as var可以同时捕获多种类别的异常。 Python 2.6已经支持这两种语法。
2)在Python2时代,所有类型的对象都是可以被直接抛出的,在Python3时代,只有继承自BaseException的对象才可以被抛出。
3)Python2中触发异常可以用raise IOError, "file error"或raise IOError("file error")两种方式,Python3中触发异常只能用raise IOError("file error”)。
4)异常StandardError 被Python3废弃,统一使用Exception
5)在Python2时代,异常在代码中除了表示程序错误,还经常做一些普通控制结构应该做的事情,在Python3中可以看出,设计者让异常变的更加专一,只有在错误发生的情况才能去用异常捕获语句来处理。
Python3中八进制数必须写成0o777,原来的形式0777不能用了;二进制必须写成0b111。
新增了一个bin()函数用于将一个整数转换成二进制字串。 Python 2.6已经支持这两种语法。
在Python3中,表示八进制字面量的方式只有一种,就是0o1000。
# python2 >>> 0o1000 512 >>> 01000 512 # python3 >>> 0o1000 512 >>> 01000 File "<stdin>", line 1 01000 ^ SyntaxError: invalid token
Python2中不等于有两种写法 != 和 <>
Python3中去掉了<>, 只有!=一种写法
# python2 >>> 1!=2 True >>> 1<>2 True # python3中不支持<> >>> 1!=2 True >>>1<>2 File "<stdin>", line 1 1<>2 ^ SyntaxError: invalid syntax
python2 中有long类型。没有bytes类型
python3 中没哟long类型,只有int类型。新增了bytes类型。
(1)python会将源代码m.py 编译成字节码m.pyc
(2)把编译好的字节码转发到python虚拟机PVM中执行(一条一条的执行字节码的指令)
# python中使用#号进行单行注释,也可以跟在代码后面,对同行的后续内容进行注释 ''' python中可以使用三单引号,或者三双引号 对多行内容进行注释 '''
python中使用缩进和冒号:来区分代码块之间的层次。
在 Python 中,对于类定义、函数定义、流程控制语句、异常处理语句等,行尾的冒号和下一行的缩进,表示下一个代码块的开始,而缩进的结束则表示此代码块的结束。
通常情况下,4个空格长度为一个缩进量。
(1) 在该行末尾加上续行符 " \"(即,空格+\)
test='a' \ 'b' \ 'c' print(test) #输出结果为abc
(2) 加上括号,() {} []中不需要特别加换行符
我们可以根据Python会将圆括号、中括号和花括号中的行隐式连接起来的这个特点,将过长的语句换显示,并在语句外侧添加一对圆括号
test2=('a' 'b') print(test2) #输出结果为ab
(3) 使用三引号进行跨行输入
test3=''' ab cd ef ''' print(test3) #输出结果为 ab cd ef
变量的构成:
内存模型:
在python中,变量的类型实际是由变量的值定义的。
python中数值类型的有:
a=1 print(type(a)) b=1.5 print(type(b)) c=1+2j print(type(c)) d=True print(type(d)) #输出结果依次为 <class 'int'> # 整型 <class 'float'> # 浮点型 <class 'complex'> # 复数 <class 'bool'> # 布尔值型
python中非数值型的有:
a="abc" print(type(a)) #输出结果为: <class 'str'> # 字符串型
arr=[1,2,3,"abc"] print(type(arr)) tpl=(1,"abc",1.56) print(type(tpl)) dic={"name":"zhangsan","age":18} print(type(dic)) # 输出结果为 <class 'list'> # 列表 <class 'tuple'> # 元祖 <class 'dict'> # 字典
# 查看python中的关键字 import keyword print(keyword.kwlist) #输出结果 ['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
关于标识符的命名有以下建议:
转换前提: 类型间要可以相互转换,转换的内容能被接收.
(1)使用int, 将浮点型转换为整型,截取整数部分,小数部分被直接舍弃,没有四舍五入
result=int(1.9) print(type(result)) print(result) #输出结果: <class 'int'> #类型为整型 1 #结果,只截取了整数部分
(2) 使用str函数,将类型转换为 字符串类型
a=str(1.4) print(type(a)) print(a) #输出结果为: <class 'str'> 1.4
(3) 使用float 函数,将类型转换为浮点
a=float("1.4") print(type(a)) print(a) #输出结果为: <class 'float'> 1.4
注:如果想将字符串“1.4” 转换为整型,无法直接转换。需要先转换为浮点型,再转换为整型
(4) 常用的数据类型转换
函数 | 说明 |
---|---|
int(x [,base ]) | 将x转换为一个整数 |
long(x [,base ]) | 将x转换为一个长整数 |
float(x ) | 将x转换到一个浮点数 |
complex(real [,imag ]) | 创建一个复数 |
str(x ) | 将对象 x 转换为字符串 |
repr(x ) | 将对象 x 转换为表达式字符串 |
eval(str ) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s ) | 将序列 s 转换为一个元组 |
list(s ) | 将序列 s 转换为一个列表 |
chr(x ) | 将一个整数转换为一个字符 |
unichr(x ) | 将一个整数转换为Unicode字符 |
ord(x ) | 将一个字符转换为它的整数值 |
hex(x ) | 将一个整数转换为一个十六进制字符串 |
oct(x ) | 将一个整数转换为一个八进制字符串 |
运算符 | 相关说明 |
---|---|
+ | 加:两个数相加 |
- | 减:负数,或者一个数减去另一个数 |
* | 乘:两个数相乘或返回一个被重复若干次的字符串 |
/ | 除: a 除以b |
% | 取余: 返回除法的余数 |
** | 幂:返回a的b次幂 |
// | 取整除:返回商的整数部分 |
a=5 b=2 print(a+b) #加法运算 print(a-b) #减法运算 print(a*b) #乘法运算 print(a/b) #除法运算 print(a%b) #取余运算,a除以b,去余数 print(a**b) #幂运算,a的b次方 print(a//b) #取整除,a除以b,取商的整数部分 #输出结果为: 7 3 10 2.5 1 25 2
赋值运算符只有一个,即= , 它的作用是将等号右边的值赋给左边。
#多个变量赋同一个值 x=y=z=1 print(x,y,z) #输出结果为: 1 1 1 #将多个值赋给多个变量 a,b=3,4 print(a,b) #其输出结果为: 3 4
运算符 | 相关说明 | 实例 |
---|---|---|
+= | 加法赋值运算符 | c+=a等效于c=c+a |
-= | 减法赋值运算符 | c-=a 等效于 c=c-a |
*= | 乘法赋值运算符 | c*=a 等效于 c=c*a |
/= | 除法赋值运算符 | c/=a 等效于 c=c/a |
%= | 取模赋值运算符 | c%=a 等效于c=c%a |
**= | 幂赋值运算符 | c**=a等效于 c=c**a |
//= | 整除赋值运算符 | c//=a 等效于c=c//a |
a=5 b=2 c=6 a+=b # 等效于a=a+b print(a) c**=b # 等效于c=c**b print(c) #输出结果为 7 36
运算符 | 相关说明 |
---|---|
== | 检查两个操作的数的值是否想等 |
!= | 检查两个操作数的值是否不相等 |
> | 检查左边操作数的值是否大于右边操作数的值 |
< | 检查左边操作数的值是否小于右边操作数的值 |
>= | 检查左边操作数的值是否大于或者等于右边操作数的值 |
<= | 检查左边操作数的值是否小于或者等于右边操作数的值 |
a=5 b=6 print(a==b) # False print(a!=b) # True print(a<b) # True print(a<=b) # True print(a>b) # False print(a>=b) # False
运算符 | 逻辑表达式 | 描述 |
---|---|---|
and | x and y | 与。 表达式 x,y都为True,则结果为才为True |
or | x or y | 或。 表达式x, y 都为False,则结果才为False |
not | not x | 非。 若表达式x为True,则结果为False |
a=5 b=2 result1=a<=b # 次表达式,结果为False result2=a!=b # 此表达式,结果为True #输出表达式result1和 result2 的逻辑与结果 print(result1 and result2) #输出表达式 result1和result2 的逻辑或结果 print(result1 or result2) #输出表达式 result1 的逻辑非结果 print(not result1) #输出结果为: False True True
运算符 | 描述 | 示例 |
---|---|---|
in | 如果在指定的序列中找到值,则返回True,否则返回False | x在y序列中。x in y 返回True |
not in | 如果在指定的序列中未找到值,则返回True,否则返回False | x 不在 y序列中。 x not in y 返回True |
arr=[1,2,3] print(1 in arr) # 1 是否在 arr中 print(5 in arr) # 5 是否在 arr中 print(1 not in arr) # 1 是否不在arr中 print(5 not in arr) # 5 是否不在arr中 #输出结果为: True False False True
位运算,是建立在二进制的基础上
符号 | 描述 | 运算规则 |
---|---|---|
& | 与 | 两个位都为1时,结果才为1 |
| | 或 | 两个位都为0时,结果才为0 |
^ | 异或 | 两个位相同为0,相异为1 |
~ | 取反 | 0变1,1变0(注意,符号也要取反) |
<< | 左移 | 各二进位全部左移若干位,高位丢弃,低位补0 |
>> | 右移 | 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) |
a=7 print(a>>1) # 按位右移1位。 print(a<<1) # 按位左移1位。 #输出结果: 3 14 ''' 7的二进制写法为:0111 7右移一位,得到:0011 (移出位的丢弃,左边移出的空位补零),即为3 7左移一位,得到:1110 (高位丢弃,低位补零),即为 14 '''
按位与是指参与运算的两个数个对应的二进位进行“与”的操作。只有对应的两个二进位都是1时,结果位就为1,否则结果位为0
按位或是指参与运算的两个数个对应的二进位进行“或”的操作。只有对应的两个二进位不同时,结果位为1,否则为0
a=9 b=5 print(a&b) print(a|b) #输出结果为 1 13 ''' 1001 (9) 0101 (5) 按位”与“获得 0001 (1) 按位“或”获得 1101 (13) '''
按位异或是指参与运算的两个数对饮二进制位进行比较,如一个位为1,另一个位为0,则结果位为1,否则结果为0
a=9 b=5 print(a^b) #输出结果为: 12 ''' 1001 (9) 0101 (5) 按位异或 1100 (12) '''
按位取反,就是将二进位的每一位进行取反(符号也要取反)
0取反为1,1取反为0
补码是属于计算机三种机械数的一种,机械数有原码、反码、补码。
如果是正数,那么原码 = 反码 = 补码,正数的符号位为0(如 0 1001,这里的0就是符号位,负数类似);
如果是负数,那么反码就是把原码的每一位取反,也就是0变成1,1变成0;补码就是在反码的基础上,末位+1,负数的符号位为1。
负数的补码按原反补规则,即先变为反码,再把反码末位+1,获得补码
a=9 print(~9) #输出结果为 -10 ''' 1001 (9) 反码:0 1001 (第一个0为正数符号位) 补码: 0 1001 按位取反: 1 0110 (第一个1位负数符号位,此时变为负数) 对1 0110 进行补码,按照负数原反补码规则,先反码,再将反码末位+1,获得补码 先反码:1 1001 再反码末位+1获得补码: 1 1010 转为为十进制数: -10 ''' #总结: ~x=-(x+1)
运算符说明 | Python运算符 | 优先级 | 结合性 |
---|---|---|---|
小括号 | ( ) | 19 | 无 |
索引运算符 | x[i] 或 x[i1: i2 [:i3]] | 18 | 左 |
属性访问 | x.attribute | 17 | 左 |
乘方 | ** | 16 | 右 |
按位取反 | ~ | 15 | 右 |
符号运算符 | +(正号)、-(负号) | 14 | 右 |
乘除 | *、/、//、% | 13 | 左 |
加减 | +、- | 12 | 左 |
位移 | >>、<< | 11 | 左 |
按位与 | & | 10 | 右 |
按位异或 | ^ | 9 | 左 |
按位或 | | | 8 | 左 |
比较运算符 | ==、!=、>、>=、<、<= | 7 | 左 |
is 运算符 | is、is not | 6 | 左 |
in 运算符 | in、not in | 5 | 左 |
逻辑非 | not | 4 | 右 |
逻辑与 | and | 3 | 左 |
逻辑或 | or | 2 | 左 |
逗号运算符 | exp1, exp2 | 1 | 左 |