网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
01月20日漏签0天
python吧 关注:480,906贴子:1,983,522
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 3回复贴,共1页
<<返回python吧
>0< 加载中...

求助请教一下,为什么Python要避免使用闭包

  • 只看楼主
  • 收藏

  • 回复
  • 大佬大佬帮个忙
  • 举人
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
人家检视不给我合入,说闭包场景有循环会出问题,但又不说啥问题让百度,我查了资料,就是循环体中的内部函数引用外部函数变量时,会引用同一个变量,导致多次执行时结果相同,但是我外部定义的变量全都是静态不做修改的,临时使用的。
我单纯觉得用闭包很方便,主要方便我多线程去执行函数,大概是这种,外部定义a和b ,内部函数需要的cd由xxx和jjj通过parser1计算返回一个列表,元素是包含cd的字典[{“a”:v1,“b”∶ v2},.....]然后传给execute用concurrent库的submit去多线程执行
def func_a(xxx,jjj)∶
a=1
b=2
def func_b(c,d)∶
p = parser(a,b,c, d)
ret = action(p)
return p
c_and_d_dict_list = parser1(xxx,jjj)
res = concur_execute(c_and_d_dict_list)


  • 贴吧包打听
  • 进士
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
Python确实有一些场景下使用闭包可能会引发问题,但并不是说闭包本身是问题所在。在Python中,闭包是指一个内部函数可以访问其外部函数的变量,即使这个外部函数已经执行完毕。这种特性使得闭包在某些情况下非常有用,但在某些情况下也可能导致预期外的行为。你提到的问题,可能是因为你在使用闭包时,如果外部函数变量在多次执行过程中被修改,那么所有的线程可能会共享这个变量,导致在多线程环境下出现数据一致性问题。在你的例子中,你提到使用多线程执行函数,这可能是问题所在。因为Python的全局解释器锁(GIL)会在同一时刻只允许一个线程执行Python字节码,所以多线程并不能真正并行执行。而且,如果多个线程访问并修改同一个全局变量,那么就可能会出现数据一致性问题。对于这个问题,一个可能的解决方案是将需要修改的全局变量改为线程局部变量。你可以使用`threading.local()`来创建线程局部对象,这样每个线程都会有一个自己的对象副本,不会互相影响。另外,如果你的闭包引用的外部变量是静态的,即不会在执行过程中被修改,那么使用闭包应该是没有问题的。最后,如果你的问题依然存在,那么可能需要具体分析你的代码才能找出问题所在。


2026-01-20 03:14:30
广告
不感兴趣
开通SVIP免广告
  • 贴吧包打听
  • 进士
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
回复2楼楼中楼吧友 @大佬大佬帮个忙 :Python避免使用闭包的原因主要是因为它们可能导致不可预测的行为和效率问题。闭包可以捕获外部函数的变量,并在内部函数中修改它们。这种修改可能会在程序的不同部分产生意想不到的效果,使得代码难以理解和维护。在您的描述中,您定义的所有变量都是不会被内部函数修改的,只有内部函数接收的变量会被修改。这种情况下,使用闭包可能会导致混乱和不可预测的行为。此外,Python中的全局解释器锁(GIL)也会影响多线程操作同一外部函数变量的情况。GIL确保同一时刻只有一个线程可以执行Python字节码。这意味着即使在多核处理器上,Python的多线程程序也只能在一个核心上运行,这使得使用闭包在多线程环境中进行共享状态管理变得困难和低效。总之,尽管闭包在某些情况下可能有用,但在Python中,避免使用闭包通常是一个好主意,特别是在涉及多线程和共享状态的情况下。


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回python吧
分享到:
©2026 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示