python学习查漏补缺

1、列表在切片时,对象名和 [] 之间可以有空格

2、函数设计要尽量短小,嵌套层次不宜过深

3、一个函数只做一件事,尽量保证函数语句粒度的一致性

4、使用异常替换返回错误

5、断言应该应用在正常情况下总是为真的场合

6、不要使用断言来检查用户的输入

7、在函数调用后,当需要确认返回值是否合理时可以使用断言

8、当条件是业务逻辑继续下去的先决条件时可以使用断言

9、基于内建类型扩展的用户自定义类型,type函数并不能准确返回结果

10、当创建两个内容相同的长字符串,并分别赋值给 a 和 b 时,python 内存中

各自创建了对象来表示 a 和 b ,这两个对象拥有相同的内容但对象标示符却不相同,

所以 == 的值为 True 而 is 的值为 False

11、当调用 print 方法输出的时候会隐式地进行从 ASCII 到系统默认编码的转换

12、for、while、异常处理时均可使用else,可以此来简化代码,如不需再使用标志变量。else在这里的意思是:如果循环结束或循环不满足条件时,则执行 else 

13、当 try 块中发生异常的时候,如果在 except 语句中找不到对应的异常处理,异常将会被临时保存起来,当 finally 执行完毕的时候,临时保存的异常将会再次被抛出,但如果 finally 语句中产生了新的异常或者执行了 return 或者 break 语句,那么临时保存的异常将会被丢弃,从而导致异常屏蔽

14、在异常处理中,如果有 finally 存在的话,那么即使在前面有 return 语句,但也仍会执行 finally ,而不是停止执行 return 后面的语句;如果在 finally 语句中有 return 语句,则会将之前的 return 语句的返回值覆盖住,如果没有 return 语句,则不会覆盖

15、当判断一个对象是否为空时,python 会先调用对象的 __nonzero__ 方法,如果该方法返回非 0 或非 False,则该对象为非空,反之则为空;如果该对象没有定义 __nonzero__ 方法,则调用该对象的 __len__ 方法,如果该方法返回非 0 或非 False,则该对象为非空,反之则为空

16、{0} 表示 format 方法中对应的第一个参数

17、format的基本语法:[[填充符]对齐方式][符号][#][0][宽度][,][.精确度][转换类型]

18、join 方法比 + 方法要快得多,当要相加的字符串数量相当大时(如100万),前者将比后者快100倍

19、format 方法可以使用名称来进行传值:'test {max}'.format(max=100)

20、在使用 % 来对字符串进行格式化时,如果参数是元组,则需要写成 % (test, ) ,而如果直接写成 % (test) 则会报错

21、% 最终会被 .format 方式所代替

22、列表推导式中的表达式可以是简单表达式,也可以是复杂表达式,甚至是函数

23、函数默认参数只在第一次调用时,进行评估

24、当函数内需要使用当前系统时间时,应当传入的是 time.time 对象,因为传入对象的话,每次的调用时都会得到当前系统时间,而如果传入的是 time.time() 时,则以后每次调用时得到的系统时间都是第一次调用时的时间

25、当对一个字符串进行检验时,如:isinstance(mystr, str_class),如果想验证 mystr 是不是字符串,则 str_class 为 basestring;而如果仅仅只想检验是不是 str ,则 str_class 为 str;而如果仅仅只想检验是不是 unicode,则 str_class 为 unicode

26、多维列表排序:在对多字段进行排序时,可以使用 from operator import itemgetter 来进行。例如:

数据: gameresult1 = [['Bob', 95.00, 'A', 92], ['Alan', 86.0, 'C', 89], ['Mandy', 82.5, 'A', 92], ['Bob', 86, 'E', 99]]

语句:sorted(gameresult1, key=itemgetter(3, 2, 1, 0))

结果:

[['Alan', 86.0, 'C', 89],
 ['Mandy', 82.5, 'A', 92],
 ['Bob', 95.0, 'A', 92],
 ['Bob', 86, 'E', 99]]
 
注意:itemgetter函数获取的不是值,而是定义了一个函数,通过该函数作用到对象上才能获取值
 
27、from collections import Counter 方法是用于统计可迭代对象中的元素个数,并将结果保存在字典中
28、可以使用 Counter 的 elements() 方法来获取 Counter 中的 key 值
29、利用 Counter 的 most_common() 方法可以找出前 N 个出现频率最高的元素及其相对应的次数
30、使用 argparse 处理命令行参数
注:docopt 比 argparse 更先进更易用,不需要编写代码,只需编写类似 argparse 输出的帮助信息即可
31、pandas 指定读取部分列和文件的行数,参数:nrows 指定读取多少行,usecols=['a', 'b'] 指定读取 a、b 列,如果没有列名,可以直接使用列索引,0、1、... 、n - 1
32、对文件进行分块处理并返回一个可迭代的对象;参数:chunksize 设置分块的文件行数,iterator 设置为 True 时,返回值为 TextFileReader,它是一个可迭代对象,可使用 next() 方法来读取
33、pickle 可用于序列化和反序列化;dumps 方法是序列化,loads 方法是反序列化
34、pickle 不能保证操作的原子性
35、pickle 存在安全性问题
36、json 也可用于序列化和反序列化;dump/dumps 方法是序列化,load/loads 方法是反序列化
37、json 不支持 datetime 的序列化
38、在异常处理时,可以使用 trackback.print_exc() 方法来查看调用栈信息
39、尽量为 logging 取一个名字而不是采用默认的,这样当在不同的模块中使用的时候,其他模块只需要使用以下代码就可以方便
地使用同一个 logger ,因为它本质上符合单例模式
import logging
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
40、Logging 只是线程安全的,不支持多进程写入同一个日志文件,因此对于多个进程,需要配置不同的日志文件
41、多线程库:thread、threading,thread 模块提供了多线程底层支持模块,以低级原始的方式来处理和控制线程,使用起来较
为复杂;而 threading 模块基于 thread 进行包装,将线程的操作对象化,在语言层面提供了丰富的特性。
42、threading 的 join() 方法能够阻塞当前上下文环境的线程,直到调用此方法的线程终止或到达指定的 timeout (可选参数)
 
 
 
 
 
 
 
 
 
 
 
 
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值