我知道这可以被视为基于意见的,但谷歌搜索并没有找到我希望的资源,我正在寻找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 |= …Run Code Online (Sandbox Code Playgroud) 我发现了pandas DataFrame.query方法,它几乎完全符合我的需要(并实现了我自己的解析器,因为我没有意识到它存在,但实际上我应该使用标准方法).
我希望我的用户能够在配置文件中指定查询.语法看起来很直观,我可以期待我的非程序员(但工程师)用户能够弄明白.
缺少一件事:一种选择数据框中所有内容的方法.有时我的用户想要使用的是每一行,因此他们会将"全部"或其他内容放入该配置选项中.实际上,这将是默认选项.
我尝试了df.query('True'),但这引发了一个KeyError.我尝试了df.query('1')但返回了索引为1的行.空字符串引发了一个ValueError.
我能想到的唯一的事情是1)每次我需要做这种类型的查询(在代码中可能是3或4次)或2)子类DataFrame和重新实现查询,或添加query_with_all方法时放置一个if子句:
import pandas as pd
class MyDataFrame(pd.DataFrame):
def query_with_all(self, query_string):
if query_string.lower() == 'all':
return self
else:
return self.query(query_string)
Run Code Online (Sandbox Code Playgroud)
然后每次使用我自己的班级而不是熊猫队.这是唯一的方法吗?