python函数的四个特点_Python几个特性小结

数据模型

python中,一个对象object是数据的抽象,封装了与数据的一些操作

Python中,存在一个顶层的抽象,然后有对应一个函数实现

主要包含了一些顶层的操作,比如加法,sum,打印,len,call等,这些顶层的抽象操作对应一个内建函数__function__(),通过实现这些内建函数完成数据顶层特性的封装。

class Complex(object):

"""复数"""

def __init__(real=0, virtual=0):

self.real = real

self.virtual = virtual

def __add__(others)

“”“复数加法”“”

metaclass元类

python是动态语言,与静态语言一个重要区别就是,类和函数的定义也是运行时完成。所以可以通过hook到类创建的过程中,修改类创建的过程。

MetaClass主要用来控制类本身的创建。

顶层抽象,类的创建对应函数实现metaclass.__new__()

装饰器

由于函数的定义也是运行时可执行代码,所以我们可以重新修改函数的定义在运行时。

装饰器就是可以动态地去修改一个函数,并且可以嵌套一直修改。

在运行时,修改函数的行为。在python中,一切皆对象,函数的定义和类的定义一样,可以在运行时修改。

生成器

生成器的作用是避免一次性输出所有数据,而是通过交错运行迭代完成函数输出。

def gen():

for c in 'abc':

yield c

generator = gen()

for c in generator:

print(c)

上下文管理器

在很多场景下,我们需要交错执行命令,比如打开文件流

读取内容,业务逻辑操作

关闭文件流

如果未正常关闭文件流可能会导致资源泄露问题。

这是一个常见的问题,在python中有对应的上下文管理抽象,也对应一个函数实现object.__enter__(self)

class Sample:

def __enter__(self):

return self

def __exit__(self, type, value, trace):

pass

更方便的做法,我们可以通过上下文管理器

这里会用到上面两个特性,装饰器和迭代器。

通过装饰器动态修改函数的行为

通过迭代器实现代码逻辑的交错执行。

import time

from contextlib import contextmanager

@contextmanager

def timeit(label):

start = time.time()

try:

yield

finally:

end = time.time()

print('{}: {}'.format(label, end - start))

with timeit('counting'):

n = 10000000

while n > 0:

n -= 1

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值