参考
函数和常用语法
raw_input 与 input
raw_input
只在 2 中存在,返回字符串,在 2 中,input
返回输入表达式的值;\
3 中 input 返回字符串。
type
查看变量类型
交换两变量值
1 | a, b = b, a |
while/for else 语句
跟 if else 相同,在 while/for 条件为假时执行 else。所以,在未进入循环或循环正常完成后,else 部分会执行,而循环被 break 或出现异常,则不会执行 else。
1 | for value in ["Sat","Sun","Mon"]: |
yield 关键字
在函数中使用 yield 关键字让函数返回一个 生成器。 该生成器调用方式十分奇特,类似于断点调试,在调用其 next()
方法时运行到 yield 关键字处并返回参数,可多次调用直到函数结束(抛出 StopIteration 异常)。可以在函数中使用多个 yield,就像设置多个断点。隐含的一个特性是,每次只能取到下一个值,而不能回退取到上一个值。通常用 for/while
循环使用生成器,以代替循环调用 next()
,
1 | def gen(stop): |
sign 函数
1 | sign = lambda a: 1 if a > 0 else -1 if a < 0 else 0 |
print 不换行
python2 中 print 不换行,python3 中使用参数 end=''
1 | print("Hello World", end='') |
dict 键列表
使用 list(dict)
获取 dict
的键列表
惯用处理
pip 更换仓库源
1 | pip install numpy -i http://pypi.mirrors.ustc.edu.cn/simple/ # 临时用中科大源安装numpy |
pip 下载安装包并离线安装
1 | # 只下载包 |
从文件路径获取文件名与扩展名
1 | import os |
时间
datetime 与 字符串相互转换
1 | from datetime import datetime |
判断对象为数字
1 | import numbers |
读 excel 表
1 | import xlrd |
生成随机数
random
1 | import random |
正态随机
生成正态随机数列可用numpy.random.normal(mu, sigma, sample_num)
正则
匹配例子
1 | import re |
list 操作
range()
1 | # range(stat=0,stop,step=1) |
列表推导式
1 | [x**2 for x in range(10)] # 创建一个新 list |
切片
list 切片作为右值,会复制数据并返回引用。而对切片的修改会直接作用于原 list 上。
1 | # list[start:stop:step], 用法类似 range,如果意义明确,可省略参数 |
增加元素
1 | list.append(x) # 追加到末尾 |
判断元素存在
1 | x in list # 返回 bool 类型,是否存在 x |
按索引查元素
索引可为负,范围: [-len, len-1]
按元素查索引
1 | list.index(x) # 第一次出现 x 位置,如果 x 不存在会报错 |
删除元素
1 | del list[index] # 删除 index 处元素 |
反转
1 | list.reverse() |
zip 合并
1 | zip(la,lb,lc) # “同索引元素”组成元组,构成列表,长度为输入最短列表的长度 |
模块
一个模块是一个源文件,文件名即模块名。模块由 import
语句加载后,便可以访问其中定义的对象。
import 与 from import
当 python 解释器 import
一个模块时,会执行其中的代码。
1 | import module # 加载 module,使用其中对象时应该用 module.obj |
__name__
属性
当 python 解释器加载一个模块时,会设置每个模块的属性 __name__
。 只有当前运行模块的该属性被设置为 __main__
,所以可用以下语句判断当前模块是否是程序入口
1 | if __name__ == "__main__": |
模块搜索路径
1 | # sys.path 列表存储了模块搜索路径 |
搜索路径初始包括:
- 运行脚本目录
- 环境变量 PYTHONPATH 中存储的值
- Python 模块的安装目录
dir()
1 | dir() # 返回当前模块定义的对象名列表 |
模块安装
三种方式:
进入下载安装包目录,运行 setup.py 程序:
1 | # 源码安装 |
win下 Anaconda 安装依赖包
进入Anaconda安装目录
1 | cd Scripts |
更换conda源(清华):
1 | conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ |
包
是一个包含 __init__.py 的文件夹,导入模块时需要加上包前缀,类似 Java。
作用域
三大作用域
只有模块(module),类(class)以及函数(def
、lambda
)才会引入新的作用域,其它的代码块(如if、try、for等,甚至列表推导式也是)不会引入新的作用域
子级作用域与上级
在子级作用域可访问上级作用域变量。让上级变量指向另一个对象不能使用语句 same_name = obj
, 该句被视为在子级作用域定义一个同名变量,并隐藏了上级变量。
1 | def run(): |
global 与 nonlocal 语句
如果想在子级作用域中让上级作用域变量指向其他对象,可以用 global
与 nonlocal
语句。
1 | x, y = 0, 0 |
global
最先出现,用于在局部引用全局变量,随后又加入 nonlocal
,使子级作用域引用 非全局的 上级变量。
类变量与实例变量
类变量的定义与访问其中两种方式:
class_name.class_var
- 类定义内方法定义外
class_var
实例变量定义与访问有两种方式:
obj_name.obj_var
- 在有
self
参数的方法定义中self.obj_var
用访问实例的方式可以访问类变量,就像 在子级作用域访问上级变量,只能访问而不能让其指向另一个对象,而且如果实例变量与类变量同名则访问实例变量。
1 | class cls: |
字符串
模板
类似 C 语言的格式化字符串,用 % 号连接模板字符串(Template)与匹配元组。
1 | '%s is a string. %d is a int.' % ("Hello World", 0) # 该表达式返回一个字符串 |
原生字符串(常量)
在字符串字面量前加 r ,会使之成为原生字符串字面量,不会对字符进行转义。
1 | r"\n" == "\\n" # 返回 True |
加操作
字符串只允许与字符串进行加操作
函数参数
参数传递
函数形参(函数定义参数)复制了实参(传入函数的变量)的引用,类似 Java,对形参引用对象的修改实际上在修改实参引用对象,但让形参指向其他对象不会对实参有影响。
缺省与变长
函数参数的定义顺序与调用顺序应该遵循:关键字参数–>缺省参数–>变长参数–>关键字参变长数
关键字参数
最基本的一类参数,调用时可指明形参名(关键字)。与其他参数不同,必需赋值。
1 | def fun(a, b): |
缺省参数
缺省参数有缺省值。除了顺序在关键字参数后以及有缺省值外,与关键字参数基本相同。
1 | def fun(a, b=2): # b 为缺省参数 |
变长参数
参数个数不定,形参最终得到元组,调用时可不传,一个个传递或传一个元组。
1 | def fun(a, *b): # b 为变长参数 |
关键字变长参数
参数个数不定,而且必须指明关键字。形参最终得到字典,与变长参数类似,调用时可不传,一个个传递或传一个字典。
1 | def fun(**kwargs): |
参数顺序
1 | def fun(a, b=1, *c, **d): # 函数定义时形参须根据类型按序定义 |
常识
元组
- 元素不能改变
False
判断语句中None,False,空字符串””,0,空列表[],空字典{},空元组()都相当于False
虚拟环境
1 | sudo pip3 install virtualenv |
文件操作
当前目录
1 | import os |
简单文件读写
1 | col = [] |
在控制台运行源文件
1 | execfile('python_code.py') |
错误及解决办法
pip安装出现SOCKS支持问题
报错Missing dependencies for SOCKS support
。在Ubuntu下,用unset all_proxy && unset ALL_PROXY
命令解除代理设置。