世界上现在有上百种编程语言,Python是当今最流行的编程语言之一。
Python适合的领域
Python不适合的领域
Python的缺点
下面正式进入Python的学习环境
由于是我的学习笔记,所以只记载了我觉得该记的、容易忘记的东西
Unicode字符串
因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码
如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
因为Python的诞生比Unicode标准发布的时间还要早,所以最早的Python只支持ASCII编码,普通的字符串'ABC'在Python内部都是ASCII编码的。
Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示,不加u中文就不能正常显示
如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释
# -*- coding: utf-8 -*-
目的就是告诉Python解释器,用UTF-8编码读取源代码。然后用Notepad++另存为...并选择UTF-8格式保存
布尔运算
True and 'a=T' 计算结果是 'a=T'
继续计算 'a=T' or 'a=F' 计算结果还是 'a=T'
要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算。
1. 在计算 a and b
时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
2. 在计算 a or b
时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。
列表(List)
append(元素)把新的元素添加到list的尾部
insert(位置,元素)把新元素插入到指定位置
pop()删除列表最后一个元素,也可以指定具体删除的元素的位置
对list中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素,list包含的元素个数保持不变。
元组(tuple)
tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
创建tuple和创建list唯一不同之处是用( )
替代了[ ]
。
因为()
既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。
正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义
字典(dict)
dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样。而list的查找速度随着元素增加而逐渐下降。
不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
dict的第二个特点就是存储的key-value序对是没有顺序的!
dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key。
要添加新的key-value时,直接d['Paul'] = 72,就将Paul-72添加到字典d中了(示例)
集合(set)
add()添加新元素
remove()删除元素,若不存在会报错
python之定义默认参数
int()函数,可以进行数制转换。eg:int(‘123’,8) = 83
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面
python之定义可变参数
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
定义可变参数的目的也是为了简化调用。假设我们要计算任意个数的平均值,就可以定义一个可变参数
切片
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3,如果第一个索引是0,还可以省略。
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
迭代
索引迭代也不是真的按索引访问,而是由 enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。
values(),itervalues()迭代dict中的value
items()方法把dict对象转换成了包含tuple的list,iteritems()不把dict转换成list,而是在迭代过程中不断给出tuple,iteritems()不占用额外的内存
字符串可以通过 % 进行格式化,用指定的参数替代 %s。字符串的join()方法可以把一个 list 拼接成一个字符串。
isinstance(x, str) 可以判断变量 x 是否是字符串
到此,python的基础知识就学完了。确实可以感觉的到python要比其他语言编写起来方便的多。没有了那么多繁琐的条条框框。
接下来就进入更高一点点的python学习,不过也还是更高一点点的基础而已,python学习历程,还需要任重而道远啊