问题标签 [zen-of-python]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
80 浏览

python - 重构多个相等检查的最pythonic方法

给定一个 if 语句,如:

像(1)这样重构是否更好:

或(2):

我的直觉是 1 更好,因为它更透明(如果不是更易读的话),但 2 更简洁,并且避免了遍历元组中的每个项目。

0 投票
3 回答
192 浏览

python - 存储(持久)单个(数字)变量的值的最优雅的方式

我需要在脚本执行之间存储一个计数器的值,这样我就可以每一百次触发一个特定的子例程。我知道我可以将整数写入文本文件并重新读取它,并且我知道我可以将变量腌制到几乎相同的效果(脚本目前使用后一种方法)。

我所关心的是找到使代码尽可能优雅的方法 - 简单易懂 - 特别是对于非技术观众。

模块名称在这pickle方面没有帮助 - 一旦你理解了这个比喻,它就会完全令人难忘,但如果你不知道它,需要一个注释(或口头解释)来解释它是一个用于序列化 Python 对象的模块到磁盘。

虽然'很高兴',但我并不特别关心存储操作的原子性,也不是强烈保护存储的值不丢失[尽管我确实需要它在服务器重新启动时持续存在]。

我的兴趣是访问和更新变量值的代码的优雅,而不是初始化存储值的代码的优雅(因此,如果将值存储在文件中,我对代码感兴趣读取和写入已经存在并保存值的文件,而不是在第一次执行时创建文件)。

存储单个(数字)值以使其在脚本执行之间持续存在的最优雅(和/或最 Pythonic)的方式是什么?

0 投票
1 回答
69 浏览

python - 重构一个有很多库的python项目,这些库有“from smthng import *”

我开始了一个继续开发的 python 项目。它有10个本地图书馆。他们每个人都互相称呼“from name import *”。以 main 为例:

根据 python 的 zen,显式优于隐式。同样由于理解和调试项目,我需要明确的导入方法和变量。

其他库也使用相同的导入方法。我觉得所有库都通过“*”导入所有库。

我尝试手动重构

像这样。

但当我看得更深时,我停下了脚步。

例如 a.py 导入 exp1 库。在 b.py 中,它调用from a.py import *. 所以在b.py中,不需要import exp1就可以使用exp1库。因此,在 b.py 中,如果我转换from a.py import *为显式形式,from a.py import something则会出现依赖于 exp1 库的错误。有很多这样的例子。

我该如何解决这个问题?

更新

我做了什么?我用自己的方法导入库,每个库的变量。例如,我有 a.py、b.py 和 c.py 库。我将 a.py 和 b.py 用他们自己的所有方法导入到 c.py。像那样,

from a import foo, bar from b import exp, solv

在 b.py 中,以同样的方式, from a import foo, bar from c import sa, as

在那之后,图书馆有真正所有者的必要方法,而不是第三图书馆。

最后,我删除了库中未使用的方法。

0 投票
1 回答
45 浏览

python - python作为密码的禅宗背后是否有一种特殊的哲学?

在检查之前this.py,我期待的是 Python 的禅宗指南和打印声明。我发现了以下内容,它包含一个在运行时翻译的密码import this。字符串是密码而不是实际文本背后是否有原因?

0 投票
0 回答
26 浏览

python - 如何减少函数中的重复,主要区别在于被调用子函数的名称

代码是这样的:

我不确定向函数添加额外的参数是个好主意,因为我已经有 3 个参数。

但是没有进一步优化,目前的代码在部分重复太多了#do samething。(如下面的原始代码)。

我怎样才能改进它?


0 投票
0 回答
33 浏览

python - 竞争语言设计目标的不幸后果的名称是什么(例如:列表/元组、连接/扩展、+ 和 +=)?

鉴于:

以下语句使用+,+=extend()是可以的:

但是,这些语句会导致错误:

我知道+=为 int 等不可变数字类型工作是为了方便起见(尽管它意味着与 C/C++ 中的类似运算符不同的东西,例如)。而且我知道+=接受具有可变序列类型(列表)的可迭代 RHS 作为 LHS 很方便。

在某种程度上,int 和 tuple 是相似的(都是不可变的),因此如果+=适用于 int,那么“为什么不”适用于 tuple。

并且在某种程度上,列表和元组是相似的(都是内置的序列类型),因此如果+=与列表 LHS 一起使用,那么对于元组 LHS 来说“为什么不”。

但是......这会导致一些不太直观的不一致:

  1. +=跨内置序列类型的运算符缺乏并行使用支持:
  • L += iterable就地修改列表 L 并且对它的现有引用跟踪更改,...
  • T += iterable给元组 T 一个 TypeError 除非iterable是一个元组,并且假设 LHS 和 RHS 都是元组,LHS 被一个新对象替换。
  1. 两个直观相同的操作的含义变化,+=并且+
  • L += T通过使用可迭代 RHS(元组 T)扩展列表 L 来修改列表 L,...
  • L = L + T给出一个 TypeError 因为元组 T 与 的左操作数(列表 L)的类型不同+

现在,我的问题是:在 Python 世界中,这种现象是否有一个名称,是各种考虑因素的碰撞(Python 之禅或其他语言哲学、强类型、实用性胜过纯粹性、直观的运算符等效性、可变性、数字- vs-sequence types) 导致了可以被视为语言中的不一致之处,例如内置序列类型之间缺乏并行使用,或者上面突出显示的此类内置类型的违反直觉的运算符不一致?