Python入门基础笔记
文|Seraph
一 前言
- 运行速度的瓶颈往往不在于使用python语言开发,而在于数据库的操作和网络调用。
- Python源码不能加密
- 很多库对python3.3的支持不是很好,所以常用Python2.7开发
二 Python变量和数据类型
-
print会依次打印每个字符,遇到逗号“,”会输出一个空格
print 'xx','xx'
-
'#' 注释
-
变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。
Python是动态语言,C++、JAVA是静态语言。 -
赋值(引用赋值)
a = 'ABC'
b = a
a = 'XYZ'
执行a = 'ABC'
,解释器创建了字符串 'ABC'和变量 a,并把a指向 'ABC':
执行b = a
,解释器创建了变量 b,并把b指向 a 指向的字符串'ABC':
执行a = 'XYZ'
,解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b并没有更改:
所以,最后打印变量b
的结果自然是'ABC'
了。
-
raw字符串,不需要转义,但不能表示多行字符串,也不能表示包含
'
,"
的字符串
''r'(_)/ (_)/'`` -
多行字符串使用
'''xxx
xxx
xxx'''
-
Unicode字符串
u'''中文'''
如果中文字符串在Python环境下遇到UnicodeDecodeError,则在文件开头加上如下注释:
# -- coding: UTF-8 --
-
Python 把 0、空字符串、None看成False
a = True
print a and 'a=T' or 'a=F'
打印出:a=T
三 List列表
- list是数学意义上的集合,是按照顺序排列的,Python是动态语言,所以list中包含的元素不要求都必须同一种类型。
- list倒序访问,可以从-1开始表示倒序第一个
- 添加新元素list.append('xx'),插入新元素list.insert(n, 'xx')。
- 删除元素 list.pop('xx'),返回值为删除的元素,也可按索引删除list.pop(n)。 连续删除时,需要注意索引每次删除,后续的索引会向前移动。
四 Tuple元组
- tuple和list非常类似,但是tuple一旦创建完毕,就不能修改了。
t = ('Adam', 'Lisa', 'Bart')
- tuple单个元素创建时,需要在后面添加‘,’,才能表示一个正确的tuple
t = (1,)
- tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。而指向的对象(如list)本身是可以变的。
t = ('a', 'b', ['A', 'B'])
五 缩进
- Python代码的缩进规则:具有相同缩进的代码被视为代码块,4个空格,不要使用tab。
- Python交互环境中,退出缩进需要多敲一行回车。
六 控制语句
- if
if age >= 18:
print 'adult'
elif age >= 6:
print 'teenager'
elif age >= 3:
print 'kid'
else:
print 'baby'
注意:这一系列条件判断从上至下依次判断,如果某个判断为True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行。
- for
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
- while
while x < N:
print x
x = x + 1
七 dict
- 键值对key:value
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
- 访问
print d['Adam']
如果key不存在,dict会直接报错:KeyError
避免KeyError的办法:
if 'Paul' in d:
print d['Paul']
print d.get('Paul')
#get方法,在key不存在的时候,返回None
- 特点
查找速度快,占用内存大,key不可变且不能重复,key-value序对没有顺序
八 set
- 创建,调用set(),并传入一个list
s = set(['A', 'B', 'C'])
- 访问
'Bart' in s
- 添加、删除
s.add(x)
s.remove(x)
#删除时,需现判断,否则不存在会报错
- 特点
查找速度更快,key不可变且不能重复,无序
九 函数
- 函数就是最基本的一种代码抽象的方式
-
xrange(1, 101)
生成1到100的list - Python的函数返回多值其实就是返回一个tuple
- 使用递归函数需要注意防止栈溢出,递归调用次数过多,会导致溢出
十 list切片
- 序号从m到n(注意切片不包含n)
L[m:n]
- 从头到尾
L[:]
- 从m到n,隔k-1
L[m:n:k]
- 多次切片
L[m1:n1][m2:n2]
十一 迭代
- 迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果。
- 迭代是取出元素本身,而不是元素的索引,如想在for循环中拿到索引,可以使用enumerate(),其功能是自动把每个元素变成(index,element)这样的tuple
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for index, name in enumerate(L):
print index, '-', name
- zip()函数可以把两个 list 变成一个 list:
zip([10, 20, 30], ['A', 'B', 'C'])
# 结果:[(10, 'A'), (20, 'B'), (30, 'C')]
-
迭代dict的value的方法:
values()
,itervalues()
两者差别,values()
方法实际是把一个dict转换成了包含value的list
itervalues()
方法不会转换,它会在迭代过程中依次从dict中取出dict,所以更省内存 -
求列表长度
len(d)
-
迭代dict的key和value:
items()
,iteritems()
十二 生成列表
1 列表生成式
[x * x for x in range(1, 11)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
2 复杂生成式
字符串可以通过%进行格式化,用指定的参数代替%s,字符串的join()
方法可以把一个list拼接成一个字符串
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()]
print '<table>'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
3 条件过滤
[x * x for x in range(1, 11) if x % 2 == 0]
#[4, 16, 36, 64, 100]
4 多层表达式
[m + n for m in 'ABC' for n in '123']
#['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
十三 其它
1 判断变量是否是字符串:isinstance(x, str)
2 返回大写字符串:upper()