Python学习笔记 Day 4

Python学习笔记Day 2 Python学习笔记 Day 2初识库(模块)pyc文件与PyCodeObject文件 初识库(模块) import sys print (sys.path)#打印系统库(即环境变量)路径 print(sys.argv)#找印当前文件路径,即绝对路径 import os cmd_res=os.system("dir")#dir,查看当前路径文件,执行命令,不保存结果 cmd_res1=os.pop... 阅读详情

装饰器

本质是函数,用来装饰其他函数,就是为其他函数添加附加功能。

原则:

  1. 不能去修改被装饰的原代码
  2. 被装饰的函数的调用方式不能动

import time
def timmer(func):#本质是函数,函数即“变量”
    def warpper(*args,**kwargs):
        start_time=time.time()
        func()
        stop_time=time.time()
        print('the func run time is %s' %(stop_time-start_time))
    return warpper

@timmer#装器饰器的引用方法
def test1():
    time.sleep(3)
    print('in the test1')

test1()

运行如图:


in the test1
the func run time is 3.0006024837493896

故:实现装饰器知识储备

  1. 函数即“变量”
  2. 高阶函数
    高阶函数条件(2者有1个即可 ):
    (1) 把1个函数当作实参传给另一个函数(实现不去修改被装饰的源代码)
    (2) 返回值中包含函数名(实现被装饰的函数的调用方式不改动)
  3. 嵌套函数

高阶函数+嵌套函数=》装饰器

知识2-(1):

import time
def bar():
	time.sleep(3)
	print('in the bar')
def test1(func):
	start_time=time.time()
	func()
	stop_time=time.time()#计算bar函数的运行时间
	print("the func run time is %s "%(stop_time-start_time))
#不修改被装饰的原代码bar(),为bar添加附加功能(计时) test1即装饰器
print(bar)#bar函数门号,内存地址,也就是说加括号就是调用 
test1(bar)

运行如下:

<function bar at 0x000000FD2E9AB9D8>
in the bar
the func run time is 3.000737428665161

知识2-(2):

import time
def bar():
	time.sleep(3)
	print('in the bar')
def test2(func):
	print(func)
	return func#
bar=test2(bar)
#bar内存地址,交给Test2 , 打印又返回bar内存地址,随后稪盖
bar()#运行Bar函数

运行如下:

<function bar at 0x000000FD2E9AB598>
in the bar

装饰器(无参数)

import time
def timer(func):
	def deco():
		start_time=time.time()
		func()#此地址是第一次给的bar1的内存,执行的是bar1()
		stop_time=time.time()
		print('the func run time is %s' %(stop_time-start_time))
	return deco
def bar1():
	time.sleep(3)
	print('in the bar')
@timer
#此句与bar1=timer(bar1)等同,想谁加上装饰器在哪加@+装饰器名
#只是这里是在bar2前,所有的bar1会成bar2
def bar2():
	time.sleep(3)
	print('in the bar2')
bar1=timer(bar1)
#把bar1的内存地址交给Timer,Deco函数就是“变量”,
#其接受Timer参数,故其地址就成了bar1的内存地址,并其返回赋值到了新bar1
bar1()#如此一来Bar1成了指向deco,加括号成了运行Deco()
bar2()

运行如下:

in the bar
the func run time is 3.0003163814544678
in the bar2
the func run time is 3.0003561973571777

装饰器(有参数)

import time
def timer(func):#A:func=bar2
	def deco(*args,**kwargs):
		start_time=time.time()
		func(*args,**kwargs)#B:func=bar2
		stop_time=time.time()
		print('the func run time is %s' %(stop_time-start_time))
	return deco
def bar1():
	time.sleep(3)
	print('in the bar')
@timer
#bar2=timer(bar2),A,故:bar2()=deco(),当bar2()有参数,就可放到B处
#因不知道bar2有多少参数,故;用的是*args,**kwargs,用以接收不知数的参数
def bar2(name,age,sex):
	time.sleep(3)
	print('in the bar2:',name,age,sex)
bar1=timer(bar1)
bar1()
bar2("liang",18,"male")

运行如下:

in the bar
the func run time is 3.000230073928833
in the bar2: liang 18 male
the func run time is 3.000300645828247

装饰器(高级:装饰器带有参数)

网页登陆认证
Print(home()):打印home函数执行完所返回(return)的值
已往的【func(*args,**kwargs)#B:func=bar2】在源函数要求要有Return内容时,装饰器的【func(*args,**kwargs)#B:func=bar2】不加处理会导致源函数代码的Return内容丢失
故有下方:
res = func(*args, **kwargs) # from home
print("—after authenticaion ")
return res
登陆认证设本地和服务器认证。装饰器要改变升级–装饰器加上了参数
装饰器外嵌多一层函数

  1. 引用装饰器语句的参数会传到第一层
  2. 其他与上面两种大同小异
  3. 断点运行视频 提取码: ydqs
__author__ = "Alex Li"
import time
user,passwd = 'alex','abc123'
def auth(auth_type):
    print("auth func:",auth_type)
    def outer_wrapper(func):
        def wrapper(*args, **kwargs):
            print("wrapper func args:", *args, **kwargs)
            if auth_type == "local":
                username = input("Username:").strip()
                password = input("Password:").strip()
                if user == username and passwd == password:
                    print("\033[32;1mUser has passed authentication\033[0m")
                    res = func(*args, **kwargs)  
一步到位解决Docker拉取镜像失败的问题!超详细的Docker代理设置教程!(使用代理解决群晖Docker获取注册表失败的问题) 阅读详情

相关推荐

Ad hoc网络路由协议概述4——按需路由协议(2)AODV协议 (Ad-hoc on-demand distance vector algorithm protocol)

AODV协议的基本流程。

weixin_42982240的博客 7705

TCP报文 Flood攻击原理与防御方式

TCP交互过程中包含SYN、SYN-ACK、ACK、FIN和RST报文,这几类报文也可能会被攻击者利用,海量的攻击报文会导致被攻击目标系统资源耗尽、网络拥塞,无法正常提供服务。接下来我们介绍几种常见的Flood攻击的原理和防御方式。

qq_32044265的博客 4219

如何用SPSS做logistic回归

详细到只有作者本人能看懂的SPSS逻辑回归育儿经

qq_44794961的博客 2万+

MC33PT2000控制详解一:PT2000 Dev Studio工具的使用

MC33PT2000共可控制6个高低端(如控制6个高压喷油器),1个高低端(如控制高压油泵)和DC-DC模块(如升压到65V).

m0_69929716的博客 1356

72-dify案例分享-揭秘!如何用 Dify 实现多语言 PDF 文档原格式翻译

本文围绕 Dify 1.6 + 版本,演示搭建 PDF 文档翻译 Agent:配置 MCP 服务、构建 Agent 并以 URL 传文件测试,实现高效翻译,展现 MCP 跨工具复用与简化集成的优势,助力 AI 应用开发。

个人技术 2287

Agent Skills:AI智能体规模化落地的基础设施

摘要:AgentSkills体系已成为AI智能体落地的核心基础设施,解决了能力扩展和行业知识沉淀两大核心难题。该开放标准通过语义优先、渐进式披露等设计原则,实现了工具调用的标准化和可控化,同时支持轻量化知识沉淀。Skill作为最小能力单元,将传统软件功能、行业知识等封装为可被智能体调用的标准化模块,推动了软件产业从"工具时代"向"智能体时代"的范式变革。目前该体系已被主流Agent工具广泛兼容,形成完整生态,未来将持续演进,进一步降低落地门槛,推动AI原生转型。

技术引领业务创新 1159

SAP特殊采购类80实战:跨工厂生产配置避坑指南(附完整测试流程)

本文深入解析SAP特殊采购类80在跨工厂生产场景下的实战应用与配置要点。文章从核心业务逻辑出发,详细拆解了后台配置、主数据与BOM的“双工厂”思维模式,并提供了从创建需求到成品收货的完整测试流程。重点揭示了多层BOM下的需求传递陷阱及常见报错解决方案,旨在帮助SAP顾问及用户规避实施风险,实现资源的灵活调度与流程自动化。

wind6的博客 1139

磁悬浮分子泵:起源、现状与未来趋势深度解析

摘要 磁悬浮分子泵作为高真空获取的关键设备,通过磁悬浮技术实现转子无接触高速运转,大幅提升了真空系统的性能和可靠性。本文系统梳理了分子泵从机械轴承到磁悬浮的技术演变历程,分析了当前行业格局及主要厂商产品特性,包括爱德华兹、普发真空等国际巨头的技术优势。研究进一步探讨了磁悬浮分子泵在半导体制造、科研设备等领域的核心应用,通过数学模型揭示了其性能参数关系。最后,展望了未来在智能化、节能化等方面的发展趋势,为相关领域的技术创新提供参考。 关键词:磁悬浮分子泵;高真空技术;半导体制造;科研设备;技术发展

技术工作者 690

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: Python学习笔记Day 3
下一篇: Python学习笔记 Day 5
尖枫508
博客等级 码龄8年 397粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尖枫508

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值