python7:装饰器

目录

  • 1.调用外部程序
    • os.system-阻塞式调用
    • subprocess-python中的模块
  • 2.装饰器前戏
    • 作用域
      • (1)全局和局部-就近原则
      • (2)嵌套作用域
      • (3)内置作用域、变量
    • 高阶函数:函数是最高级的对象
      • (1)函数名可以被赋值给其他对象
      • (2)函数名当作参数传递
      • (3)函数名可以作为返回值
    • 闭包
  • 3.装饰器高阶
    • 测试任务
    • 装饰器概念

1.调用外部程序

os.system-阻塞式调用

import os
#打开操作系统,可以输入命令
os.system("ipconfig")
retCode=os.system("mspaint")
print("retCode",retCode)
print("after")

画板打开并关闭后,才执行下一步打印操作
在这里插入图片描述

subprocess-python中的模块

subprocess.check_output:以字节形式返回,不能直接打印到控制台
subprocess.Popen:非阻塞式的,可以直接打印到控制台

import subprocess
#执行命令,将结果以字节形式返回,bytes
output_bytes=subprocess.check_output("ipconfig")
print(output_bytes.decode("gbk"))
print("=======after=========")#解码转为人能看懂的语言,mac写utf-8,windows写gbksubprocess.Popen("ipconfig")
print("=========after================")

在这里插入图片描述

2.装饰器前戏

作用域

#解决Non-utf-8问题,在python代码最前面放这几行代码

Python file uses the following encoding: utf-8

(1)全局和局部-就近原则

先在自己这一层找
当局部变量和全局变量重名时:

  • 在局部作用域使用该变量,则使用局部变量
  • 在全局使用时,使用的是全局。
# This Python file uses the following encoding: utf-8
b = 99#全局变量
def foo():a=100#局部变量print(a)print(b)#局部作用域使用全局变量,可以
foo()# print(a)#在全局使用局部变量,报错
print(b)# 全局作用域使用全局变量,可以

在这里插入图片描述

(2)嵌套作用域

# This Python file uses the following encoding: utf-8
b = 99#全局变量
def foo():a=100#局部变量print(a)print(b)#局部作用域使用全局变量,可以def bar():c=21#嵌套局部变量print("嵌套==",a,b,c)#嵌套作用域引用局部变量和全局变量bar()//  print(c)#局部引用内置嵌套局部变量,报错
foo()# print(a)#在全局使用局部变量,报错
print(b)# 全局作用域使用全局变量,可以

在这里插入图片描述

(3)内置作用域、变量

系统内固定模块里预先定义好的变量:
name
os模块里的变量
在这里插入图片描述

高阶函数:函数是最高级的对象

(1)函数名可以被赋值给其他对象

def foo():print("我是一个函数对象")
a=foo#将函数对象赋给变量,a就具有了函数foo的特征
print(a)
b=foo()#调用函数,并将函数foo的返回值赋给变量b,b就等于foo的返回值
print(b)

在这里插入图片描述

(2)函数名当作参数传递

def foo1(func):func()
def bar():print("123")
foo1(bar)

在这里插入图片描述

(3)函数名可以作为返回值

#函数名可以作为返回值
def foo():def bar():print("过年啦")return bar
a=foo()
a()

在这里插入图片描述

闭包

在一个内部函数里边,对在外部作用域(但不是全局作用域)的变量进行引用,那么这个内部函数就被认为是闭包
在这里插入图片描述

#闭包
def outer():x=10def inner():print(x)return inner
a=outer()
a()

3.装饰器高阶

测试任务

装饰器概念

为已经存在的对象添加额外的功能
zhuang'shi
在这里插入图片描述

import time
#原本逻辑
def foo():print("执行了一些测试逻辑")time.sleep(1)
#新增计时逻辑
def show_time(func):def inner():begin_time=time.time()func()end_time=time.time()print("用例执行时间==",end_time-begin_time)return inner
foo=show_time(foo)
foo()

在这里插入图片描述
foo被装饰函数,show_time是装饰器(装饰函数),python提供了语法糖,在被装饰函数上@装饰器,这样就不用赋值了每次

import time
#新增计时逻辑
def show_time(func):def inner():begin_time=time.time()func()end_time=time.time()print("用例执行时间==",end_time-begin_time)return inner
#原本逻辑
@show_time
def foo():print("执行了一些测试逻辑")time.sleep(1)
# 省去了赋值的步骤,在外部看来相当于直接调用原函数
foo()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/43152.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海外媒体投稿:5个软文代发经典案例,教大家获得突破

随着互联网的飞速发展,软文代发成为一种高效的推广方法。下面我们就详细介绍五个成功软文代发推广实例,致力于帮助读者把握有关方法,完成突破。 第一实例:社交网络散播在如今社交媒体时代,软文代发能够通过社交平台迅速…

nodejs实现:支付宝订单查询

nodejs实现:支付宝订单查询; 原生http请求,不使用三方库; 代码如下: const https require(https); const crypto require(crypto); const querystring require(querystring);// 支付宝公共参数 const PRIVATE_KE…

[C++] 轻熟类和对象

类的定义 格式规范 class为定义类的关键字,后有类名,类的主体存于{}中;类定义结束时后面的分号不能省略;类体的内容成为类的成员,类中的变量成为成员变量,函数成为方法或成员函数;C兼容C语言的…

SpringBoot配置flyway

背景 目前我们的项目代码都会交由Git、SVN等版本管理工具进行管理,但是我们的sql脚本,尤其是各类ddl脚本并没有进行版本的管理(python的web框架Django默认就提供了类似的工具,从一开始就鼓励开发者通过版本管理的方式进行数据库的…

C++中的多重继承和虚继承:横向继承、纵向继承和联合继承;虚继承

多重继承 A.横向多重继承: B.纵向多重继承: C.联合多重继承: 因为 single 和 waiter 都继承了一个 worker 组件,因此 SingingWaiter 将包含两个 worker 组件,那么将派生类对象的地址赋给基类指针将出现二义性 那么如何…

idea http client插件上传文件,并忽略https证书验证

上传文件 ### 传临时素材 图片 POST https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token{{access_token}}&typeimage Content-Type: multipart/form-data; boundary----WebKitFormBoundarywKUX3Xj6aL5Wssnb------WebKitFormBoundarywKUX3Xj6aL5Wssnb Conten…

从Helm到 Operator:Kubernetes应用管理的进化

🧰Helm 的作用 在开始前需要先对 kubernetes Operator 有个简单的认识。 以为我们在编写部署一些简单 Deployment 的时候只需要自己编写一个 yaml 文件然后 kubectl apply 即可。 apiVersion: apps/v1 kind: Deployment metadata: labels: app: k8s-combat …

去水印小程序源码修复版-前端后端内置接口+第三方接口

去水印小程序源码,前端后端,内置接口第三方接口, 修复数据库账号密码错误问题,内置接口支持替换第三方接口, 文件挺全的,可以添加流量主代码,搭建需要准备一台服务器,备案域名和http…

农牧行业CRM洞察:打造营、销、服一体化数字营销平台

01、行业应用背景 保持企业活力,支撑业务单元协调发展,稳定核心产品竞争力,将成为农牧行业企业数字化、数智化建设的指导方向。 积极发挥数据在生产、流通、消费各个环节的决策支撑,为农牧企业特别是多业态集团型企业&#xff0…

JVM:类的生命周期

文章目录 一、介绍二、加载阶段三、连接阶段1、验证阶段2、准备阶段3、解析阶段 四、初始化阶段 一、介绍 类的生命周期描述了一个类加载、连接(验证、准备和解析)、初始化、使用、卸载的整个过程。 二、加载阶段 加载(Loading&#xff09…

全栈业务开发入门——登录业务接口

业务已上传则资源 实现登录业务的前后端联调,前端点击登录按钮向后端发送一个请求,后端调用接口向前端响应结果 效果如下: 设计环境:springbootmybatisvue3axios 一.前端设计 1.基于vue3脚手架创建项目,搭建项目结构…

LAZYNVIM学习使用笔记

文章目录 1. 前言VIM的模式快捷键参考 1. 前言 习惯使用vscode进行代码编辑,无意中刷到lazynvim,感觉功能强大,于是下载、安装,学习使用一下,本篇主要记录学习使用lazynvim的一些要点,防止遗忘。 持续更新…

帝特(DTECH)USB转RS485/422串口线在Ubuntu系统中的安装

因为测试需要,买了一根帝特(DTECH)USB转RS485/422串口线,今天测试了一下在Ubuntu 22.04系统上的使用。帝特的网站上提供了驱动程序,下载以后发现接口芯片是CP2102,厂商只提供了Linux内核2.6和3.x版本的驱动…

游戏AI的创造思路-技术基础-情感计算(2)

上一篇我们介绍了情感计算的基本支持,本篇将呈现情感计算在游戏AI中的使用实例~~~ 目录 7. 情感计算在游戏AI中的运用实例 7.1. RPG游戏中的运用实例 7.1.1. 实例背景 7.1.2. AI情感计算系统 7.1.3. 引导用户执行任务 7.1.4. 推动游戏剧情发展 7.1.5. 实例效…

用Python玩转Excel的五大功能!

在日常的数据处理工作中,Excel无疑是一个强大的工具。然而,当数据量较大或需要自动化处理时,Python凭借其强大的库支持,如pandas和openpyxl,能够更高效地处理Excel文件。 本文将介绍Python中常用的五种Excel操作**&am…

Python办公自动化:增值税发票批量识别和核验

腾讯云免费体验地址: https://console.cloud.tencent.com/api/explorer?Product=ocr&Version=2018-11-19&Action=VatInvoiceVerifyNew 首先进行识别,这里以python为例子 # -*- coding: utf-8 -*- import jsonfrom tencentcloud.common.common_client import Commo…

【C++航海王:追寻罗杰的编程之路】关联式容器的底层结构——红黑树

目录 1 -> 红黑树 1.1 -> 红黑树的概念 1.2 -> 红黑树的性质 1.3 -> 红黑树节点的定义 1.4 -> 红黑树的结构 1.5 -> 红黑树的插入操作 1.6 -> 红黑树的验证 1.8 -> 红黑树与AVL树的比较 2 -> 红黑树模拟实现STL中的map与set 2.1 -> 红…

【堆 优先队列】1354. 多次求和构造目标数组

本文涉及知识点 堆 优先队列 LeetCode1354. 多次求和构造目标数组 给你一个整数数组 target 。一开始&#xff0c;你有一个数组 A &#xff0c;它的所有元素均为 1 &#xff0c;你可以执行以下操作&#xff1a; 令 x 为你数组里所有元素的和 选择满足 0 < i < target.…

linux信息收集与提权

目录 版本信息收集 kali得一些exp网站 kali自带的searchsploit工具 脏牛提权漏洞&#xff08;改写没有写权限的文件&#xff09; 测试靶场下载链接 sudo提权 上传恶意C脚本进行编译生成dirty的elf文件&#xff0c;也可以在攻击机编译好上传 启动&#xff0c;123456是设…

体验完这款售价29999元起苹果新品,我大受震撼

讲道理&#xff0c;数码圈已经很久没有出现过让人耳目一新的产品了。 整个圈子近些年各家新品逻辑给我的一种感觉是普遍主打循规循距&#xff0c;用高情商话来说那叫稳扎稳打不易出错&#xff0c;而低情商嘛&#xff0c;说白了叫创新精神严重缺失。 「科技最后以换皮为准」这…