Python基本语法

python中的元类 – type
type创造了python中一切 充分体现了动态语言的特性
1.type 可以求一个类型 或者一个对象的 类型名称
2.type 创建一个类型
type(类型名,base_class_tuple,attr_dict)

python 创建class 默认是用type
class X(metaclass= xx): #按照xx去实例化X类对象
pass

class X():
metaclass = xx

Django 模型类
ORM全称“Object Relational Mapping”,即对象-关系映射

枚举类:
         from enum import Enum
      WEEK = Enum('WEEK',('MON','TUS','WED','THI','FRI'))
for name,member in WEEK.__members__.items():
     	print(name,member)
   from enum import Enum, unique
@unique
class Weekday(Enum):
Sun = 0 # Sun的value被设定为0
Mon = 1
Tue = 2
Wed = 3
Thu = 4
Fri = 5
Sat = 6

day1 = Weekday.Mon
print(day1)
Weekday.Mon

print(Weekday.Tue)
Weekday.Tue

print(Weekday[‘Tue’])
Weekday.Tue

print(Weekday.Tue.value)
2

print(day1 == Weekday.Mon)
True

print(day1 == Weekday.Tue)

new’, 创建并且返回一个对象 构造
在python中把 newinit 统称为构造方法
__new__负责创建一个对象 一定要有返回值 即返回创建的对象
__init__负责绑定成员属性 初始化

class X:
def new(cls,*args,**kwargs):
return super().new(cls)

对象实例化的过程: new init

object:
class’,
delattr’,
dict’,
dir’,
doc’,
eq’,
format’,
ge’,
getattribute’,
gt’,
hash’,
init’,
init_subclass’,
le’,
lt’,
module’,
ne’,
reduce’,
reduce_ex’,
repr’,
setattr’,
sizeof’,
str’,
subclasshook’,
weakref

编程模式 总结固定的编程方式(常见的23种) 与编程语言无关 是一种思想:
创建型模式,共五种:
工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。

结构型模式,共七种:
适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。

行为型模式,共十一种:
策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、
备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

异常:

程序运行过程中可能出现的问题称之为异常
python解释器对于程序的异常处理为 : 显示错误信息 中断程序运行
python的异常处理:
对于有可能产生异常的代码进行异常捕获
try:
有可能产生异常的代码
except:
异常处理

try:
except 异常类型:
	处理指定的异常类型

try:
except 异常类型1:
	pass
except 异常类型2:
	pass
...

try:
except (异常类型1,异常类型2,...):
	pass

异常捕获是根据异常的类型来进行捕获 产生异常抛出了一个异常对象 isinstance(异常对象,异常类型)
异常子类型要在父类型之后进行捕获处理 如果异常子类型在后 该分支永远无法执行到

如果要获取异常对象 需要在 异常类型后面 as err:
如果要确保捕获所有异常: 最后一个捕获分支 except: except BaseException:
如果需要处理没有发生异常的情况: 可以加上一个 else:
如果无论是否发生异常都要执行的代码 finally

自定义异常类型  继承  BaseException   Exception
抛出异常    raise 异常对象
	except分支抛出捕获的异常:
		raise

异常捕获处理之后,程序能够从该处理异常后面的继承往下执行

with上下文件管理
with open() as f:

列表切片

对象[start:stop:step] 切片 start 默认是0 stop默认是末尾+1 step默认是1
slice(start,stop,step) [start:stop:step]
对象[] 进行访问 本质上是调用的 getitem 方法
如果自定义类型对象要支持切片:
def getitem(self,s):
if isinstance(s,int):
if isinstance(s,slice):

列表生成式 推导式 把循环的每一项结果作为列表的一项
[expr for x in iterable [if conidition]]
if conidition 不能有else语句
但是如果要做到相同的功能可以把if提前
[expr if condition else expr1 for…]

列表推导式 [] 结果的类型是list

如果把列表推导式稍微修改一下 把[] --> () 结果类型不是元祖 而是一个生成器

生成器

python3中range(start,stop,step)返回的结果就是一个generator
生成器 不会直接把所有的数据一次性生成好 一次一次生成 直接全部生成 浪费内存

取生成器中的数据:
	next(生成器)   每调用一次获取一个结果  当生成器中所有数据取完之后  StopIteration
	for x in 生成器:
	list(生成器)
	
	g.send(val)   #也能够获取一个数据  并且能够把val发送给 yield语句 
	如果使用next() yield返回结果就为None

在函数中用yield使函数的返回结果变成了个生成器
如果一个类中实现了__next__方法 那么该类的对象调用__next__ or next(obj) 得到一个生成器

迭代器 和 可迭代对象:

from collections import Iterable,Iterator
Iterator
Iterable

list,tuple,str,set,dict都是Iterable  可迭代的     只要能用在for i in x:  那x就是可迭代的对象
isinstance((),Iterable)  True
isinstance([],Iterable)  True
isinstance({},Iterable)  True
isinstance('',Iterable)  True

所有的Iterable对象都可以用iter(obj) 变成Iterator 迭代器
凡是可以用next()函数来获取下一项的对象 都是 Iterator 生成器就是Iterator
实现了__iter__的类的对象就是Iterator
iter 实现需要注意: 一定要返回一个Iterator
如果一个对象是Iterator 那么 它也一定是Iterable (所有的迭代器一定是可迭代的)

闭包 装饰器
闭包:

在一个函数内部再定义一个函数 里面的函数用到了外面函数的变量 把里面函数和外面函数的变量统称为闭包
闭包中的局部变量得不到释放
在闭包中访修改层函数的变量 需要用 nonlocal 来进行声明

装饰器 就是在函数前面 @装饰器

装饰器在不改变函数原有结构的前提下 能够进行逻辑操作
装饰器可以是闭包 也可以是类
如果把类当作一个装饰器,需要实现 initclass

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值