函数调用的PEP-8规范

3

我最近开始使用Python/Django,并听说过PEP 8规范。在阅读了PEP8之后,我更好地知道如何"风格化"我的代码,但我学习Java时就随心所欲地编写代码。你能否建议我如何将我的示例放入PEP-8中?非常感谢。

result = urllib.urlretrieve(
                            "https://secure.gravatar.com/avatar.php?"+
                            urllib.urlencode({
                                            'gravatar_id': hashlib.md5(email).hexdigest(),
                                            'size': srt(size)
                                            })
                            )

4
这个问题似乎不符合主题,因为它与codereview.stackexchange.com有关。 - Saullo G. P. Castro
我以为这是一个特定的编程问题,但我是新来的,所以我猜你有你的理由暂停这个帖子。无论如何,我得到了我想要的答案。非常感谢。 - yamm
我也发现自己很困惑一个问题应该放在这里还是codereview或者http://programmers.stackexchange.com/,对我来说,后者几乎与StackOverflow具有相同的目的... - Saullo G. P. Castro
3个回答

7

尝试下载代码风格检查器,例如 pep8(它会检查您的代码是否符合 PEP 8 要求)或 pylint。您可以在此处找到更全面的 Python 风格检查器列表和比较:什么是 Python 的全面 lint 检查器?

事实上,还有一个在线可用的 pep8 检查器:http://pep8online.com/

如果我们通过该网站运行您的代码,则会告诉您:

Code    Line  Column    Text 
E126    2     29        continuation line over-indented for hanging indent
E225    2     70        missing whitespace around operator
E126    4     45        continuation line over-indented for hanging indent
E501    4     80        line too long (90 > 79 characters)
W292    7     30        no newline at end of file 

您的代码的修正版本应该是这样的:

result = urllib.urlretrieve(
    "https://secure.gravatar.com/avatar.php?" +
    urllib.urlencode({
        'gravatar_id': hashlib.md5(email).hexdigest(),
        'size': srt(size)
    })
)

本质上,你违反了PEP 8的主要规定,即缩进过多。一个缩进是可以的--你不需要对齐函数调用的开括号。Python还坚持认为你的行不能超过80个字符,但修复过度缩进也解决了这个问题。


我删除了我的回答 - 因为你比我更快,并包含了关于检查器的信息... - Jon Clements
我使用括号后换行的唯一原因是因为该行否则会太长,然后将其全部缩进到原始列并没有什么帮助... - RemcoGerlich

1

使用更多的变量。不仅使行易于阅读,整个代码也更容易理解:

base = "https://secure.gravatar.com/avatar.php"
params = urllib.urlencode({'gravatar_id': hashlib.md5(email).hexdigest(),
                           'size': srt(size)})
url = "{}?{}".format(base, params)
result = urllib.urlretrieve(url)

0

这可能不是PEP8建议的做法,但为了可读性,您可以像这样分开:

base = "https://secure.gravatar.com/avatar.php?"
params = urllib.urlencode({'gravatar_id': hashlib.md5(email).hexdigest(),
                           'size': srt(size)})
result = urllib.urlretrieve(base+params)    

请注意autopep8是一个用于格式化Python代码以符合PEP8的实用工具。在这种情况下,它将转换您的原始代码为


result = urllib.urlretrieve(
    "https://secure.gravatar.com/avatar.php?" +
    urllib.urlencode({
    'gravatar_id': hashlib.md5(email).hexdigest(),
    'size': srt(size)
    })
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接