Python 1-5章
tags: Python
Learning Note
第1章 基础知识
- 1.2 交互式解释器
- 1.4 数字和表达式
整数除法:1/2=0(可使用`from __future__ import division`或者附加`-Qnew`执行)
- 1.4.1 长整型数(将在大数后面加L)
- 1.4.2 十六进制和八进制(用开头确定:
0xAF(175)
,010(8)
)
- 1.5 变量(直接用=赋值)
- 1.7 获取用户输入(
input("")
等) - 1.9 模块
`from 模块 import 函数` 可以用变量引用函数(`foo=math.sqrt`)
- 1.9.1 cmath和复数(
cmath.sqrt
支持复数)
- 1.9.1 cmath和复数(
- 1.10 保存并执行程序
- 1.10.3 注释(用#)
- 1.11 字符串
- 1.11.1 单引号字符串和转义引号
单双引号没区别。转移在前面加上\。
- 1.11.2 拼接字符串(可用+拼接)
- 1.11.3 字符串表示,str和repr
str
可以转换值为字符串。
repr
,以Python表达式形式表示值。
可以比较str(10000L)和repr(10000L)。
反引号效果跟repr一样,但是不推荐使用,因为3以上不支持。 - 1.11.4 input和rawinpm的比较
input
会假设用户输入的是合法的Python表达式(与repr相反)。
row_input
会把所有的输入当初原始数据(row_data)。如: 对于`name = input("name:")`,只能输入"hcbbt",而直接hcbbt不带双引号会报错。
- 1.11.5 长字符串、原始字符串和Unicode
长字符串:如果字符串要跨多行,可以用三个引号'''(or""")代替普通引号。
这里和用\加回车跨行的区别是,用\加回车输出会把各个行凑一行,而三个引号则一样跨行。
原始字符串:在引号前面加上r可以使用原始字符串,字符串里面无法再转移。
Unicode字符串:在字符串前使用u前缀。这里比较麻烦的是处理字符串里面的引号,里面的引号前面加上\后输出的原始字符串也会有\的,这里可以用单双括号混合用来绕开这个问题。另外注意原始串最后面不能是\,否则识别不了。
- 1.11.1 单引号字符串和转义引号
第2章 列表和元组
- 2.1 序列概览
列表和元组的主要区别在于,列表可以修改,元组则不能。 一般来说,在几乎所有的情况下列表都可以替代元组。(例外情况:使用元组作为字典的键。)
- 2.2 通用序列操作
- 2.2.1 索引
序列中的所有元素都是有编号的--从0开始递增。这些元素可以通过编号分别访问。
字符串字面值能够直接使用索引,如字符串就是一个由字符组成的序列。
'Hello'[1] = 'e'
如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。索引可以为负数。
- 2.2.2 分片
第1个索引的元素是包含在分片内的,而第2个则不包含在分片内。
可显式设置步长(不能为0)。 - 2.2.3 序列相加(使用加号。)
两种相同类型的序列才能进行连接操作。 - 2.2.4.乘法(重复n次)
空列表:[]
,空值:None
。 初始化:[None] * 10
- 2.2.5 成员资格(关键字in,返回值True/False)
- 2.2.6 长度、最小值和最大值
len(nums)
max(nums)
min(nums)
- 2.3 列表:Python的“苦力”
- 2.3.1 list函数
string->list:list(str)
list->string:''.join(somelist)
- 2.3.2 基本的列表操作
元素赋值:用下标赋值。
删除元素:del names[2]
。
分片赋值:可以使用与原序列不等长的序列将分片替换。长插短,短插长都可以。
也可以通过分片删除元素:如:name = list('Perl') name[1:]=list('ython'),此时''.join(name)='Python'
name[1:2] = []
,'y'就被删掉了。 - 2.3.3 列表方法
对象.方法(参数)
append
:在列表后追加新对象。
count
:统计某个元素在列表中出现的次数。
extend
:可以在列表的末尾一次性追加另一个序列中的多个值。(修改了前面的列表)(a.append(b)
等价于分片赋值a[len(a):] = b
)
index
:从列表中找出某个值第一个匹配项的索引位置。(不存在会引发异常)
insert
:用于将对象插入到列表中。a.insert(3,'test')
在下标为3的位置插入'test'。
pop
:会移除列表中的一个元素(默认是最后一个),并且返回该元素的值。
remove
:移除列表中某个值的第一个匹配项。(第一次出现的值)
reverse
:将列表中的元素反向存放。(不会返回列表,而是返回迭代器。可使用list(reserved(x))
返回列表)
sort:用于在原位置对列表进行排序。(返回了空值)(可用sorted()函数返回列表)关于
sort
高级排序**:
内建函数cmp(x,y)
在x < y时返回负数,在x > y时返回正数,如果x = y则返回0。
sort默认用的是cmp
,我们可以直接写比较函数并调用。如a.sort(cmp2)
sort方法有另外两个可选的参数--键函数key
(如key=len)和布尔值reverse
(True即反向,False正向,默认False)。 - 2.4 元组:不可变序列
元组和字符串都不能修改。
空元组可以用没有包含内容的两个圆括号来表示。 - 2.4.1 tuple函数
以一个序列或字符串作为参数并把它转换为元组。 - 2.4.2 基本元组操作(除了无法修改之外和列表差不多)
- 2.4.3 那么,意义何在
元组可以在映射(和集合的成员)中当作键使用--而列表则不行。
- 2.2.1 索引
第3章 使用字符串
- 3.1 基本字符串操作
除了不可修改和列表一样。 -
3.2 字符串格式化:精简版
用包含转换说明符的字符串+%+元组或字典实现。如:"Hello, %s. %s enough for ya?" % ('world', 'Hot')
。(如果用列表会被当成一个值)如果要在格式化字符串里包含百分号,那么必须使用%%。
模版字符串,需要from string import Template。关键字为$,Template,方法为substitute。(同样如果要输出$就要使用$$了。)(还可以使用字典的映射键设置关键字)
如:Template('Hello, $x. ${y}t enough for ya?').substitute(x='world', y='Ho')
- 3.3 字符串格式化:完整版(跟c等其他语言的转换说明符一样,不想多说)
- 3.3.1 简单转换
- 3.3.2 字段宽度和精度(可以用
%*s
,后面元组里面加上数值表示*位置的数) - 3.3.3 符号、对齐和0填充(
%a10s
,a为0表示0填充,-表示左对齐,+为标出正负(+0))
- 3.4 字符串方法 字符串常量(import string):
string.digits/ letters/ ascii_letters/ lowercase/ uppercase/ printable/ punctuation
- 3.4.1 find(查找第一个匹配子串,没有找到返回-1,可以提供起点和终点)
- 3.4.2 join(
'+'.join(['1','2','3'])
)(队列中添加元素(注意:需要添加的队列元素都必须是字符串)) - 3.4.3 lower(返回字符串的小写字母版)(
title
方法和string.capwords
:单词首字母大写) - 3.4.4 replace(所有匹配项均被替换)
- 3.4.5 split(将字符串分隔成序列,与join相反)
- 3.4.6 strip(返回去除两侧空格的字符串)(可指定去除字符串,参数为所有要去除的字符组成的字符串)
- 3.4.7 translate(同时替换多个字符,得先制作转换表。如:
a='Hello,world' t=a.maketrans('l','a') a.translate(t))
第4章 字典:当索引不好用时
字典是python中唯一内建的映射类型。字典中的值并没有特殊的顺序。
- 4.2 创建和使用字典
phonebook={'A':'1111', 'B':'2222', 'C':'3333'}- 4.2.1 dict函数
通过其他字典或(键,值)序列来建立字典:dict是一个类型。
或者直接用关键字参数创建:items = [('A','1111'),('B','2222')] pb = dict(items)
pb = dict(A='1111', B='2222')
- 4.2.2 基本字典操作
len(d)
:长度
d[k]
:取键k的值
d[k]=b
:赋值(关联)
del d[k]
:删除项
k in d
:检查键键类型是不可变类型
- 4.2.3 字典的格式化字符串
"AAA's phone number is %(AAA)s." % phonebook
- 4.2.4 字典方法
clear
:清除字典中所有的项目。
copy
:返回一个具有相同键值对的新字典。这是浅复制,值是相同的,不是副本复制! 用`deepcopy`可以实现深复制(`from copy import deepcopy`)
fromkeys
:使用给定的键建立新的字典,每个键默认对应的值为None(可以自己提供默认值)。get
:更宽松的访问字典项的方法,字典中不存在的项会返回None(可以自己提供默认值)。
has_key
:检查字典中是否含有给出的键。(3.0没有此函数)
items
:将所有的字典项以列表方式返回,返回时没有特殊的顺序。(iteritems
返回迭代器)
keys
:将键以列表方式返回,iterkeys同iteritems。
pop
:弹出对应值并删去该项。
popitem
:随机弹出项。(因为没有顺序)
setdefault
:和get
差不多,如果键不存在会更新字典。
update
:利用一个字典项更新另外一个字典。
values
:以列表的形式返回字典中的值。(可重复)(itervalues
返回迭代器)
- 4.2.1 dict函数
第5章 条件、循环和其他语句
- 5.1 print和import的更多信息
- 5.1.1 使用逗号输出(多个表达式,多句不换行)(打印元组要在外层加())
- 5.1.2 把某件事作为另一件事导入
import 模块
:把模块中的函数导入当前的语义表(as 别名)
from 模块 import 函数1,函数2...
:直接导入命名
from 模块 import *
:导入所有除了以下划线_开头的命名。
- 5.2 赋值魔法
- 5.2.1 序列解包(
x,y,z=1,2,3
分别复制,x,y=y,x
交换值,x,y,z=(1,2,3)
序列赋值)(3.0可以用星号运算符收集多余元素) - 5.2.2 链式赋值(将同一个值赋给多个变量的捷径。)
- 5.2.3 增量赋值(-=+=*=\/=...)
- 5.2.1 序列解包(
- 5.3 语句块:缩排的乐趣(4个空格缩进,冒号表示语句块开始)
- 5.4 条件和条件语句
- 5.4.1 这就是布尔变量的作用
标准值Flase和None、所有类型的数字0(浮点型、长整型和其他类型等)、空序列(如空字符串、元组和列表)以及空字典都为假。其他解释为真。(使用bol()函数转换) - 5.4.2 条件执行和if语句(和其他语言一样,不想多说)
- 5.4.6 更复杂的条件
0<age<100
连接比较in, not in
成员资格运算符is, not is
同一性运算符(是否同一对象)- 字符串序列比较:字典序
and
优先级大于or
- 5.4.7 断言(在程序中置入检查点
assert 0<age<100
)
- 5.4.1 这就是布尔变量的作用
- 5.5 循环
- 5.5.1 while循环
- 5.5.2 for循环
可以用for x in lst: print x
range(a,b)
实现[a,b)的整数序列。range直接创建序列(2.x下),xrange()一次只创建一个数,适合大序列。(可加步长)
- 5.5.3 循环遍历字典元素
for key(or value) in dictionary: pass
- 5.5.4 一些迭代工具
可以用zip把多个序列打包起来变成元组序列,然后就方便for了。(for x in zip(a,b):...
,如果len(a)<len(b),len(zip(a,b))==len(a))
enumerate()
:枚举容器中的序列和值,返回为迭代器。
reversed()
返回迭代器,sorted()
返回列表。 - 5.5.5 跳出循环(
break
、continue
) - 5.5.6 循环中的else子句(没调用
break
后执行)
- 5.6 列表推导式——轻量级循环
[表达式 for 变量 in 列表 if 条件](for和if可以多个)
- 5.7 三人行
- 5.7.1 什么都没发生(
pass
) - 5.7.2 使用del删除(不仅会移除一个对象的引用,还会移除那个名字本身)
- 5.7.3 使用exec和eval执行和求值字符串
exec:执行里面的字符串,可以增加作用域scope。(如g = {} exec "a=1" in g
等效于exec("a=1", g)
)(可以指定多个作用域)
eval
:用于“求值“,会返回值。
- 5.7.1 什么都没发生(
本文已用马克飞象重新排版,然后再从evernote复制处理的。
衷心感谢马克飞象和evernote的支持。