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写gbk

subprocess.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=10
    def 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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

几种不同的方式禁止IP访问网站(PHP、Nginx、Apache设置方法)

1、PHP禁止IP和IP段访问 <?//禁止某个IP$banned_ip array ("127.0.0.1",//"119.6.20.66","192.168.1.4");if ( in_array( getenv("REMOTE_ADDR"), $banned_ip ) ){die ("您的IP禁止访问&#xff01;");}//禁止某个IP段…

【Linux操作系统-测试】第三节.Linux 系统、网络信息、用户权限命令总结

文章目录 前言一、Linux 系统相关信息命令 1.1 df 命令--查看磁盘剩余 1.2 ps 命令--查看进程 1.3 top 命令--显示进程运行状态 1.4 kill 命令说明 -- 杀死进程二、Linux 网络信息命令 2.1 ping 命令--检查网络是否连通 2.1 ifconfig--显示网络设…

传知代码-图神经网络长对话理解(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 情感识别是人类对话理解的关键任务。随着多模态数据的概念&#xff0c;如语言、声音和面部表情&#xff0c;任务变得更加具有挑战性。作为典型解决方案&#xff0c;利用全局和局部上下文信息来预测对话中每…

数据库-ubuntu环境下安装配置mysql

文章目录 什么是数据库&#xff1f;一、ubuntu环境下安装mysql二、配置mysql配置文件1.先登上root账号2.配置文件的修改 mysql和mysqld数据库的基础操作登录mysql创建数据库显示当前数据库使用数据库创建表插入students表数据打印students表数据select * from students; ![在这…

响应式布局下关于gird栅格布局的一些构思

1、传列数&#xff0c;根据列数计算元素容器宽度 好处是子元素可以写百分比宽度&#xff0c;不用固定某一种宽度&#xff0c;反正知道列数通过计算间距就能得到外层容器的宽度。 举个简单的例子&#xff1a; &#xff08;ps:以下用例皆在html中去模拟&#xff0c;就不另外起r…

零基础STM32单片机编程入门(十二) HC-SR04超声波模块测距实战含源码

文章目录 一.概要二.HC-SR04主要参数1.模块引脚定义2.模块电气参数3.模块通讯时序4.模块原理图 三.STM32单片机超声波模块测距实验四.CubeMX工程源代码下载五.小结 一.概要 HC-SR04超声波模块常用于机器人避障、物体测距、液位检测、公共安防、停车场检测等场所。HC-SR04超声波…

宏碁F5-572G-59K3笔记本笔记本电脑拆机清灰教程(详解)

1. 前言 我的笔记本开机比较慢&#xff0c;没有固态&#xff0c;听说最近固态比较便宜&#xff0c;就想入手一个&#xff0c;于是拆笔记本看一下有没有可以安的装位置。&#xff08;友情提示&#xff0c;在拆机之前记得洗手并擦干&#xff0c;以防静电损坏电源器件&#xff09…

视频号的视频,一键就下载了,方法全在这儿了!

居然还有人不知道&#xff1a;视频号里面的视频是没有地址的&#xff0c;只能有微信自带的浏览器中打开。 所以很多人在视频号找到想要的素材&#xff0c;却无法下载&#xff0c;表示很苦恼。 几天每天都有人群里求助&#xff1a;“求好心人帮我下载一下这个视频&#xff01;…

昇思学习打卡-14-ResNet50迁移学习

文章目录 数据集可视化预训练模型的使用部分实现 推理 迁移学习&#xff1a;在一个很大的数据集上训练得到一个预训练模型&#xff0c;然后使用该模型来初始化网络的权重参数或作为固定特征提取器应用于特定的任务中。本章学习使用的是前面学过的ResNet50&#xff0c;使用迁移学…

STM32 GPIO的工作原理

STM32的GPIO管脚有下面8种可能的配置:&#xff08;4输入 2 输出 2 复用输出) &#xff08;1&#xff09;浮空输入_IN_FLOATING 在上图上&#xff0c;阴影的部分处于不工作状态&#xff0c;尤其是下半部分的输出电路&#xff0c;实际上是与端口处于隔离状态。黄色的高亮部分显示…

在攻防演练中遇到的一个“有马蜂的蜜罐”

在攻防演练中遇到的一个“有马蜂的蜜罐” 有趣的结论&#xff0c;请一路看到文章结尾 在前几天的攻防演练中&#xff0c;我跟队友的气氛氛围都很好&#xff0c;有说有笑&#xff0c;恐怕也是全场话最多、笑最多的队伍了。 也是因为我们遇到了许多相当有趣的事情&#xff0c;其…

Mac窗口辅助管理工具:Magnet for mac激活版

magnet mac版是一款运行在苹果电脑上的一款优秀的窗口大小控制工具&#xff0c;拖拽窗口到屏幕边缘可以自动半屏&#xff0c;全屏或者四分之一屏幕&#xff0c;还可以设定快捷键完成分屏。这款专业的窗口管理工具当您每次将内容从一个应用移动到另一应用时&#xff0c;当您需要…

python学习-容器类型

列表 列表&#xff08;list&#xff09;是一种有序容器&#xff0c;可以向其中添加或删除任意元素. 列表数据类型是一种容器类型&#xff0c;列表中可以存放不同数据类型的值,代码示例如下&#xff1a; 列表中可以实现元素的增、删、改、查。 示例代码如下&#xff1a; 增 …

医疗器械网络安全 | 漏洞扫描、渗透测试没有发现问题,是否说明我的设备是安全的?

尽管漏洞扫描、模糊测试和渗透测试在评估系统安全性方面是非常重要和有效的工具&#xff0c;但即使这些测试没有发现任何问题&#xff0c;也不能完全保证您的医疗器械是绝对安全的。这是因为安全性的评估是一个多维度、复杂且持续的过程&#xff0c;涉及多个方面和因素。以下是…

AI提示词:打造爆款标题生成器

打开GPT输入以下内容&#xff1a; # Role 爆款标题生成器## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 利用心理学和市场趋势&#xff0c;生成吸引眼球的自媒体文章标题。## Background 一个吸引人的标题是提升文章点击率和传播力…

优化爬虫体验:揭秘IP重复率过高问题解决方案

在当今信息爆炸的时代&#xff0c;网络中蕴藏着大量宝贵的数据&#xff0c;而爬虫技术成为我们提取这些数据的重要工具。然而&#xff0c;随着爬虫的广泛使用&#xff0c;IP重复率高的问题也随之而来。本篇博文将揭秘解决这一问题的关键方法——使用IP代理。 一、 IP高重复问题…

手慢无,速看︱PMO大会内部学习资料

全国PMO专业人士年度盛会 每届PMO大会&#xff0c;组委会都把所有演讲嘉宾的PPT印刷在了会刊里面&#xff0c;供大家会后回顾与深入学习。 第十三届中国PMO大会-会刊 《2024第十三届中国PMO大会-会刊》 &#xff08;内含演讲PPT&#xff09; 会刊&#xff1a;750个页码&…

TK 检查输入框是否为空

在Python的Tkinter库中&#xff0c;你可以使用事件绑定或者在按钮点击事件中检查输入框的值是否为空来实现这个功能。以下是一个简单的例子&#xff1a; import tkinter as tk from tkinter import messageboxdef check_input():entry input_box.get()if not entry:messagebo…

《梦醒蝶飞:释放Excel函数与公式的力量》10.4 IMREAL函数

第四节 10.4 IMREAL函数 10.4.1 函数简介 IMREAL函数是Excel中的一个工程函数&#xff0c;用于提取复数的实部。在复数运算中&#xff0c;实部是复数的一部分&#xff0c;表示没有虚部参与的部分。IMREAL函数提供了一个简单的方法来获取复数的实部&#xff0c;便于进一步计算…

Java 8革新:现代编程的全新标准与挑战

文章目录 一、方法引用二、接口默认方法三、接口静态方法四、集合遍历forEach()方法 一、方法引用 方法引用是Java 8中一种简化Lambda表达式的方式&#xff0c;通过直接引用现有方法来代替Lambda表达式。 方法引用使得代码更加简洁和易读&#xff0c;特别是在处理函数式接口时&…