像pep8这样的工具可以查看源代码样式,但是它们不会根据pep257,pep287来检查docstrings是否已经过滤.有这样的工具吗?
更新
我决定自己实现这样一个静态分析工具,请参阅:
我希望我的代码符合PEP-8标准.
但是,每次忘记任何规则时阅读PEP8页面都非常耗时.如果我有一个代码示例,它会更快地演示所有 PEP-8规则.
是否有任何代码示例正是这样做的?
我正在使用Sphinxdoc生成api文档,并且在编写docstring时遇到了pep8一致性问题.
如下所示,OWASP站点的链接在第105列结束,远远超过pep8规定的最大行长度
def handle_csrf(...):
"""The general recommendation by people in the know [OWASP]_, is
'to implement the Synchronizer Token Pattern (STP_)'.
.. [OWASP] The Open Web Application Security Project
(https://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet)
.. _STP: http://www.corej2eepatterns.com/Design/PresoDesign.htm
"""
Run Code Online (Sandbox Code Playgroud)
有没有办法包装网址,同时仍然保持生成的文档中的URL?
插入反斜杠不起作用.
根据PEP 8,编写用于标识类名(而非实例)的变量的约定是什么?
也就是说,给出了两个班,A
并且B
,它下面的语句是正确的?
target_class = A if some_condition else B
instance = target_class()
Run Code Online (Sandbox Code Playgroud)
要么
TargetClass = A if some_condition else B
instance = TargetClass()
Run Code Online (Sandbox Code Playgroud)
班级名称:
类名通常应使用CapWords约定.
但是也
方法名称和实例变量:
使用函数命名规则:小写,必要时用下划线分隔,以提高可读性.
在我看来,这两个公约发生了冲突,我无法找到哪一个盛行.
根据你的解释,这可能是也可能不是一个修辞问题,但它真的让我感到困惑.这个惯例有什么意义?我理解命名约定不一定要有背后的押韵或理由,但为什么偏离已经流行的camelCase?我不知道有什么押韵和背后的原因lower_case_with_underscores
吗?(是的,我完整地阅读了PEP 8,是的,我确实理解它只是一个提案,指南等)
我想我的真正问题是:我正在编写一个Python库.事实上,运气好的话,相对于我的其他项目,它可能是一个相当大的库.我已经尝试尽可能地遵守PEP 8,到目前为止,我甚至保持lower_case_with_underscores
PEP 8指示功能和方法名称.但是我不得不记得使用camelCase for Twisted,camelCase logging
以及其他所有东西.我应该使用什么命名约定,为什么?
令人惊讶的是,我非常关心命名,足以写出一个冗长的问题,而且我也很惊讶.也许在这些事情上我有一点强迫症.我没有太多关于它的"个人意见",因为我倾向于选择最常用的东西,在这种情况下,将是camelCase - 但它让我更加恼火的是找到那个我可能正在打破一些关于明确与隐含的永恒定律以及用石头或其他东西写成的蟒蛇的禅.
我一直在研究PEP 8 - Python代码样式指南和PEP8 - 高级用法,以获取有关如何命名我的测试类的线索.但是,这两个站点以及我看过的许多其他站点都没有提及过,例如Python文档中的unittest页面.我看到的唯一一致的风格是"CapWords".在unittest文档中,他们有TestSequenceFunctions和DefaultWidgetSizeTestCase的示例.
我想知道的是使用"名称"测试还是测试"名称".方法使用test_"name",这几乎已经建立.关于课程,如果有的话,我很难找到一个约定.
非常感谢论坛对此的帮助.
我在项目中有很多这样的长线,并且不知道如何打破它以保持PEP8的快乐.PEP8显示警告.format(me['id'])
pic_url = "http://graph.facebook.com/{0}/picture?width=100&height=100".format(me['id'])
Run Code Online (Sandbox Code Playgroud)
我怎样才能打破这条线来摆脱PEP8警告而又不破坏代码呢?
我将此声明作为几行:
return render_to_response('foo/page.html',
{
'situations': situations,
'active': active_req,
},
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
按照现在的情况,使用PEP8脚本,它在第二行给出了一个"E128:延迟线下缩进视觉缩进"错误.
我尝试了一大堆不同的格式化方法,而且我能让PEP8停止抱怨的唯一方法是:
return render_to_response('foo/page.html', {
'situations': situations,
'active': active_req,
},
context_instance=RequestContext(request))
Run Code Online (Sandbox Code Playgroud)
但这看起来像垃圾.
建议?E124,E126和E128似乎是一个巨大的痛苦!
我不介意具有{
第一行(或它自己)的解决方案,但我希望有一个解决方案,其中},
和context_instance...
处于相同的缩进级别.
在我的项目中的某个点,我需要查询SQLAlchemy对象的NOT NULL列.在我的代码中,我做:
session.query(MyModel).filter(MyModel.my_column != None).all()
Run Code Online (Sandbox Code Playgroud)
......而且效果很好.问题是,无论何时我运行文件pep8
或其他任何一个短文,它都会引发错误E711:比较None
应该是if cond is not None:
.我同意这条准则的精神,因此我不想因为一条小线而使警告无声.
有没有其他方式来写这个?最好是我们不必挖掘func
模块的地方?
"Dunder"(定义d ouble 下得分):http://www.urbandictionary.com/define.php?term=Dunder
我有根据的模块级"dunders"(如放置的问题__all__
,__version__
,__author__
在Python代码等).
这个问题向我走来,通过阅读而PEP8,看到这个堆栈溢出问题.
接受的答案是:
__author__
是一个全局"变量",因此应该出现在导入之下.
但是在PEP8部分模块级别的dunder名称中我读了以下内容:
模块级"dunders"(即名称具有两个前缘和两个纵下划线),例如
__all__
,__author__
,__version__
等应被放置在模块文档字符串之后,但在除了从任何导入语句__future__
进口.Python要求future-imports必须在除docstrings之外的任何其他代码之前出现在模块中.
作者还给出了一个代码示例:
"""This is the example module.
This module does stuff.
"""
from __future__ import barry_as_FLUFL
__all__ = ['a', 'b', 'c']
__version__ = '0.1'
__author__ = 'Cardinal Biggles'
import os
import sys
Run Code Online (Sandbox Code Playgroud)
但是当我将上述内容放入PyCharm时,我看到了这个警告(也见截图):
PEP8:模块级别导入不在文件顶部
问题:使用双下划线存储这些变量的正确方法/位置是什么?
pep8 ×10
python ×10
pep ×2
camelcasing ×1
class ×1
coding-style ×1
docstring ×1
formatting ×1
pycharm ×1
sqlalchemy ×1
string ×1
testing ×1