Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数调用的PEP-8_Python_Conventions_Pep8_Code Conversion - Fatal编程技术网

Python 函数调用的PEP-8

Python 函数调用的PEP-8,python,conventions,pep8,code-conversion,Python,Conventions,Pep8,Code Conversion,我最近开始使用Python/Django,我听说了PEP8约定。读完之后,我对如何“风格化”我的代码有了更好的理解,但我学会了用Java编程,我过去喜欢做什么就做什么。你能建议如何把我的例子写进PEP-8吗?非常感谢 result = urllib.urlretrieve( "https://secure.gravatar.com/avatar.php?"+ urllib.urlenc

我最近开始使用Python/Django,我听说了PEP8约定。读完之后,我对如何“风格化”我的代码有了更好的理解,但我学会了用Java编程,我过去喜欢做什么就做什么。你能建议如何把我的例子写进PEP-8吗?非常感谢

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

这可能不是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)    
result = urllib.urlretrieve(
    "https://secure.gravatar.com/avatar.php?" +
    urllib.urlencode({
        'gravatar_id': hashlib.md5(email).hexdigest(),
        'size': srt(size)
    })
)
请注意,这是一个用于格式化Python代码以符合PEP8的实用程序。在本例中,它将原始代码转换为

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

尝试下载代码样式的linter,如pep8(一个检查代码是否符合pep8要求的程序)或pylint。您可以在此处找到更全面的Python风格检查器列表和比较:

事实上,网上有一个pep8检查器:

如果我们运行您的代码,它会告诉您:

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 
代码的固定版本看起来更像这样:

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

从本质上讲,你违反PEP8的主要原因是你缩进太多。一个缩进就可以了——您不需要与函数调用的开头部分对齐。Python还坚持您的行不超过80个字符,但修复过度缩进也解决了这个问题。

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

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)

这个问题似乎离题了,因为它是关于codereview.stackexchange.commhh的,我认为这是一个特定的编程问题,但我是这个论坛的新手,所以我想你有理由暂停这个帖子。不管怎样,我得到了我一直在寻找的答案。非常感谢。我还发现自己很困惑一个问题是属于这里,还是属于codereview或in,后者对我来说与StackOverflow的目的几乎相同…删除了我的答案-因为你抢先给了我答案并包含了信息。关于棋盘格…我在开始排列后使用换行符的唯一原因是,如果不这样做,换行符会太长,然后将其缩进到原来的列中并没有多大帮助。。。