1. 循环 if, while, for
break : 结束整个循环
continue :跳出当前这次循环,但不结束整个循环
else :结束整个循环后才执行,不能与break合用,但可以与continue合用。
2. bool 惰性求值,从左到右判断,只要出现一个false就返回。
3. 打开文件
1 # 常用方法 2 # 打开文件test.txt 3 file = open('test.txt', 'r') 4 # 读取文件 5 file.read() 6 # 关闭文件 7 file.close() 8 9 # with 方法(系统自动会关闭文件) 10 with open('test.txt', 'r') as f: 11 file = f.read() 12 13 ''' 14 with 工作机制分析 15 打开文件时,调用对象 test 的 __enter__方法 16 关闭文件时,调用对象 test 的 __exit__方法 17 分析如下 18 ''' 19 class test(object): 20 def __init__(self, args): 21 self.args = args 22 def __enter__(self): 23 print('I am come in now') 24 return self.args 25 def __exit__(self, type, value, traceback): 26 print('I am come out now') 27 with test('hello men') as f: 28 # 返回 __enter__ 方法 return 的值 29 print(f)
4. 断言
# 断言是一种开发时期检验代码的方式,只断言绝对不能出现的错误。
assert
# 格式:
# assert 表达式,"出错后抛出异常信息"
# 默认返回True
5. 异常处理
1 ''' 2 1. 尽量一个try就用一个except 3 2. 慎用异常: 4 1) 找到python内置异常 5 2)理解python的内置异常分别对应什么情况 6 3)阅读你的代码,找到你的代码里可能会抛出异常的地方 7 4)仅对小部分代码进行异常处理 8 ''' 9 try: 10 '''有可能抛出异常的代码''' 11 print('test') 12 except: 13 '''try里面的代码抛出异常就执行except代码块里的代码''' 14 print('error') 15 else: 16 '''tyr代码块里的代码如果没有抛出异常就执行else代码块里的代码''' 17 print('hello') 18 finally: 19 '''不管如何,finally里的代码总会被执行''' 20 print('hai') 21 ''' 22 异常应用方法 23 1.(在已知异常的前提下)捕获正确的异常,不要直接 try except 24 2.异常的处理,要有日志。 25 ''' 26 27 '''日志的使用''' 28 import logging 29 # 实例化一个logger对象 30 logger = logging.getLogger() 31 # 指定日志文件存储路径 32 hdlr = logging.FileHandler('/tmp/testlog.txt') 33 # 格式化日志输出格式 34 formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 35 # 传入格式到日志对象logger 36 hdlr.setFormatter(formatter) 37 # 传入文件到日志对象logger 38 logger.addHandler(hdlr) 39 # 生成日志等级 40 logger.setLevel(logging.NOTSET) 41 # 生成debug日志等级 42 logger.debug('This is a debug message') 43 # 生成error日志等级 44 logger.error('This is a error message')
6. 函数
1 #函数要有返回值,return 2 #写函数文档,doc('''函数说明文档'''),如: 3 def test(a = 666): 4 '''函数说明文档''' 5 return a 6 print(test.__doc__) 7 print(test()) 8 ''' 9 变量作用域,先看函数局部变量,如果没有再找全局变量。 10 11 函数参数(顺序排列):必选参数, 默认参数, 可变参数, 关键字参数。 12 必选参数, a # 没有默认值 13 默认参数, b = 1 # 有默认值(在调用时可以重新赋值),在某种情况下降低函数的难度。 14 可变参数, *args # args 接收的是一个tuple。 15 关键字参数, **kwargs # kwargs 接收的是一个dict。 16 如: 17 ''' 18 def test(a, b = 1, *args, **kwargs): 19 return a, b, args, kwargs 20 print(test(1,2,3,[1,2,3],aa=1,bb=2,cc=3)) 21 22 ''' 23 判断传入参数的数据类型: 24 isinstance(传入的参数, 数据类型),如: 25 判断传入参数是不是int类型,如果是就存进list,否则pass。 26 ''' 27 def func(*a): 28 list = [] 29 for b in a: 30 if isinstance(b, int): 31 list.append(b) 32 else: 33 pass 34 return b 35 print(func(1,2,'d','f',3,'panisme',666)) 36 37 # lambda 表达式 ,如: 38 a = [1,2,3,4,5,6] 39 b = filter(lambda x :x!=5,a) # 下面是等价表达 40 # 分析过程: 41 b = [] 42 for x in a: 43 if x != 5: 44 b.append(x)
5. 面向对象编程
1 ''' 2 构造函数,初始化类方法内部变量,给整个类方法使用。 3 def __init__(self, args): 4 self.args = args 5 析构函数,销毁类方法内部变量,减少内存使用。 6 def __del__(self): 7 del self.args 8 ''' 9 class ClassName(object): 10 """docstring for ClassName""" 11 def __init__(self, arg): 12 super(ClassName, self).__init__() # 使用 super 方法继承某个类,优点是可直接使用该类的构造函数。 13 self.arg = arg 14 @staticmethod # 静态方法的装饰(好处如下)。 15 def function(): 16 pass 17 print(ClassName.function()) # 不用实例化一个对象,直接把类里的方法当成属性来用 18 19 '''类的继承''' 20 import random as r 21 class Fish: 22 def __init__(self): 23 self.x = r.randint(0,10) 24 self.y = r.randint(0,10) 25 def move(self): 26 self.x -= 1 27 print('我的位置是:', self.x, self.y) 28 class Goldfish(Fish): 29 pass 30 class Carp(Fish): 31 pass 32 class salmon(Fish): 33 pass 34 class Shark(Fish): 35 def __init__(self): 36 # 直接重写Fish父类,其中self是子类中的self 37 #Fish.__init__(self) 38 # 使用super()函数重写Fish父类,不需要传参进来;以后要改用继承的类,直接在子类中修改父类名即可 39 super().__init__() 40 self.hungry = True 41 def eat(self): 42 if self.hungry: 43 print("吃货的梦想就是天天吃^_^") 44 self.hungry = False 45 else: 46 print("太撑了,吃不下了!") 47 # 实例化一条鱼,生成一个fish对象 48 fish = Fish() 49 # 调用fish对象(鱼)的move方法 50 fish.move() 51 goldfish = Goldfish() 52 goldfish.move() 53 goldfish.move() 54 shark = Shark() 55 shark.move() 56 shark.eat() 57 shark.eat() 58 59 '''类的多重继承''' 60 class Base1: 61 def foo1(self): 62 print("我是foo1,我为Base1代言...") 63 class Base2: 64 def foo2(self): 65 print("我是foo2,我为Base2代言...") 66 # 多重继承父类,此例继承了Base1和Base2 67 class C(Base1, Base2): 68 pass 69 c = C() 70 c.foo1() 71 c.foo2()