博客
关于我
python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
阅读量:801 次
发布时间:2023-03-07

本文共 1217 字,大约阅读时间需要 4 分钟。

曾经用 Python 写过一个小东西,然而最近里面的一个接口突然失效。我到那个网站上一看,人家直接把接口关掉了,功能被迁移到了微信公众号里。后来一个带佬同学凭着带佬的本能,直接找来一个叫wxpy的库,通过pip install wxpy的方式安装。wxpy的文档地址也很清楚。

在原来的代码中,这个功能封装得很完美,所以他要做的就是简单地把封装好的接口替换掉,然后就可以继续快乐的使用了。但没想到的是,试图用微信来实现与之前直接封包 get 有着很大的差异。用爬虫直接调别人的接口:输入 → 接口内部处理 → 输出返回,不管是在哪一端,都是一个整体的过程。而用微信来实现:输入发送消息 → 接口内部处理(等待回复) → 输出返回,这就很不一样了,问题就出在等待回复那里。如果将输入 → 处理 → 输出 作为一个封装好的功能,那么爬虫爬取就是一个同步过程,而现在用微信收发消息则是一个异步过程,我们必须等待对方回复。

带佬同学解决不了,于是就来找我。我找来文档简单的读了读,听带佬同学讲了讲,我就立刻明白该怎么做了。于是,我开始尝试用闭包来实现这个功能。

首先,我写了一个initial函数,用来初始化相关的变量。然后,我在函数内部注册了一个回调函数,当收到来自特定聊天对象的消息时会被调用。接下来,我定义了一个getMsg函数,用于处理收到的消息。然后,我定义了一个query函数,用于向微信发送特定的查询请求。最后,我在query函数中通过一个while循环,等待消息接收的状态变化,直到收到消息后再返回结果。

然而,当我试图在函数内部使用变量时,遇到了一个问题:NameError,提示name 'msg_received' is not defined。经过仔细检查,我意识到问题出在变量的作用域上。Python的变量作用域机制与JavaScript有很大不同,尤其是在闭包函数中使用变量时,必须明确声明变量的作用域。

为了解决这个问题,我查阅了一些资料,发现了一篇关于Python闭包变量作用域的博客文章。文章中提到,要在闭包函数中正确使用外部作用域的变量,必须在函数开头声明变量为"非局部变量",使用nonlocal关键字。这样可以避免Python在函数内部重新定义变量,而导致无法访问外部作用域中的变量。

我尝试在代码中加入nonlocal声明,结果问题得以解决。现在,我的代码可以正常运行,成功地将异步的微信消息处理与原有的接口逻辑对接起来。

通过这次经历,我对Python的变量作用域机制有了更深入的理解。虽然这与JavaScript的做法有很大不同,但也让我意识到,Python在变量管理上的严格性实际上可以帮助我们编写更安全、更有把握的代码。在未来的编程中,我会更加注意变量的作用域声明,避免类似的错误。

总的来说,这次经历让我对Python的闭包机制有了更全面的认识,也让我在面对类似问题时更加有信心和解决方案。

转载地址:http://fqofk.baihongyu.com/

你可能感兴趣的文章
python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
查看>>
python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
查看>>
Python图像处理:从内存加载jpeg
查看>>
python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
查看>>
python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
查看>>
python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
查看>>
python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
查看>>
Python哪个版本最稳定好用2023.10.19
查看>>
Python和黑客技术的渊源
查看>>
Python和RF编写接口自动化
查看>>
Python和RF编写web自动化
查看>>
python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
查看>>
python和java哪个更值得学——来自知乎高赞回答
查看>>
python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
查看>>
python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
查看>>
Python命名中尾随下划线有什么好处?
查看>>
Python启动脚本
查看>>
Python听写汇总结果
查看>>
python吊打Excel?屁!那是你不会用!
查看>>
Python合并两张图片 | 先叠透明度再合并 (附Demo)
查看>>