小编Tom*_*ker的帖子

以尽可能少的行数完整导入模块内的本地文件

假设我正在编写一个自定义 PIP 包,其结构如下:

\n
.\n|    setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 src\n|   |    __init__.py\n|   |    useful_functions_i.py\n|   |    useful_functions_ii.py\n|   |    useful_strings.py\n|\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 tests\n    |    unit_tests.py\n\n
Run Code Online (Sandbox Code Playgroud)\n

假设useful_strings看起来像这样:

\n
.\n|    setup.py\n\xe2\x94\x82\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 src\n|   |    __init__.py\n|   |    useful_functions_i.py\n|   |    useful_functions_ii.py\n|   |    useful_strings.py\n|\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80 tests\n    |    unit_tests.py\n\n
Run Code Online (Sandbox Code Playgroud)\n

并且useful_functions_iuseful_functions_ii包含执行以下操作的函数:

\n
USEFUL_STRING_A = "useful-string-a"\nUSEFUL_STRING_B = "useful-string-b"\n...\n
Run Code Online (Sandbox Code Playgroud)\n

我应该如何导入useful_stringsand ?useful_functions_iuseful_functions_ii(这并不是一个看起来那么简单的问题。

\n

如果我使用:

\n
def a_useful_function(a_string):\n    if a_string == useful_strings.USEFUL_STRING_XYZ:\n        return True\n    return False\n
Run Code Online (Sandbox Code Playgroud)\n

src如果我尝试在本地运行一些代码,那么效果会很好;pip install .如果我运行并尝试将代码库用作 …

python python-module python-import pytest

7
推荐指数
1
解决办法
616
查看次数

是否有在 Python 代码中指示数量单位的约定?

请注意,我是从人类可读性的角度来看这一点的,而不是将正在使用的单位告知程序本身。


我目前正在从事一个与机械工程有密切联系的项目,多次出现的问题之一是我的代码不清楚给定数量的单位- 通常是一个常数,但是批评也可以扩展到一些变量 - 被衡量。

目前,我正在这样做:

length = 28
# ^^^ measured in mm ^^^
Run Code Online (Sandbox Code Playgroud)

但这感觉很hacky,有点难看。我可以这样做:

length = 28 # <<< measured in mm
Run Code Online (Sandbox Code Playgroud)

这看起来更好,但我在大学里被灌输内嵌评论是邪恶的,这是一种我无法摆脱的偏见。(虽然话虽如此,我在大学里只教过 C 和 Java,内联注释的陷阱更明显。Python 中可以接受内联注释吗?)

是否有一些有用的约定来规定如何以清晰优雅的方式指示数量单位?还是我独自一人?

python comments

5
推荐指数
1
解决办法
59
查看次数

在 Python 中不使用私有方法和函数是不好的做法吗?

背景

\n

几周前,我完成了 Python 的技术测试。虽然测试的总体反馈非常积极,但我在反馈中看到的令我惊讶的一件事是:

\n
\n

没有封装 \xe2\x80\x93 大量的 public_functions 应该是 _private_functions

\n
\n

这让我感到惊讶,因为根据我作为 Python 开发人员两年来在脑海中建立的模糊画面,我们实际上并没有在 Python 中执行私有方法或函数。我们所拥有的只是惯例、速记和君子协定的拼凑而成。但我脑海中的那个画面是正确的吗?

\n

下划线和双下划线

\n

因此,我更深入地研究了这个问题,查阅了标准 Python 文档以及PEP 8,并得出了以下结论:

\n
    \n
  1. 在类属性之前使用双下划线会调用名称修改,即将__spam被解释为_classname__spam. 这可以用来模拟一种粗略的隐私,这样如果有人尝试__spam从类之外调用,就会引发异常。
  2. \n
  3. 程序员可以使用单个下划线来指示函数(或类似函数)是私有的,但这似乎没有什么语法效果。PEP 8 提到调用_single_leading_underscore时不会导入from M import *,但我找不到其他任何内容。
  4. \n
\n

然而,这只是告诉我我可以做什么,而不是我该做什么。

\n

我想知道什么

\n

我是否可以将上述反馈视为来自可能将其职业生涯花在 Java/C#/etc 编程上的人,因此在使用 Python 进行封装时没有正确的心态?或者我应该重新思考编写 Python 程序的方式,以便任何封装都更加明确?

\n

python oop encapsulation private

4
推荐指数
1
解决办法
2249
查看次数