问题标签 [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.
python - 重构多个相等检查的最pythonic方法
给定一个 if 语句,如:
像(1)这样重构是否更好:
或(2):
我的直觉是 1 更好,因为它更透明(如果不是更易读的话),但 2 更简洁,并且避免了遍历元组中的每个项目。
python - 存储(持久)单个(数字)变量的值的最优雅的方式
我需要在脚本执行之间存储一个计数器的值,这样我就可以每一百次触发一个特定的子例程。我知道我可以将整数写入文本文件并重新读取它,并且我知道我可以将变量腌制到几乎相同的效果(脚本目前使用后一种方法)。
我所关心的是找到使代码尽可能优雅的方法 - 简单易懂 - 特别是对于非技术观众。
模块名称在这pickle
方面没有帮助 - 一旦你理解了这个比喻,它就会完全令人难忘,但如果你不知道它,需要一个注释(或口头解释)来解释它是一个用于序列化 Python 对象的模块到磁盘。
虽然'很高兴',但我并不特别关心存储操作的原子性,也不是强烈保护存储的值不丢失[尽管我确实需要它在服务器重新启动时持续存在]。
我的兴趣是访问和更新变量值的代码的优雅,而不是初始化存储值的代码的优雅(因此,如果将值存储在文件中,我对代码感兴趣读取和写入已经存在并保存值的文件,而不是在第一次执行时创建文件)。
存储单个(数字)值以使其在脚本执行之间持续存在的最优雅(和/或最 Pythonic)的方式是什么?
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
在那之后,图书馆有真正所有者的必要方法,而不是第三图书馆。
最后,我删除了库中未使用的方法。
python - python作为密码的禅宗背后是否有一种特殊的哲学?
在检查之前this.py
,我期待的是 Python 的禅宗指南和打印声明。我发现了以下内容,它包含一个在运行时翻译的密码import this
。字符串是密码而不是实际文本背后是否有原因?
python - 如何减少函数中的重复,主要区别在于被调用子函数的名称
代码是这样的:
我不确定向函数添加额外的参数是个好主意,因为我已经有 3 个参数。
但是没有进一步优化,目前的代码在部分重复太多了#do samething
。(如下面的原始代码)。
我怎样才能改进它?
python - 竞争语言设计目标的不幸后果的名称是什么(例如:列表/元组、连接/扩展、+ 和 +=)?
鉴于:
以下语句使用+
,+=
和extend()
是可以的:
但是,这些语句会导致错误:
我知道+=
为 int 等不可变数字类型工作是为了方便起见(尽管它意味着与 C/C++ 中的类似运算符不同的东西,例如)。而且我知道+=
接受具有可变序列类型(列表)的可迭代 RHS 作为 LHS 很方便。
在某种程度上,int 和 tuple 是相似的(都是不可变的),因此如果+=
适用于 int,那么“为什么不”适用于 tuple。
并且在某种程度上,列表和元组是相似的(都是内置的序列类型),因此如果+=
与列表 LHS 一起使用,那么对于元组 LHS 来说“为什么不”。
但是......这会导致一些不太直观的不一致:
+=
跨内置序列类型的运算符缺乏并行使用支持:
L += iterable
就地修改列表 L 并且对它的现有引用跟踪更改,而...T += iterable
给元组 T 一个 TypeError 除非iterable是一个元组,并且假设 LHS 和 RHS 都是元组,LHS 被一个新对象替换。
- 两个直观相同的操作的含义变化,
+=
并且+
:
L += T
通过使用可迭代 RHS(元组 T)扩展列表 L 来修改列表 L,而...L = L + T
给出一个 TypeError 因为元组 T 与 的左操作数(列表 L)的类型不同+
。
现在,我的问题是:在 Python 世界中,这种现象是否有一个名称,是各种考虑因素的碰撞(Python 之禅或其他语言哲学、强类型、实用性胜过纯粹性、直观的运算符等效性、可变性、数字- vs-sequence types) 导致了可以被视为语言中的不一致之处,例如内置序列类型之间缺乏并行使用,或者上面突出显示的此类内置类型的违反直觉的运算符不一致?