装饰器

装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

先看简单例子:

def run():

time.sleep(1)print('run....')

现有一个新的需求,希望可以记录下函数的运行时间,需要在代码中计算时间的代码:

def run():

start_time = time.time()

time.sleep(1)print('run....')

end_time = time.time()print('run time', end_time - start_time)

login()等多个函数也有类型的需求,怎么做?若在每个函数内都写一个开始、结束时间,然后再算差值,这样代码就冗余了,可以定义一个函数,专门计算执行时间,再执行真的业务代码,如下:

def timer(func): #计算时间start_time = time.time()

func()

end_time = time.time()print('run time', end_time - start_time)

def run(): #业务代码time.sleep(1)print('run....')

timer(run)

以上代码逻辑不能理解,但这样的话,每次都将一个函数作为参数传递给timer()函数,而且这种方式已经破坏了原有的代码逻辑结构,之前执行业务逻辑时,执行运行run(),但现在不得不运行timer()。使用装饰器,可以解决以上问题。

简单装饰器

def timer(func): #计算时间def deco(*args, **kwargs): #可以传参start_time = time.time()

func(*args, **kwargs) #函数调用end_time = time.time()print('run time', end_time - start_time)return deco #return 函数名,函数即变量def run(): #业务代码time.sleep(1)print('run....')

run = timer(run) #run相当于decorun() #run调用相当于deco()

函数即变量,在python里面的函数就是一个变量、函数名就是一个变量,这个函数名存放的是这个函数的内存地址,它把函数体放到内存里,在调用的时候从函数名里面的这个内存地址找到函数体然后运行这个函数。函数名后面加上小括号就是调用这个函数,如果只写这个函数名的话,打印一下就是这个函数的内存地址。

函数timer就是装饰器,它把执行真正业务方法的func包裹在函数里面,看起来像run被timer装饰了。继续演变如下:

timer(func): deco(*args, **kwargs): start_time =*args, **kwargs) end_time =(, end_time - deco @timer run(): time.sleep(1()

run()

run()函数更新后代码如下:其实run的代码并没有直接改动,只是调用装饰器时,run的代码进行了更新。

def run():

start_time = time.time()

time.sleep(1)print('run....')

end_time = time.time()print('run time', end_time - start_time)

python 内置函数

print(all([1, 2, 3, 0, 11, -1])) #判断可迭代对象里面的值是否都为真,有一个为假即为False,非空即真非0即真print(any([0, 1, 2])) #判断可迭代对象里面的值是否有一个为真,即为Trueprint(bin(10)) #将十进制转换为二进制print(bool('sdf')) #将一个对象转换为布尔类型func = ''print(callable(func)) #判断传入的对象是否可调用,func为变量不可调用,即返回Falsedef adf():passprint(callable(adf)) #判断传入的对象是否可调用,adf为方法即可调用,即返回Trueprint(chr(98)) #打印数字对应的ASCII码,98=bprint(ord('a')) #打印字符串对应的ASCII码, a=97print(dict(a=1, b=2)) #转换成字典,{'b': 2, 'a': 1}#print(eval('[a=1]'))print(exec('def a():pass')) #执行python代码,只能执行简单的,定义数据类型和运算def func(num):

name = '88'print(locals())print(globals())return numprint(list(filter(func, [0, 1, 2, 3, 4]))) #在python3里面这么用是没问题filter(func, [1, 2, 3, 4]) #根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,返回true保存print(list(map(func, [0, 1, 2, 3, 4]))) #根据前面的函数处理逻辑,依次处理后面可迭代对象里面的每个元素,保存前面函数返回的所有结果 print(globals()) #返回程序内所有的变量,返回的是一个字典,函数里面的局部变量不会返回print(locals()) #返回局部变量print(hex(111)) #数字转成16进制print(max(111, 12, 13, 14, 16, 19)) #取最大值print(oct(111)) #把数字转换成8进制print(round(11.1198, 2)) #取几位小数,会四舍五入print(sorted([2, 31, 34, 6, 1, 23, 4], reverse=False))#排序

dic={1:2,3:4,5:6,7:8}print(sorted(dic.items())) #按照字典的key排序,[(1, 2), (3, 4), (5, 6), (7, 8)]print(sorted(dic.items(), key=lambda x:x[1])) #按照字典的value排序import time #导入一个模块import sysprint(sys.path) #查看系统环境变量有哪些目录sys.path.append(r'E:\python_workspace\base-code') #将base-code下的代码添加到环境变量,允许python xxx.py就不报错from day4.day5_test import hhh

hhh() #直接右键允许不报错,使用python model2.py允许时报错,找不到day4模块No module named 'day4'

random 模块

import randomprint(random.randint(1, 20)) #在1-19之间随机生成一个整数,随机print(random.choice('abs123')) #随机取一个元素,随机可迭代对象:字符串、字典、list、元组print(random.sample('abcdfgrtw12', 3)) #随机取几个元素,3是长度,['2', 'a', 'b'],返回结果是list类型print(random.uniform(1, 9)) #随机浮点数,随机取1-9之间的浮点数,可指定范围,5.8791750348305625print(random.random()) #随机0-1的浮点数,0.9465901444615425random.shuffle([1, 2, 3, 4, 5, 6]) #随机打乱list的值,只能是list

JSON函数

使用 JSON 函数需要导入 json 库:import json。函数描述

json.dumps将字典转换为json串

json.dump将字典转换的json串写入文件

json.loads将json串转换为字典

json.load从文件中读取json数据,然后转换为字典

举例说明,如下:

a.json内容格式:

{"car":{"price":1100,"color":"red"},"mac":{"price":7999,"color":"black"},"abc":{"price":122,"color":"green"}}

json.load()

import json

with open('a.json') as fp:

shop_dic = json.load(fp) #从a.json文件内读取数据,返回结果为字典:{'abc': {'price': 122, 'color': 'green'}, 'mac': {'price': 7999, 'color': 'black'}, 'car': {'price': 1100, 'color': 'red'}}print(shop_dic)

json.loads()

s_json = '{"name":"niuniu","age":20,"status":true}'print(json.loads(s_json)) #将json串转换为字典:{'age': 20, 'status': True, 'name': 'niuniu'}

json.dump()

import json

with open('a.json', 'a+') as fp:

dic = {'name': 'niuniu', 'age': 18}

fp.seek(0)

fp.truncate()

json.dump(dic, fp) #将字典转换为json串写入文件

写入的a.json如下:

{"age": 18, "name": "niuniu"}

json.dumps()

import json

dic = {'name': 'niuniu', 'age': 18}print(json.dumps(dic)) #将字典转换为json串:{"name": "niuniu", "age"

以上就是python中装饰器、内置函数、json的详解的详细内容,更多请关注Gxl网其它相关文章!

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

python中的json函数_python中装饰器、内置函数、json的详解相关推荐

  1. python中f点flush是什么函数_Python文件操作及内置函数flush原理解析

    1.打开文件得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 示例文件 '你好呀' 我是于超 嗯 再见 文件操作基本流程 f=open('chenli',encoding='ut ...

  2. python语言接收信息的内置函数_python接收信息的内置函数是

    有的python内置函数怎么就一个pass这个模块是用C实现的,没有Python源码. 所以python代码中只有一个pass,因为代码中都是C实现的. 两种情况: 一种情况是继承的时候会用到的,父类 ...

  3. day4 高阶函数 嵌套函数 装饰器 内置函数 列表生成式 迭代器 生成器

    一.函数即变量 1.赋值效果图 a = 1  b = a def func(): print('hello') func 是函数名,相当于变量名,print('hello')是函数体,相当于变量的值, ...

  4. python帮助文档中查看内置函数_PYTHON官方文档内置函数整理

    一.数学运算类 abs(x) 求绝对值 1 .参数可以是整型,也可以是复数 2 .若参数是复数,则返回复数的模 complex([real[, imag]]) 创建一个复数 divmod(a, b) ...

  5. python中divmod函数_Python标准库:内置函数divmod(a, b)

    本函数是实现 a 除以 b ,然后返回商与余数的元组.如果两个参数 a,b 都是整数,那么会采用整数除法,结果相当于( a//b, a % b) .如果 a 或 b 是浮点数,相当于( math.fl ...

  6. python中函数包括标准库函数吗_Python标准库:内置函数divmod(a, b)

    本函数是实现a除以b,然后返回商与余数的元组. 如果两个参数a,b都是整数,那么会采用整数除法,结果相当于(a//b, a % b).如果a或b是浮点数,相当于(math.floor(a/b), a% ...

  7. python内置的读取文件函数_Python函数篇(3)-内置函数、文件处理(已更新)

    1.内置函数 上一篇文章中,我重点写了reduce.map.filter3个内置函数,在本篇章节中,会补充其他的一些常规内置函数,并重点写max,min函数,其他没有说明的函数,会在后面写到类和面向对 ...

  8. python求最小值不能使用min和sotred_python基础——内置函数

    python基础--内置函数  一.内置函数(python3.x) 内置参数详解官方文档: https://docs.python.org/3/library/functions.html?highl ...

  9. python函数装饰函数_Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

  10. python log函数_python要点-装饰器

    大家有没有碰到过这种需求,扩展公司的历史项目,对功能进行扩展?拿到历史项目看源码的时候是不是头特别大,难上加难的是还要对其进行修改!!!今天要讲的是python中的重要功能-装饰器,其对满足前述的实现 ...

最新文章

  1. 多核片上系统(SoC)架构的嵌入式DSP软件设计
  2. 每个软件开发人员都应该精通的10个基本工具
  3. docker部署python web应用_在 Docker 中运行一个 Python 的 Web 应用
  4. openstack——使用命令行发放云主机
  5. python类继承的重写和super
  6. SVN 创建仓库操作
  7. hdu4513--Manacher算法--回文串的O(n)算法
  8. 数字图像处理实验5图像复原
  9. Chrome运行时性能瓶颈分析
  10. 数据看穿一生:前半生赚钱养娃,后半生赚钱买命
  11. C#里如何使用Timespan(计算时间差)
  12. 高中英语语法(002)-否定
  13. hadoop培训感想
  14. Visual Studio Code 配置C/C++编译环境流程及问题解决(Win10环境)
  15. 《追寻生命的意义》--后记
  16. “差生”韩寒难以改变的人生戏码
  17. 岳父岳母-关于钟点工
  18. Matlab axis函数
  19. Java毕业设计_基于WEB的多媒体素材管理库的设计与开发
  20. history of program atan2(y,x)和pow(x,y)

热门文章

  1. 动态规划入门之国王的金矿
  2. 【直播回顾】阿里高级开发工程师紫思:闲鱼多业务隔离框架SWAK...
  3. Django系列:(1)PyCharm下创建并运行我们的第一个Django工程
  4. vSphere 5.0热添加
  5. Visual Studio Code预览版Ver 0.3.0试用体验
  6. 数据结构之线性表-链式存储之单链表(一)
  7. 用位运算实现求绝对值-有效避开if-else判断
  8. 【转载】asp.net中弹出确认窗口(confirm),实现删除确认的功能
  9. Windows XP Embedded with Service Pack 2 开发包光盘 3CD
  10. 使用TDengine快速搭建运维监测系统