
一、函数对象
精髓:可以把函数当成变量去用
def func():
print('from func')
f=func
print(f,func)
f()
def foo(x):
print(x)
x()
foo(func)
def foo(x):
return x
res=foo(func)
print(res)
res()
l=[func,]
print(l)
l[0]()
dic={'k1':func}
print(dic)
dic['k1']()
二、函数嵌套
def max2(x,y):
if x > y:
return x
else:
return y
def max4(a,b,c,d):
res1=max2(a,b)
res2=max2(res1,c)
res3=max2(res2,d)
return res3
res=max4(1,2,3,4)
print(res)
def f1():
def f2():
pass
def circle(radius,action=0):
from math import pi
def perimiter(radius):
return 2*pi*radius
def area(radius):
return pi*(radius**2)
if action == 0:
return 2*pi*radius
elif action == 1:
return area(radius)
circle(33,action=0)
三、闭包函数
1、大前提:
核心点:名字的查找关系是以函数定义阶段为准
2、什么是闭包函数
"闭"函数指的该函数是内嵌函数(是定义在其他函数内的函数)
"包"函数指的该函数包含对外层函数作用域名字的引用(不是对全局作用域)
若内嵌函数包含对外部函数作用域(而非全局作用域)中变量的引用,
那么该’内嵌函数’就是闭包函数,简称闭包(Closures)
def f1():
x = 33333333333333333333
def f2():
print(x)
f2()
x=11111
def bar():
x=444444
f1()
def foo():
x=2222
bar()
foo()
def f1():
x = 33333333333333333333
def f2():
print('函数f2:',x)
return f2
f=f1()
x=4444
f()
def foo():
x=5555
f()
foo()
3、为何要有闭包函数
===》闭包函数的应用
def f2(x):
print(x)
f2(1)
f2(2)
f2(3)
def f1(x):
def f2():
print(x)
return f2
x=f1(3)
print(x)
x()
若是一个函数无法直接给它传参,可考虑将其写成闭包函数,通过外部函数传参
import requests
def get(url):
response=requests.get(url)
print(len(response.text))
get('https://www.cnblogs.com/linhaifeng')
get('https://www.cnblogs.com/linhaifeng')
get('https://zhuanlan.zhihu.com/p/109056932')
def outter(url):
def get():
response=requests.get(url)
print(len(response.text))
return get
cnblogs=outter('https://www.cnblogs.com/linhaifeng')
cnblogs()
cnblogs()
zhihu=outter('https://zhuanlan.zhihu.com/p/109056932')
zhihu()
方式一在下载同一页面时需要重复传入url,
方式二只需要传一次值,就会得到一个包含指定url的闭包函数,以后调用该闭包函数无需再传url
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构