![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Python
时间走廊
这个作者很懒,什么都没留下…
展开
-
subprocess模块
Popen命令import subprocessres = subprocess.Popen('dir',shell=True,stdout=subprocess.PIPE,stdin=subprocess.PIPE,stderr=subprocess.PIPE)shell是命令解释器stdout是标准输出stdin是标准输入stderr是标准错误'dir’的执行结果交给了管道P...原创 2018-12-11 17:54:12 · 124 阅读 · 0 评论 -
动态导入模块
__ import __(‘m1.t’)从字符串中提取模块名,导入的模块是最顶级的部分即m1module_t = __import__('m1.t')module_t.t.test1()或者import importlibm = importlib.import_module('m1.t')...原创 2018-12-05 19:17:16 · 133 阅读 · 0 评论 -
反射
hasattr(b1,‘name’)检测b1是否能调用name属性getattr(b1,‘name’, ‘无’)获得b1能调用的属性的地址,相当于b1.name,没找到时显示默认参数内容,setattr(b1,‘key’,‘value’)设置b1的属性delattr(b1,‘name’)删掉name属性,相当于del b1.name可插拔设计:if hasattr(f1,'put'): ...原创 2018-12-05 18:21:34 · 85 阅读 · 0 评论 -
描述符
描述符优先级:类属性>数据描述符>实例属性>非数据描述符>__ getattr __同时具有__ get __ 属性和__ set __ 属性的新式类是数据描述符,只具有__ get __ 属性的新式类是非数据描述符实例化过程是设置实例属性的过程,数据描述符优先触发,即__ set __ 触发__ delete __ 是描述符的属性,而__ del __ 是析构方...原创 2018-12-08 16:22:08 · 123 阅读 · 0 评论 -
继承,多态,封装
继承有两层含义:1,改变,2,扩展多少就是类的两层含义的一个具体实现机制即调用不同的类实例化,对象下的相同的方法,实现的过程不一样Python中的标注类型就是多态概念的一个很好的示范类里面以一个下划线_开头的属性,约定只用于内部,以两个下划线 __ 开头的属性,class会自动给属性重命名为 _ 类名 __ 属性...原创 2018-12-05 16:12:01 · 95 阅读 · 0 评论 -
迭代器
class Foo: def __init__(self,x): self.x = x def __iter__(self): return self def __next__(self): self.x += 1 return self.xf1 = Foo(100)print(f1.x)print(n...原创 2018-12-07 23:20:15 · 90 阅读 · 0 评论 -
软件开发规范
bin目录放脚本的可执行文件,初始化启动脚本conf目录存放配置文件db目录存放数据lib目录存放公共类库log目录存放日志src目录存放主逻辑,或者叫core原创 2018-12-07 18:42:35 · 126 阅读 · 0 评论 -
super调用父类的方法
在子类中,super().__ init __(name,age)或者super().run()等调用父类其他方法,都可以省略self参数也可以避免在砖石继承中调用两次基类的方法class baseClass: num_base_calls = 0 def call_me(self): print('calling method on Base Class'...原创 2018-12-05 13:31:47 · 1301 阅读 · 0 评论 -
继承顺序
Python 3 中都是新式继承,采用广度优先,可以用__ mro __方法查看顺序.Python 2 中,如果基类的父类是object,就是新式继承,如果基类无父类则是经典继承,经典继承采用深度优先....原创 2018-12-05 11:28:21 · 88 阅读 · 0 评论 -
接口继承与归一化设计
接口继承:定义一个基类,基类中把自己的方法用装饰器的方式定义成接口函数,当子类中继承基类时,子类必须实现基类定义的方法,否则无法实例化:import abc class All_file(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): pass @abc.abstr...原创 2018-12-05 10:58:35 · 111 阅读 · 0 评论 -
os模块重点补充
os.stat(‘malin.py’)获取文件/目录信息st_atime上次查看时间st_mtime上次修改时间st_ctime创建时间os.path.join(a,b)路径拼接os.path.getmtime获取文件最后的修改时间...原创 2018-12-01 17:35:17 · 96 阅读 · 0 评论 -
BASEDIR
bin.py文件在bin包里时,无法调用my_module的模块,可以用BASE_DIR方法:import sys,osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))sys.path.append(BASE_DIR)原创 2018-12-01 16:35:24 · 200 阅读 · 0 评论 -
生成器
生成器是一种迭代器有生成器函数和生成器表达式两种生成器只能迭代一次函数中有yield将被识别为生成器,直接调用函数不会立即运行yield特性1,相当于return控制的是函数的返回值yield特性2,接受send传过来的值,并可以赋值给fi生产者,消费者模型import timexian = {'猪肉馅','白菜馅','牛肉馅','香菇馅'}def shengchanzhe():...原创 2018-11-28 16:36:38 · 80 阅读 · 0 评论 -
__name__
__ name __ 是一个变量,默认值为__ main __当文件被调用是,值为被调用文件的路劲if __ name __ == ‘__ main __’:1,用于被调用文件的测试2,主程序不愿意被调用用于函数部分后边,执行部分前边,当文件自己执行时,__ name __值等于__ main __ ,可以正常执行.当文件被调用时,等式不成立,只加载函数部分,不加载调试用的执行部分....原创 2018-12-01 10:23:14 · 107 阅读 · 0 评论 -
模块和包
引入一个模块:import cal引入多个模块:import cal,time引入模块cal并简化引入的功能:from cal import add引入模块cal全部功能并简化功能,但是不推荐:from cal import * 调用多层包from web.web1.web2.web3 import cal或者from web.web1.web2.web3.ca...原创 2018-12-01 10:04:53 · 64 阅读 · 0 评论 -
文件操作
import test导入test文件的模块__import__('test')导入test文件的模块Windows系统文件默认是gbk编码.open(‘文件路径’,encoding = ‘utf-8’),打开文件,设置源文件的编码模式,以f.close()关闭文件也可以用with…as :语句,可以打开多个文件:同一行代码太长,换行不影响结果,用:with open('马林2',...原创 2018-11-27 17:27:53 · 182 阅读 · 0 评论 -
类的内置attr属性
__ getattr __ 当使用getattr(f1,‘y’)调用的属性是类属性时会调用此函数.__ delattr __ 当使用del f1.y删除属性时,不管属性是否存在,都会调用此函数__ setattr __ 当使用setattr(f1,‘z’,111)设置新属性时,会调用此函数class Foo: x = 1 def __init__(self,y): ...原创 2018-12-05 19:53:55 · 382 阅读 · 0 评论 -
上下文管理协议
1.使用with语句结束后,会自动完成清理2.在需要管理一些资源,比如文件,网络连接,锁的编程环境中,可以在__ exit __ 中定制自动释放资源的机制.class Foo: def __init__(self,name,type = 'r',encoding = 'utf-8'): self.name = name self.type = type...原创 2018-12-08 20:43:21 · 155 阅读 · 1 评论 -
包装,授权
授权:是包装的一个特性包装一个类型通常是对已存在的类型的一些定制,这种做法可以新建,修改或删除原有产品的功能.其他的则保持原样.授权的过程,即是所有更新的功能都是由新类的某部分来处理,但已存在的功能就授权给对象的默认属性.import timeclass Open: def __init__(self,filename,mode='r',encoding='utf-8'): ...原创 2018-12-05 23:49:02 · 189 阅读 · 0 评论 -
configparser配置解析模块
类字典操作,不区分大小写DEFAULT默认块在遍历其他块时也会被遍历创建配置文件#!/usr/bin/env pythonimport configparserconfig = configparser.ConfigParser() #config={}config['DEFAULT']={ #创建默认块 'Serveraliveinterval':45, ...原创 2018-12-16 17:34:13 · 245 阅读 · 0 评论 -
错误和异常
错误分两种:语法错误逻辑错误异常:是程序运行时发生错误的信号包括:异常追踪信息,异常类型,异常值常见异常类型:AttributeError试图访问一个对象没有的属性IOError 输入/输出异常,基本上是无法打开文件ImportError 无法引入模块或包,基本上是路径问题或名称错误IndentationError语法错误,代码没有正确对齐SyntaxError Python语...原创 2018-12-10 00:09:52 · 117 阅读 · 0 评论 -
元类
元类就是类的类类可以用class创建,也可以用type创建:class Foo: passdef __init__(self,name): self.name = nameFFO = type('Foo',(object,),{'k':1,'__init__':__init__})print(FFO.__dict__)输出:{‘k’: 1, ‘init’: &...原创 2018-12-09 20:17:02 · 80 阅读 · 0 评论 -
property静态属性
property静态属性的使用,可以配合setter,deleter对属性进行操作,getter没定义时默认property代替getter,如果定义了就运行getterclass Foo: def __init__(self): self.original_price = 100 self.discount = 0.5 @property ...原创 2018-12-09 20:00:41 · 168 阅读 · 0 评论 -
__ call __
实例加()本质是调用类的__ call __ 方法,编程可执行class Date: def __init__(self,year,mon,day): self.year = year self.mon = mon self.day = day def __call__(self): print('我执行啦')...原创 2018-12-07 14:13:36 · 123 阅读 · 0 评论 -
__ del __
析构函数__ del __ ,使用del删除实例时才触发,否则等到文件执行完毕进行回收时才触发class Date: def __init__(self,year,mon,day): self.year = year self.mon = mon self.day = day def __del__(self): ...原创 2018-12-07 14:07:18 · 707 阅读 · 0 评论 -
__ slots __
优点:更快的属性访问速度减少内存消耗1. 只有非字符串的迭代器可以赋值给__slots__class A(object): __slots__ = ('a', 'b', 'c')class B(object): __slots__ = 'abcd'若直接将字符串赋值给它,就只有一个属性。...原创 2018-12-07 13:45:47 · 232 阅读 · 0 评论 -
描述符制作装饰器
用描述符自制@propertyclass Lazyproperty: def __init__(self,func): self.func = func #接收Lazyproperty(area)传入的函数area的地址 def __get__(self, instance, owner): return self.fun...原创 2018-12-09 11:33:20 · 135 阅读 · 0 评论 -
__ format __
formatclass Date:def init(self,year,mon,day):self.year = yearself.mon = monself.day = dayd1 = Date(2016,12,3)x = ‘{0.year}’.format(d1)print(x)原创 2018-12-06 14:58:51 · 178 阅读 · 0 评论 -
类class,内置属性,实例
class包含两类属性:1,数据属性2,函数属性dir()查看类的所有属性名列表__ dic __查看类的属性字典class Chinese:print(dir(Chinese))print(Chinese.__ dict __)原创 2018-12-03 20:32:54 · 469 阅读 · 0 评论 -
logging模块
debug()调试级别info()信息级别warning()警告级别error()错误级别critical()危险级别默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG...原创 2018-12-03 20:19:07 · 79 阅读 · 0 评论 -
str和repr
__ str __ 使用print时触发str(f1)---->触发f1.__ str __()class Foo: def __init__(self,name,age): self.name = name self.age = age def __str__(self): return '名字是%s 年龄是%s'% (se...原创 2018-12-06 11:28:31 · 105 阅读 · 0 评论 -
item系列内置函数
点的方式操作属性与attr相关:中括号的方式操作属性与item系列相关__ setitem ____ getitem ____ delitem __原创 2018-12-06 11:05:54 · 831 阅读 · 0 评论 -
获取当前文件模块
获取当前文件模块import sysobj1 = sys.modules[name]x = 1print(hasattr(obj1,‘x’))原创 2018-12-06 10:23:25 · 89 阅读 · 0 评论 -
类的装饰器
一切皆对象语法糖@可以用在函数上,也可以用在类上函数也是一种类,也有属性字典,也可以给属性赋值等操作def deco(obj): obj.x = 1 obj.y = 2 return obj@deco #相当于Foo = deco(Foo)class Foo: passprint(Foo.__dict__)@deco #相当于test =...原创 2018-12-08 22:59:02 · 119 阅读 · 0 评论 -
常用内置函数
abs()取绝对值all()可迭代对象全部为真时为True,另外可迭代对象为空时也为Trueany()可迭代对象有一个为真时返回Truebin()十进制转二进制oct()十进制转八进制hex()十进制转十六进制bool()判断布尔值bytes()字符串转换为字节print(bytes('你好',encoding='utf-8'))print(bytes('你好',encoding...原创 2018-11-27 00:20:52 · 169 阅读 · 0 评论 -
re模块,正则表达式
通配符".":代表任意一个字符,换行符不算.“^”:字符串开头匹配“$”:字符串结尾匹配“*”:匹配0至无穷次(贪婪匹配)“+”:匹配1至无穷次(贪婪匹配)“?”:匹配0次至1次{0,} == *{1,} == +{0,1} == ?{6} 匹配6次(精准匹配){1,5} 匹配1-5次(贪婪匹配)前面的*,+,?等都是贪婪匹配,后面加?变成惰性匹配,按最小次数匹...原创 2018-12-02 16:21:11 · 168 阅读 · 0 评论 -
enumerate
enumerate()根据可迭代对象(第一个参数)返回索引(第二个参数,默认为0)和对应的值,一般用在for循环中:tu = ('alex','ereic','rain')for i in enumerate(tu): print(i)for i,v in enumerate(tu,10): print(i,v)输出:(0, ‘alex’)(1, ‘ereic’)...原创 2018-11-24 14:57:51 · 217 阅读 · 0 评论 -
买鸡问题
问:公鸡5文钱一只,母鸡3文钱一只,小鸡3只一文钱,用100文钱买100只鸡,其中公鸡,母鸡,小鸡,都必须有,问各买多少只鸡刚好凑足100文钱?循环法:for x in range(1,100//5): for y in range(1,100//3): for z in range(1,100): if x + y + z ==100 and ...原创 2018-11-24 14:17:19 · 332 阅读 · 0 评论 -
九九乘法表
for i in range(1,10): for n in range(1,i+1): st1 = str(n)+'X'+str(i)+'='+str(i*n)+'\t' print(st1.expandtabs(10),end = '') print('\n')输出:1X1=11X2=2 2X2=41X3=3 2X3=6...原创 2018-11-24 11:30:30 · 98 阅读 · 0 评论 -
str的方法使用
capitalize()把字符串进行首字母大写:test = 'alex'v = test.capitalize()print(v)casefold()和lower()把字符串转换成小写,前者更倾向国际使用:test = 'ALEX'v1 = test.casefold()print(v1)v2 = test.lower()print(v2)center()设置宽度并居中,...原创 2018-11-22 18:13:21 · 440 阅读 · 0 评论