我已经定义了一个带有很长参数列表的函数.定义中的总字符数大于80,不符合PEP8.
def my_function(argument_one, argument_two, argument_three, argument_four, argument_five):
Run Code Online (Sandbox Code Playgroud)
什么是避免水平滚动的最佳方法.
PEP8有一条关于将导入放在文件顶部的规则:
导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前.
但是,在某些情况下,我可能想要做以下事情:
import sys
sys.path.insert("..", 0)
import my_module
Run Code Online (Sandbox Code Playgroud)
在这种情况下,pep8
命令行实用程序标记我的代码:
E402模块级别导入不在文件顶部
实现PEP8符合sys.path
修改的最佳方法是什么?
我有这个代码,因为我遵循了Hitchhiker的Python指南中给出的项目结构.
该指南建议我有一个my_module
文件夹,与文件夹分开tests
,两者都在同一目录中.如果我要访问my_module
从tests
,我想我需要添加..
到sys.path
我写了一些Python,其中一些行的长度超过80个字符,这是我需要保持的阈值.如何调整代码以减少行长?
我的一些代码:
if self.tagname and self.tagname2 in list1:
try:
question = soup.find("div", "post-text")
title = soup.find("a", "question-hyperlink")
self.list2.append(str(title)+str(question)+url)
current += 1
except AttributeError:
pass
logging.info("%s questions passed, %s questions \
collected" % (count, current))
count += 1
return self.list2
Run Code Online (Sandbox Code Playgroud)
pep8警告是:
trailing whitespace 37:try
trailing whitespace 43:pass
Run Code Online (Sandbox Code Playgroud)
你能告诉我这是什么意思吗?
我知道对于 jupyter notebooks 和 jupyter lab,有可用的代码格式化程序扩展,例如nb_black
或blackcellmagic
. 但是,当我安装它们时,它似乎不适用于 google colab。
您知道 colab 中是否有任何本机选项或格式化代码的扩展程序(符合 pep8)?
根据PEP8格式化以下代码的最佳方法是什么:
oauth_request = oauth.OAuthRequest.from_consumer_and_token(consumer,
token=token, verifier=verifier, http_url=ACCESS_TOKEN_URL)
Run Code Online (Sandbox Code Playgroud)
问题是如果我在第一行放置多个参数,则该行超过79个字符.如果我将每个参数放在一个带有4个空格缩进的单独行上,它看起来很丑陋:
oauth_request = oauth.OAuthRequest.from_consumer_and_token(
consumer,
token=token,
verifier=verifier,
http_url=ACCESS_TOKEN_URL)
Run Code Online (Sandbox Code Playgroud)
我想出的最佳选择是添加额外的缩进以更好地区分:
oauth_request = oauth.OAuthRequest.from_consumer_and_token(
consumer,
token=token,
verifier=verifier,
http_url=ACCESS_TOKEN_URL)
Run Code Online (Sandbox Code Playgroud)
我尝试为我制定一个通用规则,将它用于第一行长调用的方法和几个不能适合单行的参数.
我有一些像这样的代码.中断之前或之后是否应该中断?
# before
my_var = somethinglikethis.where(we=do_things).where(we=domore).where(we=everdomore)
# this way
my_var = somethinglikethis.where(we=do_things) \
.where(we=domore) \
.where(we=everdomore)
# or this way
my_var = somethinglikethis.where(we=do_things). \
where(we=domore). \
where(we=everdomore)
Run Code Online (Sandbox Code Playgroud) 我发现了一些旧的Python代码,它们正在执行以下操作:
if type(var) is type(1):
...
Run Code Online (Sandbox Code Playgroud)
正如所料,pep8
抱怨这个推荐用法isinstance()
.
现在,问题是该numbers
模块是在Python 2.6中添加的,我需要编写适用于Python 2.5+的代码
所以if isinstance(var, Numbers.number)
不是解决方案.
在这种情况下哪个是合适的解决方案?
为什么pep8抱怨代码中的下一个字符串?
import re
re.compile("\d{3}")
Run Code Online (Sandbox Code Playgroud)
我收到的警告:
ID:W1401 Anomalous backslash in string: '\d'. String constant might be missing an r prefix.
Run Code Online (Sandbox Code Playgroud)
你能解释一下这个消息的含义吗?我需要在代码中更改什么才能传递警告W1401?
代码通过测试并按预期运行.此外\d{3}
是一个有效的正则表达式.
多年来,我写的Python越多,我就越发现自己同意大多数指导方针,尽管我一直并故意为了自己的原因打破了一些.
我很想知道PEP 8(或其他PEP也可能)人们虔诚地坚持和为什么,以及人们发现不方便或不足的内容.
在我的情况下(以及一般的工作),我们只有少数几个偏离的东西:
下划线小写名称,我可以看到它的重点,因为它将始终保持一致,但我们倾向于使用lowerCamelCase,即使它偶尔会引入一些不一致性(例如部分或错误大写的首字母缩略词和跟随的词,这是经常下降到一时冲动的电话).主要是因为我们经常使用的近乎全部的API使用camelCase(一些较高,一些较低),并且由于某种原因我发现它更容易阅读,并且倾向于将下划线保留为分离令牌或规定的修改/模糊.
我仍然无法让自己按照PEP规定的内容来解决问题.new和init我倾向于在类下面没有空行,因为我总是希望用类名和args读取它们,这些方法有助于类中相同的功能范围(比如init,get和set)同一个attrib或一组attribs)我只分开单个空格,我喜欢类之间的三个空格,两个方法之间我不会在该对象的地图中进行心理聚合.这再次纯粹是为了代码的视觉冲击和可读性.我发现流量控制中的内容非常紧凑,方法和物体之间的这种间距一直引起我的注意,我希望它在代码停放几个月后重新读取.
有些事情反而是我坚持,当我阅读其他文字时,这让我疯狂,是标签而不是空格(特别是当我们使用的一些应用程序内编辑器没有真正具有标签替换功能时,对代码库中的污染造成很大影响)原型设计阶段).
诸如导入之类的东西的顺序,以及什么是导入,全局变换等等.当这些文件混合或乱序时,它真的会抛弃那些具有大量导入的文件.
语句中的空格,特别是当人们使用制表符并尝试在var名称中跨越不同长度的行对齐赋值操作时(并且似乎没有办法说服那些做excel看起来代码片段的人不整齐;)) .
并且在控制块内的间距,特别是当我在同一流控制块内看到明显随机的间距,然后在对象内使用类似的间距用于方法时.在我开始读这该死的东西之前,我不得不编辑那些.
所以,那些是我的,以及我"违反"PEP背后的原因(有些是共享的,有些是同事不赞同的).我很想知道其他Pythonistas在这方面做了什么和不做什么.
pep8 ×10
python ×9
coding-style ×1
eclipse ×1
formatting ×1
indentation ×1
line-breaks ×1
pep ×1
pydev ×1
python-2.5 ×1
python-3.x ×1
python-black ×1
string ×1