一.装饰器

1.装饰器:

解释:装饰器的本事就是一个函数,不改动主代码的情况下,增加新功能。返回值也是一个函数对象。

2.装饰器工作过程

import time
def func():
print('主功能')
time.sleep(1)
def timer(f): #形参就是替换原函数func
def inner():
print('开始')
start_time=time.time()
f() #调用函数func
end_time=time.time()
print('运行时间:',end_time-start_time)
print('结束') return inner #这里只能是inner 不能写inner()
func=timer(func) #timer(func)==inner
func()

调用两个函数:

import time
def func():
print('新加辅助功能')
time.sleep(1) def func1():
print('主功能')
time.sleep(1)
def timer(f,g): #形参就是替换原函数func
def inner():
print('开始')
start_time=time.time()
g() #调用函数func1
f() #调用函数func
end_time=time.time()
print('运行时间:',end_time-start_time)
print('结束') return inner #这里只能是inner 不能写inner()
func=timer(func,func1) #timer(func)==inner
func()

3.语法糖:

如果有多个函数,不能每次否输入#func=timer(func),何况函数名定义也是不一样的。引入语法糖。

import time
def timer(f):
def inner():
start_time=time.time()
f()
time.sleep(1)
print(time.time()-start_time)
return inner
@timer #语法糖==>func1=timer(func1)
def func1():
print(' 主功能 ')
func1()

4.开放封闭原则

  1.对扩展是开放的

  必须允许代码扩展,添加新功能。

  2.修改封闭,这样不会影响其他用户使用该函数。

5.带有多个参数的装饰器

def warpper1(func):
def inner():
print('warpper1,before func')
func()
print('warpper1,after func')
return inner def warpper2(func):
def inner():
print('warpper2,before func')
func()
print('warpper2,after func')
return inner
@warpper2
@warpper1
def f():
print('in Func')
f()
结果:
warpper2,before func #这里需要注意执行顺序。相当于两层。
warpper1,before func
in Func
warpper1,after func
warpper2,after func

二. 内置函数

1.abs(X)      #函数返回数字的绝对值,X是数字  不能是其他类型

2.all()      #函数用于判断给定的可迭代参数iterable中的所有元素都是否为TRUE,如果都是true则返回true,若含有[],{},(),0,False,none都返回False。

3.any()       #函数用于判断给定的可迭代参数iterable中的所有元素都是否为False,如果都是False则返回False,若含有[],{},(),0,False,none都返回True。

4.bin()        #返回一个整数int,或者长整型long int 的二进制表示。

5.bool()      #函数返回将给定的参数转化成布尔类型,如果没有参数,返回False。

6.bytearray()

print(bytearray([1,2,3]))
print(bytearray('中',encoding='utf-8'))
print(bytearray(5))
结果:
bytearray(b'\x01\x02\x03')
bytearray(b'\xe4\xb8\xad')
bytearray(b'\x00\x00\x00\x00\x00')

7.callable()    #函数用于检查一个对象是否可调用的。

8.chr()      #用一个范围在range(256)内的(0~255)整数作为参数,返回一个对应的字符。

9.locals()      #函数会议字典的类型返回当前位置的全部局部变量

globals()         #函数以字典的类型返回全部变量

a=123
b=[15,55,58]
def fun():
c=1
print(locals())
print(globals())
fun()
结果: {'c': 1}
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object

10.eval()    #执行字符串代码,并返回最终结果

print(eval(input('多岁的')))         #具有执行功能
print(eval('2+8'))
结果:
多岁的
10

11.exec()    #执行字符串类型的代码。

s='''
for i in [1,2,3]:
print(i)
'''
exec(s) #执行s的字符串的代码
结果:
1
2
3

12.compile()      #将字符串类型的代码编译,代码对象能够通过exec语句来执行或者eval进行求值。

13.hash id  内存相关      #获取一个对象,(可哈希对象:int,str,bool,tuple)的哈希值。

14.open()       #用于打开一个文件,创建一个file,相关方法调用读写。

15.help()        #函数用于查看函数或模块用的详细说明。

16.callable()      #函数用于检查一个对象是否可调用。如果返回True,object仍然可能调用失败;如果返回是False,object绝对不会成功。

17.dir           #函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

day0318装饰器和内置函数的更多相关文章

  1. 文成小盆友python-num4 装饰器,内置函数

    一 .python 内置函数补充 chr()  -- 返回所给参数对应的 ASCII 对应的字符,与ord()相反 # -*- coding:utf-8 -*- # Author:wencheng.z ...

  2. 【Python 函数对象 命名空间与作用域 闭包函数 装饰器 迭代器 内置函数】

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  3. Python装饰器、内置函数之金兰契友

    装饰器:装饰器的实质就是一个闭包,而闭包又是嵌套函数的一种.所以也可以理解装饰器是一种特殊的函数.因为程序一般都遵守开放封闭原则,软件在设计初期不可能把所有情况都想到,所以一般软件都支持功能上的扩展, ...

  4. 万恶之源 - Python装饰器及内置函数

    装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...

  5. Python--函数对象@命名空间与作用域@包函数@装饰器@迭代器@内置函数

    一.函数对象 函数(Function)作为程序语言中不可或缺的一部分,但函数作为第一类对象(First-Class Object)却是 Python 函数的一大特性. 那到底什么是第一类对象(Firs ...

  6. python笔记5:装饰器、内置函数、json

    装饰器 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 先看简单例子: def run(): time.sleep(1 ...

  7. python 之 面向对象(多态性、装饰器方法 内置函数补充)

    7.6 多态性 1 什么是多态性 多态指的是同一种事物多种形态,在程序中用继承可以表现出多态.多态性:可以在不用考虑对象具体类型的前提下而直接使用对象下的方法 2.为什要用多态 用基类创建一套统一的规 ...

  8. Python装饰器及内置函数

    装饰器 听名字应该知道这是一个装饰的东西,我们今天就来讲解一下装饰器,有的铁子们应该听说,有的没有听说过.没有关系我告诉你们这是一个很神奇的东西 这个有多神奇呢? 我们先来复习一下闭包 def fun ...

  9. 2019-03-18-day013-装饰器与内置函数

    上周回顾 函数: def 函数名(): 缩进 函数体 闭包: a = 50 def func(): a = 10 def avg(): print(a) 函数名的使用: 当做值被赋值给变量 当做返回值 ...

随机推荐

  1. Android studio的主题颜色修改

    1.选择喜欢的主题 http://color-themes.com/?view=index 好几十款,总有一款你喜欢 2.下载你喜欢的主题,注意是jar文件 .File -> Import Se ...

  2. linux每日命令(9):cp命令

    一.命令格式: cp [参数] source dest 或 cp [参数] source... directory 二.命令功能: 将源文件复制至目标文件,或将多个源文件复制至目标目录. 三. 命令参 ...

  3. iOS利用Application Loader打包提交到App Store时遇到错误The filename 未命名.ipa in the package contains an invalid character(s). The valid characters are:A-Z ,a-z,0-9,dash,period,underscore,but the name cannot start w

    iOS利用Application Loader打包提交到App Store时遇到错误: The filename 未命名.ipa in the package contains an invalid ...

  4. android平台的三个编译命令——make,mm,mmm

    在Android源码根目录下,执行以下三步即可编译android: 1.  build/envsetup.sh  #这个脚本用来设置android的编译环境; 2.  lunch  #选择编译目标 3 ...

  5. 【C】——实现tree命令

    在大部分的linux系统中有一个很好用的命令——tree,就是显示目录的结构,但是发现在FreeBSD中没有这个命令,因此自己实现了一个简单的tree.代码如下:主要利用了递归的思想. #includ ...

  6. 响应式编程笔记三:一个简单的HTTP服务器

    # 响应式编程笔记三:一个简单的HTTP服务器 本文我们将继续前面的学习,但将更多的注意力放在用例和编写实际能用的代码上面,而非基本的APIs学习. 我们会看到Reactive是一个有用的抽象 - 对 ...

  7. json 字符串包含数组转换为object对象是报异常java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to

    前台传到后台的json字符串 前台实现这种格式json字符串方式: function contentFun(){ respType = respTypeFun(); return "{\&q ...

  8. xml 转map dom4j

    http://ziyu-1.iteye.com/blog/469003 传过来一个xml文件,需要转换成Map,能够应对不用结构的xml,而不是只针对固定格式的xml. 转换规则: 1.主要是Map与 ...

  9. [IR] Time and Space Efficiencies Analysis of Full-Text Index Techniques

    文章阅读:全文索引技术时空效率分析 LIU Xiao-ZhuPENG Zhi-Yong 根据全文索引实现技术的不同,将其分为三大类: 索引技术 (倒排文件.签名文件 .后缀树与后缀数组) 压缩与索引混 ...

  10. 《奔跑吧Ansible》

    第1章 Ansible 简介 第2章 Ansible playbook 第3章 Ansible inventory 第4章 Ansible 变量与fact 第5章 引入测试应用:Mezzanine 第 ...