一.python版本间的差异:
1.1:2.x与3.x版本对比
version | 2.x | 3.x |
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 |
1.2:python数据类型
int 有符号整形,如:1,11,111,-1,-111 ... ,2.x范围在-2**31~2**31-1之间,取决于操作系统,不会小于这个范围
float 浮点型,如:1.11.1.111,-1.111 ...
str 字符串,如:'hello' , 'python' , '1' , 'string' ...,注意,字符串需要使用引号(' ')或者双引号("")引起来,
bool 布尔类型,只有两个值,真:True 假:False,任何非零的数据类型,结果都为真,当结果为int 0 时,则为False
long 这个类型只存在2.x版本,取值范围无限大,取决于可用的虚拟内存
complex 复数,如:3.14j,4.53e-7j ...
元组(tuple) 如 ('a','hello','python','1')
列表(list) 如 ['a','hello','python','1']
字典 (dict)如{'name':'zcy','age':25,'job','IT'}
1.3:python编码
python 2.x版本默认string字符编码,1个字符只能存8bit,可以使用内置函数,chr()和ord() 进行字符转换
python 3.x默认使用unicode编码格式,可以使用内置函数unichr()和ord()进行字符转换
1.4:python的命名规范
python变量名(标识符)只能以字母或下划线开头,且不能包含特殊字符,注意python保留关键字不能当作变量名,这样等于重写python的内置方法,可能会影响其他方法的调用,具体python保留字,见1.4.1小节内容
为了书写规范,建议变量名使用统一的风格书写,例如:驼峰式 SunOfBeach 或者 sun_of_beach
单个前导下划线开头的标识符,意味着约定为私有的
两个前导下划线开头的标识符,表示强烈专用的标识符
如果标识符还有两个下划线结束,则该标识符是语言的特殊名称
1.4.1:python保留字
#通过导入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,说明该变量名不是系统保留关键字,即,可用
1.5:python注释
python有两种方式注释,一种是单行注释,在语句前加#这个符号,,也可以使用多行注释,使用连续的三个单引号在需要注释的内容范围两侧添加,也可以使用连续的三个双引号。例如:
'''这里是
注释
'''
"""
这里也是
注释
"""
1.6:python的语法
python以简洁著称,摒弃了其他如c的{}花括号方式书写方式,以及为了追求语言的可读性,强制要求语法缩进,同一个语句快的代码缩紧必须相同,否则会出现缩进错误 IndentationError,如果想一行写多条语句,可以使用分号;隔开
1.7:python运算符
+ - * / % // | 加法,减法,乘法,除法,取模,地板除 |
>> << | 左按位移位,右按位移位 |
& ^ | | 按位与,按位异或,按位或 |
** | 指数幂运算 |
> >= == != < <= |
大于,大于等于 等于,不等于 小于,小于等于 |
= **= += -= *= /= %= //= |= &= >>= <<= |
等于,幂等于 加等于,减等于 乘等于,除等于 取模等于,地板除等于 按位或等于,按位与等于 按位右移等于,按位左移等于 |
is is not | 是真,非真 |
in not in | 在里面,不在里面 |
and or not | 且,或,非 |
~ | |
二.python的数据类型操作
2.1:变量赋值操作
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解释器会将该内存空间收回,这也是有别于其他开发语言的最大特点之一,不需要关注内存的回收,
查看代码
#当想查看当前的两个变量是否指向同一个内存地址时,可以使用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
2.2:元组(tuple)
#例如,定义一个元组
a = ('a','hello','python','')
#查看元组的内置方法
dir(a)
#将会输出一个列表形式的方法名称
# 2.x 输出['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] #3.x输出 ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] #元组提供了两个公有方法给我们使用
a.count('hello') #统计元组里面有多少个相同的元素'hello',很显然,这里只有1个,所以输出结果为 1 a.index('hello') #返回元素'hello'的索引位置,python的索引位置是从0开始的,所以这里的‘hello’元素的索引是1,而不是2. #元组的访问方式
a[1] #显示下标为1的元素,因为元组的下标是从0开始的,所以会显示元素'hello'
a[2] #这里会显示第python这个元素
a[0:1] #显示元素从位置0(包括0) 到1(不包括1),即显示'a'
a[0:2] #显示元素从位置0(包括0)到2(不包括2),即显示('a','hello')
a[-1] #显示倒数第一个元素,即'1'
a[-2] #显示倒数第二个元素,即'python'
a[:-2] #显示元素从位置0(包括),到位置倒数第二个(不包括倒数第二个),之前的元素都显示出来,即('a','hello')
a[-2:] #显示元素从位置倒数第二个(包括)到最后一个(包括),即('python','1')
a[0:4:2] #该方式先将前面的[0:4]条件先筛选出来,然后再进行后面的:2,即每隔一位取一个值,所以这里将显示('a','python')
2.3:列表(list)
列表与元组及其相似,不同之处在于,元组的值是固定,不可变的,而列表的值可以通过其自身的公有方法改变的
#定义一个列表
b = ['a','hello','python','']
#查看列表的内置方法
dir(b)
# 2.x 输出 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] # 3.x输出['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] b.append('tail') #在列表末尾追加一个元素'tail'
b.count('python') #统计列表中有多少个相同的元素'python'
b.extend('how') #在列表后面追加三个字符串'h','o','w'
b.index('python') #显示元素‘python’的索引,这里将输出2
b.insert(1,'niubi') #在索引为的位置插入元素'niubi',及原来的元素从1往后加1
b.pop() #将列表最后一个元素删除
b.remove('niubi') #删除指定元素,即,将指定的'niubi'元素删除
b.reverse() #将列表的元素由原来的从左到右顺序变成从右到左方式排序
b.sort() #将列表按照assci