Python读书笔记1

最近在学习《编写高质量代码-改善python程序的91个建议》,记录下读书笔记

使用版本:Python 3.4.0

系统:Windows7



1.字符串格式化:

 1 def show(name,age,email):
 2     #普通方法
 3     print(‘your name is: %s \nyour age is: %i \nyour email is: %s‘ %(name,age,email))
 4     #更加清晰引用的方法
 5     print(‘your name is: %(name)s \n your age is: %(age)i \nyour email is: %(email)s‘ %{‘name‘:name,‘age‘:age,‘email‘:email})
 6     #str.format()字符串格式化方法
 7     print(‘your name is: {name} \nyour age is {age} \nyour email is: {email}‘.format(name = name,age = age,email = email))
 8
 9 if __name__ == ‘__main__‘:
10     show(‘wwl‘,24,‘[email protected]‘)

2.包管理器:Pip

官网:
  https://pip.pypa.io/en/latest/
Python 3.4版本内置了pip 存放在python安装路径的Scripts目录,只需要把这个路径加到系统的path路径即可。安装包:pip install SomePackage卸载包:pip uninstall SomePackage升级包:pip install --upgrade SomePackage显示安装包:pip list显示安装包哪些需要升级:pip list --outdated显示包信息:pip show SomePackage显示安装包包含哪些文件:pip show --files SomePackage
$ pip install SomePackage            # latest version
$ pip install SomePackage==1.0.4     # specific version
$ pip install ‘SomePackage>=1.0.4‘     # minimum version
Stackoverflow上面关于pip的讨论:
  http://stackoverflow.com/questions/4750806/how-to-install-pip-on-windows/
  http://stackoverflow.com/questions/2436731/does-python-have-a-package-module-management-system/13445719
  http://stackoverflow.com/questions/3220404/why-use-pip-over-easy-install

3.代码分析工具

pylint官网:
    http://pylint.org/
Pylint 默认使用的代码风格是 PEP 8

4.三元操作

C ? X: Y
当C为True的时候取值X,否则取值Y
Python等价形式 X if C else Y
>>> a = 3
>>> print(‘haha‘) if a <5 else ‘hehe‘
haha
>>> print(‘haha‘) if a <2 else ‘hehe‘
‘hehe‘

5.switch..case

Python中没有switch...case...
以下两种方法代替:
1.if...elif...
if x == 0:
    return(‘000‘)
elif x == 1:
    return(‘1111‘)

2.{}.get(x)
{0:‘000‘,1:‘1111‘}.get(0)

6.断言assert

>>> x = 1
>>> y = 2
>>> assert x == y,‘not equals‘
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    assert x == y,‘not equals‘
AssertionError: not equals
等价于下面
>>> if __debug__ and not x == y:
    raise AssertionError(‘not equals‘)
Traceback (most recent call last):
  File "<pyshell#13>", line 2, in <module>
    raise AssertionError(‘not equals‘)
AssertionError: not equals
其中__debug__为True而且不能修改使用断言是有代价的,它会对性能产生一定影响。禁用断言的方法是在运行脚本时候加上-O(忽略与断言相关的语句)断言是被设计用来捕获用户定义的约束的,而不是用来捕获程序本身错误

7.数值交换不推荐中间值

常用方法:
temp = x
x = y
y = temp
推荐方法:
x,y = y,x
解析:
先计算=右边的值为(y,x)然后分别赋值给x,y变量
性能对比:
>>> import timeit
>>> timeit.Timer(‘x,y = y,x‘,‘x = 1;y = 2‘).timeit()
0.03071109231768787
>>> timeit.Timer(‘temp = x;x = y;y = temp‘,‘x = 1;y = 2‘).timeit()
0.035570626849676046

8.惰性计算lazy evaluayion

if x and y
在x为False的时候y不再计算
if x or y
在x为True的时候y不再计算
x和y表达式的前后顺序会对程序执行时间造成影响。

9.枚举enum

Enums have been added to Python 3.4 as described in PEP 435. It has also been backported to 3.3, 3.2, 3.1, 2.7, 2.6, 2.5, and 2.4 on pypi.
To use backports, do $ pip install enum34, installing enum (no numbers) will install a completely different and incompatible version.

from enum import Enum
Animal = Enum(‘Animal‘, ‘ant bee cat dog‘)
等价于
class Animals(Enum):
    ant = 1
    bee = 2
    cat = 3
    dog = 4

以上是下面链接的搬运:
http://stackoverflow.com/questions/36932/how-can-i-represent-an-enum-in-python

10.类型检查推荐isinstance而不是type

对应内建的基本类型来说使用type()进行类型检查是ok的;
基于内建类型扩展的用户自定义类型,type并不能准确返回结果;

>>> import types
>>> class UserInt(int):
    def __init__(self,val=0):
    self._val = int(val)

>>> n = UserInt(2)
>>> n
2
>>> type(n)
<class ‘__main__.UserInt‘>
>>> isinstance(n,int)
True

关于type() 2.7和3.4对于class的处理还是有区别的,如下图:

时间: 2024-10-19 12:33:54

Python读书笔记1的相关文章

Head Frist Python 读书笔记 列表推导(list comprehension)

列表推导(list comprehension)是个挺有意思的功能,应该是一个语法糖吧,列表推导这个名字大概是意译,不过list comprehension这个真不知道该怎么翻译. 列表推导是Python支持函数编程概念的一个例子. 列表推导的功能是减少代码书写量,可以省点事情,本来需要两行的,现在只需要一行. 比如说要对一个list中的所有数据都进行相同的处理,通常可以这么写: data=[1,2,3,4,5,6] result=[] for item in data: result.appe

python读书笔记

python有六个标准的数据类型: 1.Number(数字):int,float,bool,complex 2.String(字符串) 3.Tuple(元祖) 4.List(列表) 5.Dictionary(字典) 6.Sets(集合) 迭代器: 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 两个基本的方法:iter()创建迭代器对象 和 next()输出迭代器下一个元素. 生成器: 函数:  组织好的,可重复使用的,用来实现单一,或相关联功能的代码

Head Frist Python 读书笔记 第六章 定制数据对象

Bullet Points: 定义Class python中的class和JavaScript中的类似(后悔没有认真看JS),原则只有一个“方法是共享的,而属性不共享” class AthleteList: def __init__(self,a_name,a_dob=None,a_times=[]): self.name=a_name self.dob=a_dob self.times=a_times def top3(self): return sorted(set([float(sanit

Python读书笔记-第三章,四章

第三章 1. 字符串格式化 >>>format="hello %s  %s world" >>>values=('world','hot') >>>print format % values  #也可以接收单个字符串也 也可以用%f %d这类的类似与c的printf 匹配多个参数的时候应该用圆括号 >>>'%s plus %s equals %s'  %(1,1,2) >>>'%010.2f' %

python读书笔记之函数

函数的定义 def square_sum(a+b) c = a**2+b**2 print c 函数的功能是求两个数的平方和 return 可以返回多个值,相当于返回一个tuple return a,b,c 在Python中,当程序执行到return的时候,程序将停止执行函数内余下的语句.return并不是必须的,当没有return, 或者return后面没有返回值时,函数将自动返回None.None是Python中的一个特别的数据类型,用来表示什么都没有,相当于C中的NULL.None多用于关

python读书笔记之循环

for 循环 for 元素 in 序列 for a in [1,2,3,4]: print a 新的python函数range(),用来建立表 idx = range(5) print idx 这个函数的功能是新建一个表.这个表的元素都是整数,从0开始,下一个元素比前一个大1, 直到函数中所写的上限 (不包括该上限本身) while循环 while i < 10 print i i = i + 1 中断循环 continue   # 在循环的某一次执行中,如果遇到continue, 那么跳过这一

Python读书笔记之Hello World

第一种方式: $python >>>print('hello world') 屏幕上输出hello world print是一个常用函数 第二种方式: $python hello.py 第三种方式: #!/usr/bin/env python chmod 755 hello.py ./hello.py

python读书笔记之缩进和选择

缩进 Python最具特色的是用缩进来标明成块的代码.我下面以if选择结构来举例.if后面跟随条件,如果条件成立,则执行归属于if的一个代码块. if i > 0: x = 1 y = 2 四个空格的缩进 总结 if语句之后的冒号 以四个空格的缩进来表示隶属关系, Python中不能随意缩进

Head Frist Python 读书笔记 第五章 处理数据

Bullet Option: sort(*, key=None, reverse=None) sort方法用于原地排序,可以接收两个keyword-only参数,并且此方法是的排序是稳定的. key:一个表达式,比较时会根据该表达式的计算结果进行排序 reverse:默认False,升序排列:True,降序排列 默认使用升序排列 >>> source=[5,2,8,4,3,6,7] >>> source.sort() >>> print(source)