- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道这可能会被认为是基于意见的,但谷歌搜索没有找到我希望的资源,我正在寻找 Python 社区中任何既定和商定的最佳实践的链接。
我是一个组织中的中级 Python 程序员,该组织的历史非常糟糕,使用任何发明的语言编写混淆代码。我真的很想树立一个良好的编程风格和实践的例子。为此,我遵循 PEP 8,在我写的所有内容上运行 pylint,并深入思考它的每条建议,而不是简单地驳回它们。我已经将更长、更复杂的方法分解为更短的方法,部分原因是它的建议。我还按照这种风格编写了详细的文档字符串:http://sphinxcontrib-napoleon.readthedocs.io/en/latest/example_google.html
我面临的一个挑战是,虽然我不是我组织中唯一的 Python 程序员,但我似乎是唯一一个认真对待这些东西的人,而且我的同事似乎并不介意无证、重复的代码命名例如,不遵循任何特定模式。所以我不认为让他们审查我的代码或向他们学习是我最好的选择。
我刚刚从 pylint 收到了我的第一条“模块中的行过多”消息。我还没有完成模块的编写——我想在现有的类中至少再添加一个类和几个方法。我知道这个想法是一个模块应该“做一件事”但是那个“事情”还没有完全实现。
以下是pylint给我的一些统计数据:
+---------+-------+-----------+-----------+------------+---------+
|type |number |old number |difference |%documented |%badname |
+=========+=======+===========+===========+============+=========+
|module |1 |1 |= |100.00 |0.00 |
+---------+-------+-----------+-----------+------------+---------+
|class |3 |3 |= |100.00 |0.00 |
+---------+-------+-----------+-----------+------------+---------+
|method |27 |27 |= |100.00 |0.00 |
+---------+-------+-----------+-----------+------------+---------+
|function |2 |2 |= |100.00 |0.00 |
+---------+-------+-----------+-----------+------------+---------+
+----------+-------+------+---------+-----------+
|type |number |% |previous |difference |
+==========+=======+======+=========+===========+
|code |266 |24.98 |266 |= |
+----------+-------+------+---------+-----------+
|docstring |747 |70.14 |747 |= |
+----------+-------+------+---------+-----------+
|comment |41 |3.85 |41 |= |
+----------+-------+------+---------+-----------+
|empty |11 |1.03 |11 |= |
+----------+-------+------+---------+-----------+
最佳答案
哇,好问题。拥有编写高质量代码的愿望真的不是那么普遍。不过,关于你的同事的一些建议。不要否定他们的观点。他们可能并不打算做坏事,但是您必须以某种方式将软件质量的概念与他们的值(value)概念联系起来。花时间与人们谈论您编写的代码并不仅仅是您从体验中获得的东西。影响组织尊重和追求软件质量对于您对公司绩效产生任何持久影响是必要的。否则,您编写的代码有多好都无关紧要。抱歉在旁边;我知道这不是你真正的问题。
在某些语言(如 Java)中,通常在一个文件中只有一个类,并将该文件命名为与它包含的类相同的名称。这在 Python 中是不正常的,但我认为它提供了一些很好的指导。您希望代码易于浏览,这需要在尽可能将事物紧密结合和组织起来之间取得平衡,这是我们将事物分开的主要原因。因此,您可以首先查看关于您的问题空间以及代码中的想法与问题空间中的想法的一致性的这两个问题。
我使用文档字符串,但我没有尝试用狮身人面像或重组或 latex 制作它们。我在一个使用 Doxygen 的大型代码库中工作,但老实说,我在评论中并没有花太多精力使用该工具的功能,尽管我偶尔会查看 Doxygen 文档,看看是否有我遗漏的东西。我以前曾使用过类似表单的编码风格,但实际上我并不认为文书工作会带来值(value)。在您的评论中要追求的重要事情与您在设计和实现中所追求的相同,那就是理解。每个评论中的每个词都增加了理解力。我不想要无值(value)的填充词,如 Name、Parameter、Return……我的意思是,我想要,但只是勉强,因为我希望人们预先告诉我他们的界面是什么。我将所有这些填充词视为我愿意容忍的文书工作。我认为让人们觉得好的评论会产生好的代码是一个陷阱。它们有所帮助,但通常,如果我觉得我必须评论,则发生了两件事之一:它是一个界面,或者它是一个设计缺陷。如果我必须评论一些不是接口(interface)的东西,这可能意味着我的设计不是很清楚,或者我的实现变得困惑,因为我懒得弄清楚如何让每个函数做一件事。如果我再次来到这里,我可能会清理它。
没有看到您的代码,我无法就如何使其成为高质量提供太多建议,但考虑如何定义“软件质量”可能会有所帮助。我将其定义为“代码更改的难易程度”。这取决于代码可能需要的更改类型,这意味着评估代码的质量确实必须包括对可能需要的内容的一些预期。与直觉相反,实际上使您的代码更容易更改通常涉及不尝试实现现在不需要的任何内容。即便如此,我经常会在最轻微的挑衅下实现一些东西,尤其是在 Python 中。对于 example ,实现 str 方法是个好主意;通过实现 使您的对象可以散列eq , ne 和 哈希更酷,因为它允许您将对象用作字典中的键或集合的成员。
另一项(有点随机的)建议是警惕面向对象的思维。它有很多优点,但也有一些陷阱。例如,不要创建像 get_thing(self) 这样的函数。拥有一个属性会更好,如果你需要做额外的工作,你可以创建一个@property getter setter,这仍然会给调用者一个简单的属性访问,这样更简洁。我发现刚刚学习了一些面向对象思想的人倾向于将大量的 get 和 set 方法视为一件好事,但我更喜欢将状态完全排除在设计之外,如果可以的话,所有这些 get 和 set 方法方法暗示对象的状态。
关于python - 关于模块长度推理和文档字符串与代码行比率的 Pylint 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46557680/
将 KLV 字符串拆分为键、长度、值作为元素的列表/元组的更有效方法是什么? 为了添加一点背景,前 3 位数字作为键,接下来的 2 位表示值的长度。 我已经能够使用以下代码解决该问题。但我不认为我的代
首先,我试图从文件中提取视频持续时间,然后在无需实际上传文件的情况下显示它。 当用户选择视频时 - 信息将显示在其下方,包括文件名、文件大小、文件类型。不管我的技能多么糟糕 - 我无法显示持续时间。我
我是 Scala 编程新手,这是我的问题:如何计算每行的字符串数量?我的数据框由一列 Array[String] 类型组成。 friendsDF: org.apache.spark.sql.DataF
我有一个React Web应用程序(create-react-app),该应用程序使用react-hook-forms上传歌曲并使用axios将其发送到我的Node / express服务器。 我想确
如果给你一个网络掩码(例如 255.255.255.0),你如何在 Java 中获得它的长度/位(例如 8)? 最佳答案 如果您想找出整数低端有多少个零位,请尝试 Integer.numberOfTr
我需要使用 jQuery 获取 div 数量的长度。 我可以得到它,但在两个单击事件中声明变量,但这似乎是错误的,然后我还需要使用它来根据数字显示隐藏按钮。我觉得我不必将代码加倍。 在这里摆弄 htt
我对此感到非常绝望,到目前为止我在 www 上找不到任何东西。 情况如下: 我正在使用 Python。 我有 3 个数组:x 坐标、y 坐标和半径。 我想使用给定的 x 和 y 坐标创建散点图。 到目
我有一个表单,我通过 jQuery 的加载函数动态添加新的输入和选择元素。有时加载的元素故意为空,在这种情况下我想隐藏容器 div,这样它就不会破坏样式。 问题是,我似乎无法计算加载的元素,因此不知道
我决定通过替换来使我的代码更清晰 if (wrappedSet.length > 0) 类似 if (wrappedSet.exists()) 是否有任何 native jq 函数可以实现此目的?或者
简单的问题。如果我有一个如下表: CREATE TABLE `exampletable` ( `id` int(11) NOT NULL AUTO_INCREMENT, `textfield`
我正在使用经典 ASP/MySQL 将长用户输入插入到我的数据库中,该输入是从富文本编辑器生成的。该列设置为 LONG-TEXT。 作为参数化查询(准备语句)的新手,我不确定用于此特定查询的数据长度。
我正在获取 Stripe 交易费用的值(value)并通过禁用的文本字段显示它。 由于输入文本域,句子出现较大空隙 This is the amount $3.50____________that n
我有一个 div,其背景图像的大小设置为包含。但是,图像是视网膜计算机(Macbook Pro 等)的双分辨率图像,所以我希望能够以某种方式让页面知道即使我说的是背景大小:包含 200x200 图像,
我正在开发一个具有“已保存”和“已完成”模块的小部件。当我删除元素时,它会从 dom 中删除/淡化它,但是当我将其标记为完成时,它会将其克隆到已完成的选项卡。这工作很棒,但顶部括号内的数字不适合我。这
我有一个来自 json 提要的数组,我知道在 jArray 中有一个联盟,但我需要计算出该数组的计数,以防稍后将第二个添加到提要中。目前 log cat 没有注销“teamFeedStructure”
目标:给定一个混合类型的数组,确定每个级别的元素数量。如果同一层有两个子数组,则它们的每个元素都计入该层元素的总数。 方法: Array.prototype.elementsAtLevels = fu
我需要帮助为 Java 中的单链表制作 int size(); 方法。 这是我目前所拥有的,但它没有返回正确的列表大小。 public int size() { int size = 0;
我正在为学校作业创建一个文件服务器应用程序。我目前拥有的是一个简单的 Client 类,它通过 TCP 发送图像,还有一个 Server 类接收图像并将其写入文件。 这是我的客户端代码 import
我有这对功能 (,) length :: Foldable t => t a -> b -> (Int, b) 和, head :: [a] -> a 我想了解的类型 (,) length he
我正在GitHub Pages上使用Jekyll来构建博客,并希望获得传递给YAML前题中Liquid模板的page.title字符串的长度,该字符串在每个帖子的YAML主题中。我还没有找到一种简单的
我是一名优秀的程序员,十分优秀!