需要恶补一下快速写代码的能力,而python2明年就要被淘汰,所以选择了主攻python3. 花了半天时间阅读官方文档,整理如下。
小备注:
- 在遍历同一个集合时修改该集合的代码可能很难获得正确的结果。通常,更直接的做法是循环遍历该集合的副本或创建新集合:
# Strategy: iterate over a copy
for user, status in users.copy().items():
if status != 'active':
del users[user]
# Strategy: create a new collection
active_users = {}
for user, status in users.items():
if status == 'active':
active_users[user] = status
- range 返回一个iterable,而sum()可以接收iterable,如sum(range(10)). 这里range的step参数一定是整数,所以要获得等间隔的小数就是[0.1 * w for w in range(10)].
- all(iterable), any(iterable)判断可迭代对象是否全是/有True
- 当我们需要将数个字符串合并的时候,习惯性的使用"+"作为连接字符串的手段。然而,由于不可变对象在内存中生成后无法修改,合并后的字符串会重新开辟出一块内存空间来存储。这样像滚雪球一样,将内存快速消耗殆尽。可以用‘'.joint(string seq).
- 函数都是按值传递的,所以不会修改原来的值。函数默认返回值None,即使我们没有显示的return它。函数的默认值只会执行一次,这条规则在默认值为可变对象(列表、字典以及大多数类实例)时很重要。
- 函数中形如*name接受tuple类型的正式形参,**name接受dict
-当参数已经在列表或元组中但要为需要单独位置参数的函数调用解包时,可以使用*解包,dict可以使用**
- map()函数返回一个将function应用于iterable中每一项并输出其结果的迭代器。
- filter()函数用iterable中函数function返回真的那些元素,构建一个新的迭代器
- lambda函数的使用:(1)使用lambda表达式返回一个函数(2)lambda函数作为一个参数,如
pairs = [(1, one), (2, two), (3, three)]
pairs.sort(key=lambda pair: pair[1])
- list中的imsert, remove,sort都直接修改列表,返回值为None
- collections.deque 用于从两端快速操作,list只在一端比较高效
- 列表推导式是python很简单易读的一个表达式,如[x**2 for x in range(10)]。列表推导式是一个表达式,后面跟一个 for 子句,然后是零个或多个 for或 if 子句。 其结果将是一个新列表。要产生多个参数组成的数组需要加括号。for的顺序是从右往左。
- python的序列有list,tuple,range
-只有一个元素的元组('abc',)
- 字典的关键字是不可变类型。当关键字是简单字符串时,有时直接通过关键字参数来指定键值对更方便
- 循环的技巧:
* 当在字典中循环时,用 items() 方法可将关键字和对应的值同时取出
* 当在序列中循环时,用enumerate()函数可以将索引位置和其对应的值同时取出
* 当同时在两个或更多序列中循环时,可以用zip()函数将其内元素一一匹配。
* 当逆向循环一个序列时,先正向定位序列,然后调用reversed()函数
* 如果要按某个指定顺序循环一个序列,可以用sorted()函数,它可以在不改动原序列的基础上返回一个新的排好序的序列
- 在多数情况下,Python程序员都不会使用from XXX import *,因为它在解释器中引入了一组未知的名称,而它们很可能会覆盖一些你已经定义过的东西。
- 格式化字符串文字:'!a' 应用ascii() ,'!s' 应用str(),还有 '!r' 应用repr()
- file 文件对象包含每一行,所以可以for line in f
- 需谨慎使用exept:处理所有类型异常,因为以这种方式很容易掩盖真正的编程错误!
- Generator是一个用于创建迭代器的简单而强大的工具。 它们的写法类似标准的函数,但当它们要返回数据时会使用yield语句。
- 通用实用程序脚本通常需要处理命令行参数。这些参数作为列表存储在sys模块的argv属性中
- ^= ob111就相当于对每一位取反
网友评论