发现问题:

当我使用PyQt5在写一个文本处理小工具时,需要在调用事件时传入参数,于是想到了lambda函数,代码如下:

def radiotext(self):'''文档输出格式选择功能'''# 自动生成按钮并命名。其中count_button为存储按钮名称的列表,list_new为存储按钮显示文本的列表for count, ele_new in zip(count_button, list_new):# 生成按钮count = QPushButton(ele_new)# 关联self.format事件count.clicked.connect(lambda : self.format(ele_new))# 按钮样式布局self.hbox11.addWidget(count)def format(self, str_select):'''根据格式按钮生成对应格式功能'''str = self.lineedit_format.text()str += str_selectself.lineedit_format.setText(str)

当我执行工具时,发现生成的无论哪个按钮,显示文本都是同一个值,如下图:

分析问题:

后来查阅资料,才发现lambda函数(或称闭包)传递的不是参数的值,而是参数的物理地址,所以lambda传递的参数都会是同一个值。想要解决可以使用functools模块。

解决问题:

导入functools模块,使用partial方法。更改的代码如下:

# 函数工具模块
from functools import partialdef radiotext(self):'''文档输出格式选择功能'''# 自动生成按钮并命名。其中count_button为存储按钮名称的列表,list_new为存储按钮显示文本的列表for count, ele_new in zip(count_button, list_new):# 生成按钮count = QPushButton(ele_new)# 关联self.format事件count.clicked.connect(partial(self.format, ele_new))# 按钮样式布局self.hbox11.addWidget(count)def format(self, str_select):'''根据格式按钮生成对应格式功能'''str = self.lineedit_format.text()str += str_selectself.lineedit_format.setText(str)

最终成功传参:

【debug】使用lambda在循环中传参时,参数总为同一个值相关推荐

  1. 【报错笔记】在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller

    在maven项目中jsp页面使用window.location.href给controller传参时参数过长所以路径无法跳转至controller 解决方案:使用a链接来用

  2. 关于SQL Server 2017中使用json传参时解析遇到的多层解析问题

    原文:关于SQL Server 2017中使用json传参时解析遇到的多层解析问题 开发新的系统,DB部分使用了SQL Server从2016版开始自带的Json解析方式. 用了快半年,在个人项目,以 ...

  3. v-for 循环 @click 动态传参(参数动态)

    v-for 循环 @click 动态传参(参数动态) 代码示下: @click="function('id_'+data.id)" 以上就是关于"v-for 循环 @cl ...

  4. 《从缺陷中学习C/C++》——6.3 数组传参时的sizeof

    本节书摘来自异步社区出版社<从缺陷中学习C/C++>一书中的第6章,第6.3节,作者: 刘新浙 , 刘玲 , 王超 , 李敬娜 , ,更多章节内容可以访问云栖社区"异步社区&qu ...

  5. python星号*在函数中、传参时的含义

    函数中:将其他传入的元祖格式的数据,都纳入麾下 可参考:什么是*args和**kwargs?:https://blog.csdn.net/weixin_35757704/article/details ...

  6. python 构造函数传参_C++和python混合编程之在python类构造函数中传参方法

    C++和python混合编程 零.前言 一.说明 二.测试代码 1.C++代码 2.python代码 三.运行结果 零.前言 C++是一门高效率的语言,Python是一门简单易学的脚本语言,现在Pyt ...

  7. URL传参时 从URL中获取中文参数的方法

    利用url传参时如果url中的参数是中文时因为编码类型不同在页面中获取会出现乱码 使用此方法能获取url中的参数值 并解决乱码问题 调用时直接 GetUrlByParamName("参数名& ...

  8. C++ 传参时传内置类型时用传值(pass by value)方式效率较高

    来源:唐磊的个人博客<C++ 传参时传内置类型时用传值(pass by value)方式效率较高> 在<Effective C++>里提到对内置(C-like)类型在函数传参时 ...

  9. ajax 与route的区别,浅析vue-router jquery和params传参(接收参数)$router $route的区别

    今天做项目时踩到了vue-router传参的坑(jquery和params),所以决定总结一下二者的区别. 1.jquery方式传参和接收参数 传参: this.$router.push({ path ...

最新文章

  1. Linux下C语言线程池的实现(1)
  2. 在博客园添加Lisp(或其它)代码高亮
  3. 递归实现显示目标文件夹的所有文件和文件夹,并计算目标文件夹的大小
  4. 1.2 偏差/方差-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  5. 如何快速将下载好的大量源代码文件加入到VS项目中
  6. 这样设置ae导出文件的时候m1还是能顶得住的,3分钟的事情渲染一个开场
  7. 《C#编程风格》还记得多少
  8. Codeforces Round #192 (Div. 2)
  9. Asp.Net Core 发布和部署( MacOS + Linux + Nginx )
  10. 「零门槛多语言 Python/C/C# 通用思想学习系列」第一篇:经典HelloWorld
  11. 上海服务器虚拟机系统,服务器虚拟机系统重装系统
  12. c 语言 小波变换,小波变换C语言
  13. C# WebApi Xml序列化问题解决方法:“ObjectContent`1”类型未能序列化内容类型“application/xml;charset=utf-8“的响应正文。...
  14. 阿里聚合直播盒子源码V10.x build更新日记
  15. 网络工程师和网络运维工程师,有什么区别?
  16. VR头显设备相关接口详解
  17. 常用的Markdown使用命令
  18. revit二次开发 创建标注标记
  19. 在校园网中进行无线路由器设置
  20. 阿里云天池大数据长期赛:金融风控-贷款违约预测(含代码)

热门文章

  1. pygame做的著名游戏_用Python和Pygame写游戏-从入门到放弃(1)
  2. 自然语言处理实践Task4
  3. ubuntu16.04安装docker(阿里云镜像)
  4. 通过例子理解事务的4种隔离级别
  5. HTML/CSS入门及基础
  6. HTTP / HTTPS抓包工具-Fiddler
  7. django的悲观锁
  8. web开发中四种域的生命周期
  9. java statement 参数_java statement详细用法
  10. plc 上位机编译算法_西门子PLC的开放式TCP通信