温故而知新。
Python文件头
- 设置脚本执行解释器路径
告诉操作系统执行脚本时调用/usr/bin下的python解释器
1 |
防止在/usr/bin路径下不存在python解释器的情况,从env设置中查找Python安装路径,再调用相应路径下的解释器
1 |
- 设置脚本脚本编码格式
1 | coding=utf-8 |
or
1 | -*- coding: utf-8 -*- |
注释
- 单行注释
1 | This is comment |
- 多行注释
1 | ''' |
- 函数说明
1 | def some_func(): |
语句
- 序列解包
1 | values = 1. 2. 3 # This is tuple |
- 相等性和同一性
is运算符判定同一性而不是相等性
1 | x = y = [1,2,3] |
- 列表与迭代
当需要迭代一个巨大的序列时xrange会比range更高效,range函数一次产生整个序列,而xrange一次只创建一个数
实现原理可以参考:
1 | class irange(object): |
- 编号迭代
使用enumerate可以迭代索引-值
1 | for index, str in enumerate(strings): |
- in
消除exec和evel的全局污染
限制exec执行的作用域只存在于scope当中
1 | from math import sqrt |
为evel提供命名空间
1 | scope = {} |
函数参数参数
- 收集参数*和**
python函数定义时的参数可以分为位置参数和关键字参数
1 | def hello(greeting, name): |
使用*收集其余的位置参数
1 | def some_func(*args): |
使用**收集其余的关键字参数
1 | def some_func(*kargs): |
- 参数分配*和**
1 | params = (1, 2) |
1 | params = {'a': 1, 'b':2} |
面向对象
- 私有化
Python并没有真正的私有化支持
使用双下划线,类内部使用双下划线开始的名称都被翻译为’_
1 | class Some: |
另外类的函数名称前包含单下划线的方法都不会被imports语句导入