51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 807|回复: 0
打印 上一主题 下一主题

[原创] Python GUI时容易犯的10个错误

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-11-8 16:52:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 草帽路飞UU 于 2022-11-11 16:15 编辑

Python是全世界最广泛使用的编程语言之一。它是一种高级的、面向对象的编程语言。几个PythonGUI库在功能和许可方面是不同的。


  Python是一种解释型语言,给了程序员自由。然而,巨大的独立性伴随着巨大的责任和出错的可能性。有了PyScripter,编程就更简单了,这是一个免费的、开源的WindowsPython集成开发环境


(IDE),它使用 Python工具 来简化编程。在这篇文章中,我们将介绍Python程序员经常犯的10个错误以及如何纠正这些错误。

  在创建Python GUI时,开发者常犯的错误有哪些?


  如何避免无效的类变量?

  电影制作者最常犯的错误之一就是这个。Python把类的变量当作字典来处理。如果一个类的一个属性不存在,那么它就缺少一个属性。这表明在一个类中改变任何东西都不应该影响其他类。与实例变量相

反,类变量是由一个类中的所有实例共享的。因此,类变量和局部变量的功能完全不同。由于 Python 是一种面向对象的语言,类和局部变量的功能是不同的。程序员经常在没有使用正确的类名的情况下改变

一个类变量,这就导致一个具有相同名称的实例变量被创建。

  为了避免再犯这种错误,程序员在识别或改变类变量时,应该总是用正确的名字来指代它们,确保所有的类成员收到最新的值。


  为什么要避免利用不恰当的缩进?


  Python 对缩进的格式规则相当详细。这种编程中的语言缩进决定了一个代码行是否与先前的代码块相连。开发人员经常低估了采用正确缩进的关键必要性。尽管PEP 8建议缩进4个空格,但你可以决定空

格的数量,只要它们是统一的。没有经验的程序员经常低效地使用空格和制表键。

  如果缩进看起来是一样的,你可能没有意识到你已经混淆了制表符和空格,所以要非常注意。我们建议采用具有搜索和替换功能的Python IDE来保持恒定的间距,以解决这个问题。如果你正在寻求完美的


PyScripter,它是目前最好的Python GUI。如果PEP的规则对你不合适,你应该承诺一定数量的空格。坚持一定数量的空间是避免这种错误的关键。

  我如何处理UnboundLocalError?


  这是开发人员最常犯的错误之一。除了 LEGB 标准之外,Python 开发者还需要理解其范围规则。Local, Enclosing, Global, Built-in 规则,也被称为 LEGB,是 Python 编程语言的基础。理解Python遵守

这个特定的顺序是很关键的。

  遵循 LEGB 规则,Python 最初会认为在一个范围内分配的任何变量都是该范围内的本地变量,并且会覆盖外部范围内的任何同名变量。结果是,当你分配变量时成功的代码,现在当你再次调用该函数时


可能会导致 "UnboundLocalError"。使用像 PyScripter 这样的 Python IDE 将是解决这个问题的最好方法。然而,你可以使用赋值语句明确地定义或声明该变量为全局变量,轻松地纠正这个问题。

  类似的模块名称如何导致错误?

  当导入一个你知道包含在 Python 标准库中的内置模块时,你可能会惊讶地看到错误信息 "ImportError"。这个问题经常发生在程序员将一个与标准库中的内置模块同名的文件导入他们的库中。在某些情

况下,Python 更喜欢你所安装的名字相似的模块,而不是标准库中的内置模块。答案是什么?只需给库文件一个新的名字,与任何标准库的模块不同,并且分开。

  如何使用表达式中的默认函数参数?


  通过给 Python 中的一个函数参数分配一个缺省值,你可以表示这个参数是可选的。尽管这是一个奇妙的语言特性,但当默认值可以改变时,可能会造成一些困难。以这个 Python 函数的定义为例。

  def foo(bar=[]): # bar is optional and defaults to [] if not specified

  bar.append("baz") # but this line could be problematic, as we'll see…


  return bar

  当函数在没有值的情况下被调用时,可选参数总是被设置为默认表达式,这种误解是相当普遍的。例如,考虑到上面的代码,我们可以预料到反复调用 foo() (即没有给出 bar 参数) 总是会返回 "baz",因


为假定 每次 调用 foo()时 bar 都被设置为 [] (即一个新的空列表)。然而,一个函数参数的默认值只在函数声明时被分析过一次。因此, 在没有指定 bar 参数 的 情况下 调用 foo() 将继续利用列表。 bar 参数

只在 foo() 第一次声明 时被定义为其缺省值(即一个空列表) 。

  正确使用大括号或小括号的重要性是什么?


  很多 Python 初学者都犯了这个错误,令人吃惊。与算术类似,一条语句的开括号和闭括号的数量必须是可以理解的,要相匹配。验证你的代码,确保每一个开放的小括号或大括号都有一个匹配的闭合来

完成这个概念。

  语法错误的可能原因是什么?


  如果你遇到了语法问题,你可能忽略了在语句的结尾包含一个冒号。在Python代码中,每个结构句后面都有一个冒号。这也适用于函数头,冒号导致函数中的剩余行被缩进。初学Python的程序员经常犯

这个错误。只需练习这个准则,直到本能地使其正确:每个结构化的句子都以冒号结束。

  如何正确使用 Python init 函数?


  init方法可以作为构造函数来创建一个对象或为一个新的类对象分配内存。当一个对象由一个类形成时,init方法被用作构造函数,使类能够配置类的属性。换句话说,它只被用来设置数值。但是试图利用

这个函数来返回值是Python程序员犯的一个典型错误。只要意识到Python init方法的函数只能作为构造函数来补救就可以了。

  如何处理迭代器中的极限?


  早期的Python程序员应该知道迭代器和生成器有极限。从 Python 2 切换到 Python 3 的开发者可能经常看到这个问题。Python3更有效,因为它包括更多的生成器。对于遇到新困难的人来说,这可能是

一个挑战。

  这个错误可能会出现如下情况:你可能会使用Python2的zip迭代器函数来合并两个列表,然后再尝试输出这个列表。然而,如果你使用同样的代码,python3不会把所有的值都交付给你一次。这是因为迭


代器是空的,不能由于你的使用而返回任何更多的值。

  简单地在一开始就把一个函数改成一个列表就可以解决这个问题。然而,一个 list 不能被耗尽,尽管一个迭代器可以。关于 Python 迭代器的其他信息,请看这个网站。


  用户可以使用可改变的默认参数吗?


  另一个经常发生的问题是当默认参数被赋予可改变的 数据类型时 。当在 Python 中创建一个函数时,可变数据类型的默认值只被评估一次。如果你在代码中只使用一次该函数,你可能不会注意到任何奇

怪的事情,但是如果你再次使用它,Python 将利用在初始函数调用时确定的默认值。

  让我们假设你正在处理一个可变数据类型的列表。解释器将使用函数声明时首先形成的列表。将 "无 "设置为默认值是解决这个编程问题的一种技术。随后可以验证给函数的任何值,以确保它与参数匹


配。

  如何提高你的Python GUI体验?


  Embarcadero赞助的PyScripter Python IDE是一个了不起的创新,具有无可比拟的功能和价值。它简短而不复杂,其目标是给Delphi程序一个可靠的脚本解决方案。此外,它还提供了一个直接的、有用

的 Python用户界面 ,既整洁又现代。因此,PyScripter可以有效地帮助你避免Python开发者经常犯的所有错误。

  著名的GUI库VCL和FireMonkey被许多Delphi和C++Builder开发者使用(FMX)。 用于Python的DelphiVCL 和DelphiFMX库是一组Python模块,为Python程序员提供了访问值得信赖和备受推崇的


VCL和FireMonkey (FMX)GUI框架的途径。

  DelphiFMX for Python使用跨平台的FireMonkey框架为Windows、Linux、macOS和Android带来了一个强大的、可适应的GUI框架,而DelphiVCL for Python则针对本地Windows开发,采用了仅适


用于Windows的VCL框架。

  使用VCL和FMX库有很多优势。这些库是使用著名的PyScripter Python IDE中的开源Python4Delphi包创建的。







分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-9-28 19:26 , Processed in 0.080424 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表