PEP-8用于函数调用

时间:2014-09-08 13:25:56

标签: python conventions pep8 code-conversion

我最近开始使用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)
                                            })
                            )

3 个答案:

答案 0 :(得分:5)

尝试下载代码样式链接,例如pep8(检查代码是否符合PEP 8要求的程序)或pylint。您可以在此处找到更全面的Python样式检查器列表和比较:What are the comprehensive lint checkers for Python?

事实上,网上有一个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个字符,但修复过度缩进也解决了这个问题。

答案 1 :(得分: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)

答案 2 :(得分: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)
    })
)