python学习之路6
装饰器:内嵌函数+高阶函数
一:函数调用顺序:其他高级语言类似,Python 不允许在函数未声明之前,对其进行引用或者调用
def bar(): print('in the bar') def foo(): print('in the foo') bar() foo()
错误示范
def foo(): print('in the foo') bar() foo()
def bar():
print('in the bar')
E:\python\python.exe E:/pyproject/1/装饰器.py in the foo Traceback (most recent call last): File "E:/pyproject/1/装饰器.py", line 9, in <module> foo() File "E:/pyproject/1/装饰器.py", line 7, in foo bar() NameError: name 'bar' is not defined
二:高阶函数
满足下列条件之一就可成函数为高阶函数
1、某一函数当做参数传入另一个函数中
2、函数的返回值包含n个函数,n>0
def bar(): print ('in the bar') def foo(func): res=func() return res foo(bar) #等同于bar=foo(bar)然后bar() in the bar
三:内嵌函数和变量作用域:
定义:在一个函数体内创建另外一个函数,这种函数就叫内嵌函数(基于python支持静态嵌套域)
函数嵌套示范:
def foo(): def bar(): print('in the bar') bar() foo() in the bar
局部作用域和全局作用域的访问顺序
x=0 def grandpa(): x=1 print(x) def dad(): x=2 print(x) def son(): x=3 print (x) son() dad() grandpa()
局部变量修改对全局变量的影响
y = 10 def test(): y = 2 print(y) test() print(y) 2 10
四:装饰器
装饰器:嵌套函数+高阶函数
调用方式:在原函数前面@装饰器函数名
示例:原函数test,调用方式test(),在不改变原函数以及不改变原函数调用的情况下新增计时功能。
import time def decorator(func): def wrapper(*args, **kwargs): start = time.time() func(*args, **kwargs) stop = time.time() print('run time is %s ' % (stop - start)) return wrapper @decorator #test=decorator(test)-->test=wrapper-->test()=wrappper() def test(list): for i in list: time.sleep(0.1) print('-' * 20, i) test(range(10)) E:\python\python.exe E:/pyproject/1/装饰器.py -------------------- 0 -------------------- 1 -------------------- 2 -------------------- 3 -------------------- 4 -------------------- 5 -------------------- 6 -------------------- 7 -------------------- 8 -------------------- 9 run time is 1.0073368549346924
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理