1.python版本间的差异:
2.x与3.x版本对比
version | 2.x | 3.x |
print | print " "或者print()打印都可以正常输出 | 只能print()这种形式打印,否则会出现 SyntaxError |
input raw_inut | input:输出原生的数据类型,输入什么类型的值,就输出什么类型 raw_input:全部以字符串形式输出 | 3.x取消了raw_input方法,只能使用input() 方式提示输入字符串, 该方法和2.x版本的raw_input() 如果想要实现与2.x input()输出原生数据类型的值, 可以使用eval(input()) |
class | 2.x支持新式类,和经典类,使用新式类时,类继承顺序会影响最终继承的结果 | 必须使用新式类,解决了类间继承顺序问题 |
/ | 例如:1/2,2.x输出的值为0 | 例如:1/2 3.x输出的值为0.5 |
2.python数据类型
int 整型,如1,123,1234,-1,-123...,范围在-2**31~2**31-1之间,取决于操作系统,不会小于这个范围。
float 浮点型,如1.1,1.12,-1.1,-1.12...
str 字符串,如'hello','123','abc'...字符串需要使用单引号或者双引号引起来。
bool 布尔类型,只有两个值,真:True,假:False,任何非零的数据类型,结果都为真,结果为0时,则为False。
long 这个类型只存在2.x版本,取值范围无限大,取决于可用的虚拟内存。
complex 复数,如3.12j,2.45e-6j...
元组(tuple) 如(‘1’,‘abc’,'hello')。
列表(list) 如['a','abc','python']。
字典(dict) 如{'name':'tom', 'age':'20', 'job':'IT'}。
3.python编码
python 2.x版本默认string字符编码,1个字符只能存8bit,可以使用内置函数,chr()和ord()进行字符转换。
python 3.x版本默认使用unicode编码格式,可以使用内置函数unichr()和ord()进行字符转换。
4.python命名规范
python变量名(标识符)只能以字母或下划线开头,且不能包含特殊字符,注意python保留关键字不能当作变量名,这样等于重写python的内置方法,可能会影响其他方法的调用,具体python保留字,见4.1小节内容。
为了书写规范,建议变量名使用统一的风格书写,例如:驼峰是 TestLoginSucess 或者test_login_success。
单个前导下划线开头的标识符,意味着约定为私有的。
两个前导下划线开头的标识符,表示强烈专用的标识符。
如果标识符还有两个下划线结束,则该标识符是语言的特殊名称。
另外需要说明的是Python是动态预先,也即是说在定义变量的时候不用指定变量的的数据类型,Python会在个变量赋值的时候自动改变变量的数据类型。
4.1python保留字
#通过导入keyword模块,我们可以查看当前python保留了哪些关键字
import keyword
#查看python保留关键字
keyword.kwlist
#2.x输出['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
#3.x输出['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']
#注意,3.x新增了['False','None','True','nonlocal']同时去除了2.x ['exec']的关键字,大家在命名规范时,应该遵循3.x的关键字,便于向后兼容
#如果不确定该变量命名是否为关键字,也可以通过下面这种方法,检查是否为关键字
keyword.iskeyword('name')
#返回False,则说明该变量不是系统保留关键字,即可用
View Code
5.python注释
python有两种注释方式,一种是单行注释,在语句前加#符号,也可以使用多行注释,使用连续的三个单引号在需要注释的内容范围两侧添加,也可以使用连续的三个双引号。
例:
'''
单引号注释
'''
"""
双引号注释
"""
6.python的语法
python以简洁著称,摒弃了其他如c的{}花括号书写方式,以及未来追求语言的可读性,强制要求语法缩进,同一个语句块的代码缩进必须相同,负责会出现缩进错误IndentationError,如果想一行写多条语句,可以使用分好;隔开
7.python运算符
7.1算术运算符
算术运算符
运算符 | 描述 | 示例 |
+ | 加法 | >>> 14 - 5 |
- | 减法 |
|
* | 乘法 |
|
/ | 除法 |
|
% | 取模,即两个的数商的余数部分 |
|
** | 幂运算 |
|
// | 整除,返回两个数的商的整数部分 |
|
7.2比较运算符:比较运算符不局限于数字,字符串、列表等都可以
比较运算符
运算符 | 描述 | 示例 |
== | 判断两个对象是否相等(相等返回True,不相等返回False) |
|
!= | 判断连个对象是否不相等(与==相反,相等返回False,不相等返回True) |
|
<> | 判断连个对象是否不相等(同上,但不建议使用) | |
> | 判断第一对象是否大于第二个对象,大于返回True,不大于(包括等于)返回Fasle |
|
< | 判断第一对象是否小于第二个对象,小于返回True,不小于(包括等于)返回Fasle |
|
>= | 判断第一个对象是否大于等于第二个对象,大于等于则返回True,否则返回False |
|
<= | 判断第一个对象是否小于等于第二个对象,小于等于则返回True,否则返回False |
|
7.3赋值运算符:进行赋值运算
赋值运算符
运算符 | 描述 | 示例 |
= | 赋值 | a = c |
+= | 自加赋值 a += 1等价于 a = a + 1 | a += 1 |
-= | 自减赋值 a -= 1等价于 a = a - 1 | a -= 1 |
*= | 自乘赋值 a *= 1等价于 a = a * 1 | a *= 1 |
/= | 自除赋值 a /= 1等价于 a = a / 1 | a /= 1 |
%= | 自取模赋值 a %= 1等价于 a = a % 1 | a %= 1 |
**= | 自求幂赋值 a **= 1等价于 a = a ** 1 | a**= 1 |
//= | 自整除赋值 a //= 1等价于 a = a // 1 | a //= 1 |
7.4位运算符:按二进制位进行逻辑计算
位运算符
运算符 | 描述 | 示例 |
& | 按位与 |
|
| | 按位或 |
|
^ | 异或 |
|
<< | 左移 |
|
>> | 右移 |
|
8.python的数据类型操作
8.1变量和常量
变量是用来存储程序运行期间需要临时保存可以不断改变的数据的标识符,python有自身的内存回收机制,所以在开发过程中不用考虑变量的销毁等。
python和其他静态语言如C等不同的是,python的变量在赋值的时候解释器现在内存中创建数据对象,然后再创建变量,并把变量指向之前创建的数据对象。有点像C语言的指针,所以也有人说python虽然没有指针的概念,但一切皆指针
8.2变量的赋值操作
a = 2 #给a变量赋值为2
b = a #将变量a 的值赋给变量b,相当于是将a指向的内存空间3同时指向了b,此时b也等于3
a = 5 #给a变量赋值为5,此时由于之前的a已经被赋予一次值,python解释器会将a指向的内存空间改为指向5
print(a,b)
(5,2)
#此时打印输出为5,2,因为虽然b=a,且a的值被改变了,但是b=a仅仅只是将b指向了a指向的内存地址,并不是真正意义上的指向a,a的值改变,仅仅是改变a指向的内存地址,当多个变量指向同一个地址空间时,python自身的内存回收机制,会在这块内存空间做一个标记,有多少个人引用了这块内存空间,就在+多少个1,直到引用为0,此时python解释器会将该内存空间收回,这也是有别于其他开发语言的最大特点之一,不需要关注内存的回收,
View Code
#当想查看当前的两个变量是否指向同一个内存地址时,可以使用id()方法
a = 2
print(id(a))
#打印结果为 140723441682448
b = a
print(id(b))
#打印结果为 140723441682448
#可见,a和b指向的都是同一块地址空间,注:以上两个值与使用的平台有关,不一定都是一样的数值,但是这两个数值一定是相等的
a = 5
print(id(a))
#打印结果为 140723441682376
print(id(b))
#打印结果为 140723441682448
#通过观察两个变量的指针变化,可以发现,a值的改变并不会影响到已经被赋值的b
View Code