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)]



posted @ 2019-02-18 22:31  风露  阅读(197)  评论(0编辑  收藏  举报