python基础
小布很生气
这个作者很懒,什么都没留下…
展开
-
自定义元类
class MyType(type): def __init__(self,a,b,c): print("构造") def __call__(self, *args, **kwargs): obj = object.__new__(self) # 创建一个对象 self.__init__(obj,*args,**kwargs)...原创 2018-05-16 17:25:58 · 292 阅读 · 0 评论 -
闭包
1.什么是闭包在函数内部在定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量统称为闭包。#定义一个函数def test(number): #在函数内部再定义一个函数 def test_in(number_in): print("in test_in 函数, number_in is %d"%number_in) ret...原创 2018-04-30 14:51:38 · 95 阅读 · 0 评论 -
生成器
1.通过列表方式直接创建一个列表,不仅列表容量有限,而且会占很大的内存空间。python中,这种一边循环一边计算的机制,称为生成器:generator2.创建生成器的方法In [15]: L = [ x*2 for x in range(5)]In [16]: LOut[16]: [0, 2, 4, 6, 8]In [17]: G = ( x*2 for x in range(5))...原创 2018-04-30 10:44:02 · 140 阅读 · 0 评论 -
限制动态添加属性,__slots__
python允许在定义class时,定义一个特殊的__slots__变量,来限制class实例梦添加的属性。>>> class Person(object): __slots__ = ("name", "age")>>> P = Person()>>> P.name = "老王">>原创 2018-04-30 10:15:10 · 181 阅读 · 0 评论 -
python是动态语言
1.它是一类在运行时可以改变其结构的语言(PHP,JavaScript,Ruby是动态语言,C,C++不是)2.运行的过程中给对象添加属性>>> class Person(object): def __init__(self, name = None, age = None): self.name = name self.age = age...原创 2018-04-29 21:14:21 · 637 阅读 · 0 评论 -
元类
元类,1.类也是对象大多数语言中,类就是一组用来描述如何生成一个对象的代码段,python中仍然成立。在python中类同样也是一种对象。python解释器在执行的时候就会创建一个对象。>>> class ObjectCreator(object):… pass…于是乎你可以对它做如下的操作:你可以将它赋值给一个变量你可以拷贝它你可以为它增加属性你可以将它作为函数...原创 2018-04-29 20:58:01 · 110 阅读 · 0 评论 -
__getattr__ __getitem__ __getattribute__ 调用属性内置方法
# 执行相应的方法 触发相应的函数 可以进行相应的限制 制约用户 返回提示信息# 操作函数属性字典__dict__class Foo: x=1 def __init__(self,y): self.y = 1 def __getattr__(self, item): print("%s不存在"%item) # 如果实例对象找没有的...原创 2018-05-14 11:09:49 · 407 阅读 · 0 评论 -
反射hasattr getattr setattr delattr ,动态添加属性,isinsance,issubclass
# 反射应用 判断属性是否存在查看属性字典 对象名称点__dict__hasattr() 检测属性字典__dict__中有没有查找的属性 如果有返回True 没有返回Falsegetattr() 检测属性字典 如果有返回函数地址 可以赋值调用 如果没有 报错第三位可以填写没有找到默认返回内容 不会报错setattr() 添加或修改属性 (实例对象名称,“方法名”,内容)d...原创 2018-05-14 08:28:56 · 176 阅读 · 0 评论 -
装饰器
@函数名 是python的一种语法糖#定义函数:完成包裹数据def makeBold(fn): def wrapped(): return "<b>" + fn() + "</b>" return wrapped#定义函数:完成包裹数据def makeItalic(fn): def wrapped(): ret...原创 2018-05-06 21:17:18 · 74 阅读 · 0 评论 -
json 模块
# json 可以转换为其它语言使用# json 是一个桥# 任何语言 通用字符串 json可以dumps转换为最外层单引号的字符串 为json格式 数据# 转换为json字符串后 内容中的''变为“” 最外层为''# 解析json字符串时可以# 读写文件时可以用到 网络传输时也可以用到# 文件写入读取 可以使用 dump load 格式为 jsoon.dump(数据,文件...原创 2018-05-21 11:36:27 · 135 阅读 · 0 评论 -
内置item和attr方法规则 print方法原理
# -*- coding:utf-8 -*-# 点的形式操作 就是调用 __attr__ 系列# 底层字典操作 就是调用 __item__ 系列# __delitem__ 操作使用底层字典形式访问类属性 会触发这个方法class Foo: def __init__(self,x): self.x = x def __delitem__(self, key)...原创 2018-05-14 22:35:36 · 462 阅读 · 0 评论 -
__format__函数 __slots__函数 __doc__函数
# 自定义format函数返回值# 用字典定义格式format_dic = { "ymd":"{0.year}{0.mon}{0.day}", "m:y:d":"{0mon}{0.day}{0.year)", "y-m-d":"{0.year}-{0.mon}-{0.day}"}class Form: def __init__(self,year,原创 2018-05-15 15:46:27 · 145 阅读 · 0 评论 -
缺省参数
# 缺省参数def extendList(val,list=[]): list.append(val) return listlist1 = extendList(10)list2 = extendList(123,[]) # 缺省参数 会随着调用改变list3 = extendList('a')print(list1)print(list2)print(lis...原创 2018-05-22 16:06:30 · 570 阅读 · 0 评论 -
利用描述符完成@property功能
# -*- coding:utf-8 -*-# 非数据描述符 代理Room的area属性class property: def __init__(self,func): # print(func) # <function Room.area at 0x00578C00> Room类area方法的 self.func = fun...原创 2018-05-16 14:15:59 · 107 阅读 · 0 评论 -
类装饰器传参 描述符代理判断属性类型
# 代理判断属性类型class typed: def __init__(self,key,exceted_tupe): self.key = key # 把name传入 self.exceted_type = exceted_tupe # 需求类型 def __set__(self, instance, value): ...原创 2018-05-16 09:34:42 · 125 阅读 · 0 评论 -
实例数据代理判断输入类型
# -*- coding:utf-8 -*-# 数据描述符 代理 其他类数据属性class typed: def __set__(self, instance, value): print("********set********") print(instance) # 返回片p1对象 内存地址 print(value) #...原创 2018-05-15 22:10:35 · 130 阅读 · 0 评论 -
文件open,__enter__ __exit__ 方法,模拟with
class Open: def __init__(self,name): self.name = name def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): print("执行exit")...原创 2018-05-15 19:51:42 · 402 阅读 · 0 评论 -
开发规范,导入文件模块路径
# \bin 目录存放可执行文件 可以选择程序的入口# \conf 运行参数# \db 存放数据# \lib 公共的类库# \log 日志# \src 主逻辑 核心# 导入文件路径import sys,osBASE_DIR = os.path.dirname(os.path.dirname(__file__))sys.path.append(BASE_DIR)...原创 2018-05-15 16:00:34 · 144 阅读 · 0 评论 -
迭代器协议,数据描述符
# 迭代器协:先调用对象__iter__方法 然后每次取值调用__next__方法# for循环 可以捕获迭代器抛出的StopIteration异常 结束调用__next__class Foo: def __init__(self,x): self.x = x def __iter__(self): # 使用for循环 首先会调用__iter__方法 ...原创 2018-05-15 15:59:03 · 149 阅读 · 0 评论 -
析构函数 __call__方法 del方法
# del 方法 在实例被内存回收时触发执行# class Sup:# def __del__(self):# print("结束")## s = Sup()# print("----")# 执行结果:# ----# 结束# s1 = Sup()# del s1# print("----")# 执行结果:# 结束# ----# __c...原创 2018-05-15 15:49:01 · 173 阅读 · 0 评论 -
encode decode
基本:字符串在python内部的表示是Unicode编码。因此在做编码转换时,通常需要以Unicode作为中间编码既:先将其它编码解码(decode)成Unicode,在从Unicode编码成(encode)成另一种编码*decode的作用是将其它编码转换成Unicode编码*encode的作用是将Unicode编码转换为其它编码...原创 2018-05-06 21:16:28 · 192 阅读 · 0 评论 -
封装 继承 多态
# -*- coding:utf-8 -*-# ***** 继承# 如果子类定义了一个属性名称和父类重名,会使用子类自己的。# 优先从自己的开始找如果自己没有才会使用父类的# ***** 接口继承 import abc# 子类继承父类 必须执行父类方法 重写方法# 规范子类# ******* 继承顺序 __mro__方法可以查看 经典类没有这个方法# 新式类 按照 广度优先 ...原创 2018-05-13 08:46:47 · 105 阅读 · 0 评论 -
面向对象 静态属性 类方法 静态方法
# -*- coding:utf-8 -*-# 实例化对象就是 利用 类 生成创造出一个实例对象# 对象是使用类生成的,对象也有两个属性 数据属性,函数属性# 类的两个属性 1.数据属性 2.函数属性# 类有__dict__ 字典,属性有属性字典,# 实例对象(使用点的方法)查属性会先在自己字典里查找。没有会去类字典里查找# 不用点调用就和类无关# ***********...原创 2018-05-13 08:40:24 · 167 阅读 · 0 评论 -
位运算,原码反码补码,进制转换
一,原码反码补码正数:原码 = 反码 = 补码负数:反码 = 符号位不变,其他位取反补码 = 反码+1重新计算 -1+1 结果1111 1111 1111 11110000 0000 0000 0001---------------------------0000 0000 0000 0000从补码转回原码负数补码转换原码的规则:原码 = 补码的符号位不变 -->数据位取反-->尾+1...原创 2018-05-02 22:52:54 · 464 阅读 · 0 评论 -
== is
is:是判断比较两个引用是否指向同一个对象== :是比较两个对象是否相等原创 2018-05-02 22:34:09 · 86 阅读 · 0 评论 -
作用域 globals locals
globals:全局变量locals:当前所在命名空间,enclosing:上一层变量(闭包中常见)builtins:内建模块的命名空间(python在启动的时候自动加载内置函数,我们可以用dir(__builtion__)来查看)内建模块中有一个ads()函数,其功能求绝对值:ads(-20)返回20...原创 2018-05-02 22:31:17 · 95 阅读 · 0 评论 -
python基础函数
1.set 2.动态参数(*args,**kwargs) 3.open函数 4.lambda表达式 5.递归 一,set集合,是一个无序且不重复的元素集合自带方法(1.add(添加元素) 2.clear(清除内容)3.copy(浅拷贝) 4.difference_update(从当前集合中删除bzhong 相同的元素) 5.discard(移除指定元素,不存在不报错...原创 2018-05-02 22:21:05 · 111 阅读 · 0 评论 -
random 模块 随机验证码
import randomret = random.random() # 随机浮点数 random.random()ret = random.randint(1,21) # 随机范围整数 randint()ret = random.choice([11,22,33]) # 随机取一个 choice()ret = random.sample([11...原创 2018-05-09 09:21:26 · 358 阅读 · 0 评论 -
生成器 含义
一,什么是生成器直接生成列表会占用太多内存。python中一边循环,一边计算的机制,称为生成器(generator)二,创建生成器方法1.只要把列表生成式的【】改为()a = [d for d in range(10)]a = (d for d in range(10))生成器使用 next(a)获取下一个值,当取到最后没有元素会报错。for循环不会报错2....原创 2018-05-08 23:38:27 · 246 阅读 · 0 评论 -
引入包,导入模块 package基础知识 if __name__ == '__main__'
linux 目录文件中含有__init__.py 文件既为 包 可以在当目录下创建模块__init__.py 文件为空__init__.py 中,可定义 __all__= ["echo","surround","reverse"] 这意味着, from sound.effects import * 会从对应的包中导入以上三个子模块; 尽管提供 import * 的方法,仍不建议在...原创 2018-05-08 23:20:25 · 663 阅读 · 0 评论 -
time 时间模块
# -*- coding:utf-8 -*-import timeimport datetime# ***** 结构化时间print(time.time()) # 时间戳 当地时间t = time.localtime(1525789723.943637) # 不填默认当地时间# 结构化时间 time.struct_time(tm_year=2018, tm_mon=5, t...原创 2018-05-09 08:20:19 · 112 阅读 · 0 评论 -
json 两种方法 dumps,loads
import json# ******** dumps 方法(把所有传入的变为json的字符串,全部加上引号,内部全部变为双引号)dic = {'name': 'laoli', 'age': 12}print(type(dic)) # <class 'dict'> 字典格式data = json.dumps(dic) # dumps处理print(dat...原创 2018-05-09 16:35:02 · 183 阅读 · 0 评论 -
xml 模块 解析 与创建一个xml文件
# -*- coding:utf-8 -*-import xml.etree.ElementTree as ETtree = ET.parse("xml_lesson") # ** parse方法(打开文件)root = tree.getroot()# print(root.tag) # ** tag方法(当前标签)# ***************** 遍历整...原创 2018-05-09 22:27:45 · 307 阅读 · 0 评论 -
re 模块
import re# (^)匹配开头print(re.findall("^a","as")) # ['a']# (.)通配符print(re.findall("f..", "sdffa")) # ['ffa']# (+)至少一个print(re.findall("ass+","weqwerqasssss")) # ['asssss']# (*)0到无限多p原创 2018-05-10 21:20:13 · 155 阅读 · 0 评论 -
pickle 储存 hashlib进行唯一标识
# **** 把对象序列化到文件中import pickle# 一个文件中只可以储存一个对象 用hashlib模块进行唯一区分import hashlibclass Stu: def __init__(self,name,age): self.name = name self.age = age ...原创 2018-05-13 08:19:44 · 248 阅读 · 0 评论 -
改变pycharm主题,字体,添加模块
一,改变主题二,改变字体三,添加模块原创 2018-05-11 21:49:18 · 3513 阅读 · 0 评论 -
logging 模块
import logging# ***** basicConfig 调整基础功能logging.basicConfig( level=logging.DEBUG, # 调整默认级别 filename="logger.log", # filename写到一个文件中 filemode="w", # filemode打开文件方式 ...原创 2018-05-11 17:05:11 · 106 阅读 · 0 评论 -
生成器 解析
# -*- coding:utf-8 -*-# ******* 生成器 最初模版 帮助理解def test(): yield 1 # yield 相当于 return yield 2 # yield 返回一个生成器内存地址 # 可以多次yieldg = test()print(g)print(next(g)) # 用next取值...原创 2018-05-04 23:36:53 · 275 阅读 · 0 评论 -
for 循环原理
# -*- coding:utf-8 -*-a = {1, 2, 3, 4}# for i in a: # for循环属于迭代器协议# print(i)# **** for 循环机制iter_s = a.__iter__() # 调用__iter__方法,变为可迭代对象(字典返回key值)print(iter_s)print(iter_s.__next_...原创 2018-05-04 23:30:33 · 537 阅读 · 0 评论 -
内置模块复习
# -*- coding:utf-8 -*-# 内置函数# ads 取绝对值print(abs(123))print(abs(-2))# all 判断可迭代对象 有一个迭代为就为真print(all([1,2,3]))print(all(""))print(all([]))print(all({}))# any 判断迭代对象 有一个为假就为假print(any([1...原创 2018-05-17 22:30:30 · 118 阅读 · 0 评论