1、解释性语言,会带来一个缺点,就是每一次更新都会比较慢,没有编译的过程,但事实应用起来,感觉不到他的慢。注:java是半编译半解释型语言。
2、可移植,拷贝.py的文件就可以了
3、python2和python3的区别:
(1)print函数:(Python3中print为一个函数,必须用括号括起来;Python2中print为class)
Python 2
print 'Hello, World!'
print('Hello, World!')
print "text", ; print 'print text on the same line'
run result:
Hello, World!
Hello, World!
text print text on the same line
Python 3
print('Hello, World!')
print("some text,", end="")
print(' print text on the same line')
run result:
Hello, World!
some text, print text on the same line
(2)通过input()解析用户的输入:(Python 3中input得到的为string;Python 2的input的到的为int型,Python 2的raw_input得到的为string类型)统一一下:Python 3中用input,Python 2中用row_input,都输入为string
(3)整除:(没有太大影响)(Python3中/表示真除,%表示取余,//表示地板除(结果取整);Python2中/表示根据除数被除数小数点位得到结果,//同样表示地板除)统一一下:Python3中/表示真除,%表示取余,//结果取整;Python2中带上小数点/表示真除,%表示取余,//结果取整
(4)xrange模块:
在 Python 3 中,range() 是像 xrange() 那样实现以至于一个专门的 xrange() 函数都不再存在(在 Python 3 中xrange() 会抛出命名异常)。
在 Python 2 中 xrange() 创建迭代对象的用法是非常流行的。比如: for 循环或者是列表/集合/字典推导式。
这个表现十分像生成器(比如。“惰性求值”)。但是这个 xrange-iterable 是无穷的,意味着你可以无限遍历。
由于它的惰性求值,如果你不得仅仅不遍历它一次,xrange() 函数 比 range() 更快(比如 for 循环)。尽管如此,对比迭代一次,不建议你重复迭代多次,因为生成器每次都从头开始。
原 :range( 0, 4 )结果 是 列表 [0,1,2,3 ]
改为:list( range(0,4) )
原 :xrange( 0, 4 )适用于 for 循环的变量控制
改为:range(0,4)
(5)字符串
原:字符串以 8-bit 字符串存储
改为:字符串以 16-bit Unicode 字符串存储
(6)try except 语句的变化
原: try:
......
except Exception, e :
......
改为
try:
......
except Exception as e :
......
(7)打开文件
原:file( ..... )
或 open(.....)
改为:
只能用 open(.....)
(8)bytes 数据类型
bytes 可以看成是“字节数组”对象,每个元素是 8-bit 的字节,取值范围 0~255。
由于在 python 3.0中字符串以 unicode 编码存储,当写入二进制文件时,字符串无法直接写入(或读取),必须以某种方式的编码为字节序列后,方可写入。
(一)字符串编码(encode) 为 bytes
例: s = "张三abc12"
b = s.encode( 编码方式) # b 就是 bytes 类型的数据
# 常用的编码方式为 : "uft-16" , "utf-8", "gbk", "gb2312", "ascii" , "latin1" 等
# 注 : 当字符串不能编码为指定的“编码方式”时,会引发异常
(二) bytes 解码(decode)为字符串
s = "张三abc12"
b = s.encode( "gbk") # 字符串 s 编码为 gbk 格式的字节序列
s1 = b.decode("gbk") # 将字节序列 b以gbk格式 解码为字符串
# 说明,当字节序列不能以指定的编码格式解码时会引发异常
(三)使用方法举例
#coding=gbk
f = open("c:\\1234.txt", "wb")
s = "张三李四abcd1234"
# -------------------------------
# 在 python2.4 中我们可以这样写:
# f.write( s )
# 但在 python 3.0中会引发异常
# -------------------------------
b = s.encode("gbk")
f.write( b )
f.close()
input("?")
读取该文件的例子:
#coding=gbk
f = open("c:\\1234.txt", "rb")
f.seek(0,2) #定位至文件尾
n = f.tell() #读取文件的字节数
f.seek(0,0) #重新定位至文件开始处
b = f.read( n )
# ------------------------------
# 在 python 2.4 中 b 是字符串类型
# 要 python 3.0 中 b 是 bytes 类型
# 因此需要按指定的编码方式确码
# ------------------------------
s = b.decode("gbk")
print ( s )
# ------------------------------
# 在 python 2.4 中 可以写作 print s 或 print ( s )
# 要 python 3.0 中 必须写作 print ( s )
# ------------------------------
f.close()
input("?")
运行后应显示:
张三李四abcd1234
(四) bytes序列,一但形成,其内容是不可变的
例:
s="ABCD"
b=s.encode("gbk")
print b[0] # 显示 65
b[0] = 66
# 执行该句,出现异常: 'bytes' object does not support item assignment
(9)chr( K ) 与 ord( c )
python 2.4.2以前
chr( K ) 将编码K 转为字符,K的范围是 0 ~ 255
ord( c ) 取单个字符的编码, 返回值的范围: 0 ~ 255
python 3.0
chr( K ) 将编码K 转为字符,K的范围是 0 ~ 65535
ord( c ) 取单个字符的编码, 返回值的范围: 0 ~ 65535
(10)字节数组对象 --- 新增
(一) 初始化
a = bytearray( 10 )
# a 是一个由十个字节组成的数组,其每个元素是一个字节,类型借用 int
# 此时,每个元素初始值为 0
(二) 字节数组 是可变的
a = bytearray( 10 )
a[0] = 25
# 可以用赋值语句更改其元素,但所赋的值必须在 0 ~ 255 之间
(三) 字节数组的切片仍是字节数组
(四) 字符串转化为字节数组
#coding=gbk
s ="你好"
b = s.encode( "gbk") # 先将字符串按某种“GBK”编码方式转化为 bytes
c = bytearray( b ) #再将 bytes 转化为 字节数组
也可以写作
c = bytearray( "你好", "gbk")
(五) 字节数组转化为字符串
c = bytearray( 4 )
c[0] = 65 ; c[1]=66; c[2]= 67; c[3]= 68
s = c.decode( "gbk" )
print ( s )
# 应显示: ABCD
(六) 字节数组可用于写入文本文件
#coding=gbk
f = open("c:\\1234.txt", "wb")
s = "张三李四abcd1234"
# -------------------------------
# 在 python2.4 中我们可以这样写:
# f.write( s )
# 但在 python 3.0中会引发异常
# -------------------------------
b = s.encode("gbk")
f.write( b )
c=bytearray( "王五","gbk")
f.write( c )
f.close()
input("?")
---------------------
这部分是来自CSDN的作者刺客五六柒的文章,我看总结得很详细,就贴了一部分过来
原文:https://blog.csdn.net/qq_39521554/article/details/80855086
4、python标识符
标识符只有数字,字母,下划线;但是命名不能以数字开头;并且严格区分大小写;
以下划线开头的是有特殊意义的,以单下划线开头的代表不能直接访问的类和属性,需通过类的接口进行访问,不能用 from xxx import * 导入;
以双下划线开头的代表类的私有成员;
以双下划线结尾的代表python里特殊方法专用的标识,如__init__()代表类的构造函数;
5、python允许同一行显示多条语句,用分号隔开。
6、python的保留字符
keyword.kwlist = ['False', 'None', 'True', 'and', 'as', 'assert', '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']
7、命名方法
驼峰式命名:firstName lastName
Pascal命名:FirstName LastName
全大写命名:FIRSTNAME LASTNAME
全小写命名:firstname lastname
下划线命名:first_name last_name
8、在python中,int并不是保留字,理论上可以作为变量名,但是可能会产生如下错误:
代码:int = 1;type(1) == int;
输出:False
9、多行语句
可以用斜杠(\)将一行语句分为多行显示,但是语句中包含[],{}或()时,不需要连接符
10、数字
复数:复数由实数部分和虚数部分构成,可以用 a+bj,或者 complex(a,b) 表示 ,a和b均为浮点型
布尔值:在Python 2中是没有布尔型的,它用数值 0 表示 False,用 1 表示 True ,在Python 3中,把 True 和 False 定义成了关键字,它们的值还是0和1,它们可以和数字相加。可以使用bool()函数来检测某值的布尔值。
布尔值为False的:0 ,0.0 ,"" ,() ,[] ,{} ,None
常量:在python中通常用全部大写的变量名表示常量:PI = 3.14159265359
11、表达式
很多种表达式。
Q:已有b = 2,请问此时想将a赋值为2以下哪个最快?(1) a = 2; (2) a = b;
A:(2)更快。因为如果直接将a赋值为2,那么将会需要在堆中重新创建数字2的空间,再将栈中的a指向数字2,而若采用(2)中的办法,则所有操作都可以在栈区完成,速度更快。