Python笔记2

来源:互联网 发布:淘宝联盟佣金神器 编辑:程序博客网 时间:2024/05/30 23:38

1.跟字符串类型只能用字符为元素不同,列表类型的元素可以是另一个序列类型,这就意味着你在列表的元素上也可以使用所有的序列操作符或者在其之上执行序列类型内建的各种操作.

2.我们可以用 extend()方法来代替连接操作符把一个列表的内容添加到另一个中去.使用 extend()方法比连接操作的一个优点是它实际上是把新列表添加到了原有的列表里面,而不是像连接操作那样新建一个列表。

3.列表的cmp()
1.   对两个列表的元素进行比较. 
2.   如果比较的元素是同类型的,则比较其值,返回结果. 
3.   如果两个元素不是同一种类型,则检查它们是否是数字. 
  a.  如果是数字,执行必要的数字强制类型转换,然后比较. 
  b.  如果有一方的元素是数字,则另一方的元素"大"(数字是"最小的") 
  c.  否则,通过类型名字的字母顺序进行比较. 
4.   如果有一个列表首先到达末尾,则另一个长一点的列表"大". 
5.   如果我们用尽了两个列表的元素而且所 有元素都是相等的,那么结果就是个平局,就是说返回一个 0.

4.传给 tuple()的一个列表对象不可能变成一个元组,而你传给 list()的对象也不可能真正的变成一个列表.虽然前后两个对象(原来的和新的对象)有着相同的数据集合(所以相等 == ),但是变量指向的却不是同一个对象了(所以执行 is 操作会返回 false).

5.在使用可变对象的方法如 sort(),extend()和 reverse()的时候要注意,这些操作会在列表中原地执行操作,也就是说现有的列表内容会被改变,但是没有返回值!不可变对象的方法是不能改变它们的值的,所以它们必须返回一个新的对象. reversed()和 sorted()内建函数像列表的方法一样工作,不同的是它们可以用做表达式,因为它们返回一个对象.同时原来的那个列表还是那个列表,没有改变,而你得到的是一个新的对象. 

6.有几点关于拷贝操作的警告。

第一,非容器类型(比如数字,字符串和其他"原子"类型的对象,像代码,类型和 xrange 对象等)没有被拷贝一说,浅拷贝是用完全切片操作来完成的.第二,如果元组变量只包含原子类型对象,对它的深拷贝将不会进行.

7.生存期内可变对象不可hash,即改变时id()是不变的,基本就是字典,列表,集合。为什么键必须是可哈希的?解释器调用哈希函数,根据字典中键的值来计算存储你的数据的位置。如果键是可变对象,它的值可改变。如果键发生变化,哈希函数会映射到不同的地址来存储数据。

8.xrange() 类似 range() , 不过当你有一个很大的范围列表时, xrange() 可能更为适合, 因为它不会在内存里创建列表的完整拷贝. 它只被用在 for 循环中, 在 for 循环外使用它没有意义。因为它返回一个可迭代对象(不是列表也不是一个迭代器)。

9.序列相关函数,其中两个函数( sorted() 和  zip() )返回一个序列(列表), 而另外两个函数( reversed() 和 enumerate() ) 返回迭代器(类似序列) 。

10.你可以在 while 和 for 循环中使用  else 语句. 在循环中使用时, else 子句只在循环完成后执行, 也就是说 break 语句也会跳过 else 块.

11.列表解析语法: 
 
 [expr for iter_var in iterable if cond_expr]

12.列表解析的一个不足就是必要生成所有的数据, 用以创建整个列表. 这可能对有大量数据的迭代器有负面效应. 生成器表达式通过结合列表解析和生成器解决了这个问题. 生成器表达式与列表解析非常相似,而且它们的基本语法基本相同; 不过它并不真正创建数字列表, 而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”(yield)出来. 生成器表达式使用了"延迟计算"(lazy evaluation),  所以它在使用内存上更有效.

13.open() 和 file() 函数具有相同的功能, 可以任意替换.

14.当 with 语句执行时,便执行上下文符号来获得一个上下文管理器.上下文管理器的职责是提供一个上下文对象.这是通过调用__context__()方法来实现的.该方法返回一个上下文对象,用于在 with 语句块中处理细节.一旦我们获得了上下文对象,就会调用它的__enter()__方法.它将完成 with 语句块执行前的所有准备工作. with 行的语法中有一个可选的 as 声明变量跟随在 context_expr之后.如果提供提供了变量,以__enter()__返 回的内容来赋值;否则,丢弃返回值.在我们的文件对象例子中,上下文对象的__enter()__返回文件对象并赋值给 f.

原创粉丝点击