Table of Contents
1 Python笔记
1.1 常用方法
1.1.1 os.sep
可以取代操作系统特定的路径分割符,windows下为\\,linux下为/
1.1.2 os.path.existe()
用来检验给出的路径是否真地存在
1.1.3 os.system()
用来运行系统命令
1.1.4 os.name
字符串指示你正在使用的平台。比如对于Windows,它是’nt’,而对于Linux/Unix用户,它是’posix’
1.1.5 os.getcwd()
函数得到当前工作目录,即当前Python脚本工作的目录路径。
1.1.6 os.listdir()
返回指定目录下的所有文件和目录名。
1.1.7 os.remove()
用来删除一个文件。
1.1.8 print
1.1.9 open类
打开文件,例:
f = open('poem.txt', 'w') # open for 'w'riting f.write(poem) # write text to file f.close() # close the file
打开模式可以为读模式(’r’)、写模式(’w’)或追加模式(’a’),默认为只读模式
1.1.10 异常处理
class ShortInputException(Exception): '''A user-defined exception class.''' def __init__(self, length, atleast): Exception.__init__(self) self.length = length self.atleast = atleast try: s = input('Enter something --> ') if len(s) < 3: raise ShortInputException(len(s), 3) # Other work can continue as usual here except EOFError: print('\nWhy did you do an EOF on me?') except (RuntimeError, ShortInputException) as e: print('ShortInputException: The input was of length %d, \ was expecting at least %d' % (e.length, e.atleast)) else: print('No exception was raised.') finally: print("finally")
finally不论异常是否发生都会执行,即使try中有return,执行顺序为try->except->else->finally
1.1.11 reduce
二元操作函数,用来将一个序列中的所有数据进行下列操作:先对序列中的前两个数据进行指定操作,得到的结果再与第三个数据进行指定操作,依次往下。例:
#求阶乘 sum = reduce(lambda x,y:x*y,range(1,11))
1.1.12 exec和eval语句
exec语句可用来执行储存在字符串或文件中的Python语句。例:
exec('print("Hello World")')
eval语句用来计算并返回存储在字符串中的有效Python表达式。例:
eval('2*3')
1.1.13 assert语句
assert语句用来声明某个条件是真的。并且在它非真的时候引发一个错误。例:
mylist = ['item'] assert len(mylist) >= 1#断言为真 mylist.pop() assert len(mylist) >= 1#此处抛出AssertionError错误
assert false可添加到预计不会执行到的代码里
1.1.14 repr
取得对象的规范字符串表示,获得的字符串可以通过eval转换回python对象。即eval(repr(object)) == object。
1.2 类
类中的方法定义时需要加多一个参数代表自身(惯例为self),调用时忽略该参数。 初始化函数__init__,类似构造函数。 当类被del删除时会调用__del__函数。
1.2.1 类中的成员变量
类中定义的变量类似静态变量,可通过类名.xxx来调用。如果没有重名,每个类的实例也可以通过self.xxx来访问该变量,否则self.xxx代表普通变量,仅在该实例内存在。
变量名 | 说明 |
---|---|
_xxx | 不能用’from module import *’导入,可以通过子类访问到,类似于protect |
__ xxxx | 类中的私有变量名,不能通过子类访问到,类似于private |
_ xxx _ | 系统定义名字 |
build时私有变量__xxx会轧压生成对应的_ClassName__xxx公有变量,因此子类定义的同名变量不会覆盖基类的私有变量。
1.2.2 可覆写的特殊方法
__init__(self,…) | 这个方法在新建对象恰好要被返回使用之前被调用。 |
__del__(self) | 恰好在对象要被删除之前调用。 |
__str__(self) | 在我们对对象使用print语句或是使用str()的时候调用。 |
__lt__(self,other) | 当使用 小于 运算符(<)的时候调用。类似地,对于所有的运算符(+,>等等)都有特殊的方法。 |
__getitem__(self,key) | 使用x[key]索引操作符的时候调用。 |
__len__(self) | 对序列对象使用内建的len()函数的时候调用。 |
1.2.3 继承
class A: pass class B(A,C): pass 即为B类继承A类与C类
1.3 运算符
逻辑运算符为not or and。and 和 or 执行布尔逻辑演算,但是它们并不返回布尔值,而是返回它们实际进行比较的值之一。
0、”、[]、()、{}、None 在布尔上下文中为假,其它任何东西都为真。
and 返回第一个假值或最后一个值(当所有值为真)。 or 返回第一个真值或最后一个值(当所有值为假)。
1.4 作用域
变量默认为局部变量,写变量时需要global关键字指定为全局变量,否则为局部变量定义赋值。
1.5 模块
模块类似于一个已经实例化且没有构造函数的类,文件名即为模块名,可用import导入并通过文件名访问里面的对象。或者from 模块 import 函数, 变量常量来当作当前模块的对象直接使用。 每个模块有对应变量__name__的名字,如果该模块为当前运行的主模块则该名字为__main__,否则为包括完整包路径的模块名。
1.6 函数
如果函数体为空则必须另起一行加pass,目的为保证格式。 文档字符串为写在函数最开头的字符串,可以是俩引号括起的单行字符串,也可以是俩组三个引号括起的多行字符串,一般依照“第一行以大写字母开头以句点(.)结束,第二行是空行,从第三行开始是详细描述。”的格式定义,可通过__doc__访问。
1.6.1 不定长参数
参数格式为 *xxx 表示接受元组。 为 **xxx 表示接受字典。 调用时所有*xxx必须要在所有**xxx之前。
def test(*args,**dic): for arg in args : print(arg) for k,v in dic.items(): print(k ,':',v) >>> test("yes",1,2,me="python",where="china") yes 1 2 me : python where : china
1.6.2 lambda
类似于匿名函数。
def f(x): return x*2 等价于 lambda x: x*2
因此lamdba后可以跟所有可以return的语句,lamdba本身是一个表达式,可以直接用作列表或字典的成员。
1.7 装饰器
装饰器作用为在不改变原函数内容与调用接口基础上给原函数增加功能。 例:
@deckit def foo(): print 'in foo()' 等价于 def foo(): print 'in foo()' foo = deckit(foo)
即为替换foo函数为包纳foo函数所有功能的新函数,其中装饰函数deckit必须返回一个与原函数有一样参数的函数。
1.8 多重继承
class DerivedClassName(Base1,Base2,Base3):
对于该类函数的解析规则是深度优先,先是Base1,然后是Base1的基类,如果找到了对应函数或变量则不再继续。
1.9 包
包即是根目录存在__init__.py的文件夹,包根目录下导入的模块必须通过“import 模块”写入__init__.py内。 init.py会在导入包时被执行,__init__.py中的__all__变量代表import *时将导入的子包与子模块,例如__all__ = [‘Module1’, ‘Module2’, ‘Package2’]。 貌似python3会把所有文件夹看作包,无须__init__.py也能导入文件夹下的模块。
1.10 序列
1.10.1 列表综合
listone = [2, 3, 4] listtwo = [2*i for i in listone if i > 2]#(返回的表达式 循环 条件) print(listtwo)
1.10.2 if else多种写法
a, b, c = 1, 2, 3 1. if a>b: #冒号代表后面跟着语句块 c = a else: c = b 2. c = a if a>b else b #如果a<=b那么b语句覆盖a语句 3. c = [b,a][a>b] #True对应1,False对应0 4. c = (a>b and [a] or [b])[0] #[a]与[b]必定为True
1.11 迭代器
可通过生成器生成。 例如: [2*i for i in listone if i > 2]
1.11.1 yield
yield关键字可使得方法成为生成器,返回值成为迭代器,迭代项从yield标记的表达式处分隔,每次迭代器调用next()时执行至下个yield标记处并冻结。且迭代项返回值即为yield表达式的参数值。
def fib(max): #构造一个斐波拉契数列 a, b = 1, 1 while a < max: yield a #generators return an iterator that returns a stream of values. a, b = b, a+b