Python入门
一、基础语法
1、Python中数据类型
整数,浮点数,字符串,布尔值,空值(None)
2、print语句
注意:
1.当我们在Python交互式环境下编写代码时,>>>是Python解释器的提示符,不是代码的一部分。
2.当我们在文本编辑器中编写代码时,千万不要自己添加 >>>。
print语句也可以跟上多个字符串,用逗号“,”隔开,就可以连成一串输出。print会依次打印每个字符串,遇到逗号“,”会输出一个空格。
3、注释
Python的注释以 # 开头,后面的文字直到行尾都算注释。
多行注释是用三引号''' '''。
4、变量
变量是用一个变量名表示,变量名必须是大小写英文、数字和下划线(_)的组合,且不能用数字开头。
5、字符串
(1)字符串可以用''或者""括起来表示。
注意:
如果字符串包含",我们就可以用' '括起来。
同理,如果字符串包含',我们就可以用""括起来.
如果字符串既包含'又包含",对字符串的某些特殊字符进行“转义”,Python字符串用\进行转义。
如:
#LiMing said ”I’m a gay”!应表示为
LiMing said /”I/’m a gay/”!
(2) raw字符串与多行字符串
raw字符串里面的字符不需要转义,r’…’表示单行字符,r’’’…’’’表多行。
6、Unicode
Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。
print u'中文'
#多行
u'''第一行
第二行'''
raw+多行:
ur'''Python的Unicode字符串支持"中文",
"日文",
"韩文"等多种语言'''
二、list
(1)list是一种有序的集合,可以随时添加和删除其中的元素。 用[ ] 把list的所有元素都括起来,就是一个list对象。
(2)按索引访问list(类似于数组)。
(3)倒序访问list. 例如:
L = [95.5, 85, 59]
print L[-1] #输出59
print L[-2] #输出85
print L[-3] #输出95.5
(4)添加元素。append()总是把新的元素添加到 list 的尾部。 insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素。
(5)删除元素。pop()方法会返回被删除的元素。
三、tuple
(1)tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。创建tuple和创建list唯一不同之处是用( )替代了[ ]。获取 tuple 元素的方式和 list 是一模一样的。
(2)创建单元素tuple。t = (1,)
四、if语句,for循环,while循环
注意缩进,4个空格。例如:
(1)
if score>60:
print 'passed'
#if-elif-else
if age >= 18:
print 'adult'
elif age >= 6:
print 'teenager'
elif age >= 3:
print 'kid'
else:
print 'baby'
(2)for循环
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
(3)while循环
N = 10
x = 0
while x < N:
print x
x = x + 1
(4)使用break跳出循环,continue继续循环。
五、dict集合(key:value)
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
例如:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
拓展:len()可以计算任何集合的大小。
(1)访问dict.可使用 d[key] 的形式来查找对应的 value。
注意: 通过 key 访问 dict 的value,只要 key 存在,dict就返回对应的value。如果key不存在,会直接报错:KeyError。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符。
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None
(2)dict的特点
dict的第一个特点是查找速度快,dict的第二个特点就是存储的key-value序对是没有顺序的,dict的第三个特点是作为 key 的元素必须不可变,所以list不能作为key。
(3)遍历dict 例如:
for key in d:
... print key
六、set
set 持有一系列元素,这一点和 list 很像,但是set的元素不重复,而且是无序的,这点和 dict 的 key很像。
(1)创建 set 的方式是调用 set() 并传入一个 list,list的元素将作为set的元素:
>>> s = set(['A', 'B', 'C'])
(2)set的特点
set的内部结构和dict很像,唯一区别是不存储value。
set存储的元素和dict的key类似,必须是不变对象。
(3)遍历set 例如:
s = set(['Adam', 'Lisa', 'Bart'])
>>> for name in s:
... print name
(4)更新set
添加元素时,用set的add()方法:
如果添加的元素已经存在于set中,add()不会报错,但是不会加进去了:
删除set中的元素时,用set的remove()方法:
如果删除的元素不存在set中,remove()会报错。
六、函数
可以直接从Python的官方网站查看文档:
http://docs.python.org/2/library/functions.html#abs
也可以在交互式命令行通过 help(abs) 查看abs函数的帮助信息。
(1)编写函数
定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。return None可以简写为return。Python的函数返回多值其实就是返回一个tuple。
(2)递归函数
例:
汉诺塔问题
函数 move(n, a, b, c) 的定义是将 n 个圆盘从 a 借助 b 移动到 c。
参考代码:
def move(n, a, b, c):
if n ==1:
print a, '-->', c
return
move(n-1, a, c, b)
print a, '-->', c
move(n-1, b, a, c)
(3)默认参数
例如: int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数:
int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。
(4)可变参数
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数。Python解释器会把传入的一组参数组装成一个tuple传递给可变参数。
七、对list切片
(1)['Adam', 'Lisa', 'Bart', 'Paul']
L[0:3]或L[:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。所以结果为['Adam', 'Lisa', 'Bart']
L[:]表示从头到尾,L[:]实际上复制出了一个新list。
切片操作还可以指定第三个参数:
>>> L[::2]
['Adam', 'Bart']
第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple,切片操作完全相同,只是切片的结果也变成了tuple。
(2)倒序切片
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> L[-2:]
['Bart', 'Paul']
>>> L[:-2]
['Adam', 'Lisa']
>>> L[-3:-1]
['Lisa', 'Bart']
>>> L[-4:-1:2]
['Adam', 'Bart']
(3)对字符串切片
字符串 'xxx'和 Unicode字符串 u'xxx'也可以看成是一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串。
**注:
- 有序集合:list,tuple,str和unicode;
- 无序集合:set
- 无序集合并且具有 key-value 对:dict**
八、迭代
(1)索引迭代
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
... print index, '-', name
...
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
enumerate() 函数自动把每个元素变成 (index, element) 这样的tuple,再迭代,就同时获得了索引和元素本身。
(2)迭代dict的value
- values() 方法实际上把一个 dict 转换成了包含 value 的list。
- 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
(3)迭代dict的key和value
items() 方法把dict对象转换成了包含tuple的list。
iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
九、列表
(1)生成列表
方法一是循环:
>>> L = []
>>> for x in range(1, 11):
... L.append(x * x)
...
>>> L
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
>>> [x * x for x in range(1, 11)]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
(2)复杂表达式
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
在生成的表格中,对于没有及格的同学,请把分数标记为红色。
提示:红色可以用 <td style="color:red"> 实现。
如果我们用一个函数来替换字符串的格式化代码,可以得到更清晰的代码:
def generate_tr(name, score):
return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(name, score) for name, score in d.iteritems()]
这样,只需要修改 generate_tr() 函数,必要的时候把score标红。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
if score < 60:
return '<tr><td>%s</td><td style="color:red">%s</td></tr>' % (name, score)
return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(name, score) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
(3)条件过滤 例如:
def toUppers(L):
return [s.upper() for s in L if isinstance(s,str) ] #isinstance(x, str) 可以判断变量 x 是否是字符串;
print toUppers(['Hello', 'world', 101]) #输出[‘HELLO’,’WORLD’]