python学习-1
1.输出中文
Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示
如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释
# -*- coding: utf-8 -*-
2. 四则运算
如果我们要计算 11 / 4 的精确结果,按照“整数和浮点数混合运算的结果是浮点数”的法则,把两个数中的一个变成浮点数再运算就没问题了:
3. 正则运算法则:短路计算。
4. 列表增删改
L.append('Paul') #末尾插入
L.insert(0, 'Paul') #自定义索引插入
L.pop() #末尾删除
L.pop(2) #自定义索引删除
L[2] = 'Paul' #自定义修改
同样是表示班里同学的名称,用tuple表示如下:
>>> t = ('Adam', 'Lisa', 'Bart')
t = ('a', 'b', ['A', 'B'])
缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
if 语句后接表达式,然后用:表示代码块开始。
在Python交互环境下敲代码,还要特别留意缩进,并且退出缩进需要多敲一行回车:
L = ['Adam', 'Lisa', 'Bart'] for name in L: print name
要特别留意while循环的退出条件。
要在循环体内直接退出循环,可以使用 break 语句。
还可以用continue跳过后续循环代码,继续下一次循环。
for x in ['A', 'B', 'C']: for y in ['1', '2', '3']: print x + y
花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。
要避免 KeyError 发生,有两个办法:
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d: print d['Paul']
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart') 59 >>> print d.get('Paul') None
dict内部是无序的,不能用dict存储有序的集合。
dict的第三个特点是作为 key 的元素必须不可变,
要把新同学'Paul'的成绩 72 加进去,用赋值语句:
>>> d['Paul'] = 72
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> for key in d: ... print key ... Lisa Adam Bart
因为set内部存储的元素是无序的。
因为set不能包含重复的元素
访问 set中的某个元素实际上就是判断一个元素是否在set中。>>> 'Bart' in s
True
set并判断用户输入的月份是否有效。
set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
直接使用 for 循环可以遍历 set 的元素:
>>> s = set(['Adam', 'Lisa', 'Bart']) >>> for name in s: ... print name ... Lisa Adam Bart
一是把新的元素添加到set中,二是把已有元素从set中删除。
所以用add()可以直接添加,而remove()前需要判断。
求绝对值的函数 abs
比较函数 cmp(x, y) 就需要两个参数,如果 x<y,返回 -1,如果 x==y,返回 0,如果 x>y,返回 1
int()函数可以把其他数据类型转换为整数
str()函数把其他类型转换成 str
def my_abs(x): if x >= 0: return x else: return -x
Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:
自定义变量数值:def average(*args):
注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括: 1. 有序集合:list,tuple,str和unicode; 2. 无序集合:set 3. 无序集合并且具有 key-value 对:dict
迭代与按下标访问数组最大的不同是,后者是一种具体的迭代实现方式,而前者只关心迭代结果,根本不关心迭代内部是如何实现的。
Python中,迭代永远是取出元素本身,而非元素的索引。
对于有序集合,元素确实是有索引的。有的时候,我们确实想在 for 循环中拿到索引,怎么办?
1. 方法是使用 enumerate() 函数:
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
... print index, '-', name
...
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
2. zip()函数可以把两个 list 变成一个 list:
>>> zip([10, 20, 30], ['A', 'B', 'C']) [(10, 'A'), (20, 'B'), (30, 'C')]
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
>>> for key, value in d.items(): ... print key, ':', value ... Lisa : 85 Adam : 95 Bart : 59
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
列表生成:
1)
>>> L = [] >>> for x in range(1, 11): ... L.append(x * x)
2)
>>> [x * x for x in range(1, 11)]