所以这只是一个简单的问题.在python中导入模块时,这有什么区别:
from module import a, b, c, d
Run Code Online (Sandbox Code Playgroud)
还有这个
from module import a
from module import b
from module import c
from module import d
Run Code Online (Sandbox Code Playgroud)
对我而言总是有意义地压缩代码并使用第一个例子,但是我已经看到了一些代码样本.是否存在任何差异,还是程序员的偏好?
ins*_*get 83
完全没有区别.它们的功能完全相同.
然而,从风格的角度来看,人们可能比另一个更优选.在这方面,进口的PEP-8说你应该压缩from module import name1, name2到一条线并留import module1在多条线上:
Yes: import os
import sys
No: import sys, os
Ok: from subprocess import Popen, PIPE
Run Code Online (Sandbox Code Playgroud)
回应@ teewuane的评论(如果评论被删除,重复此处):
@ inspectorG4dget如果你必须从一个模块导入多个函数并且最终使该行超过80个字符怎么办?我知道80 char的事情是"当它使代码更具可读性时",但我仍然想知道是否有更整洁的方法来做到这一点.而且我不想做foo import*,即使我基本上都是导入所有东西.
这里的问题是,执行以下操作可能超过80个字符限制:
from module import func1, func2, func3, func4, func5
Run Code Online (Sandbox Code Playgroud)
对此,我有两个回应(我没有看到PEP8对此过于清楚):
将其分解为两个导入:
from module import func1, func2, func3
from module import func4, func5
Run Code Online (Sandbox Code Playgroud)
这样做的缺点是,如果module从代码库中删除或以其他方式重构,则需要删除两个导入行.这可能会很痛苦
拆线:
为了缓解上述问题,可能会更明智
from module import func1, func2, func3, \
func4, func5
Run Code Online (Sandbox Code Playgroud)
如果第二行不与第一行一起删除,则会导致错误,同时仍保持单数import语句
小智 28
要添加从inspectorG4dget的答案中提出的一些问题,您还可以使用元组在文件夹结构开始深度嵌套或使用具有钝名称的模块时执行多行导入.
from some.module.submodule.that_has_long_names import (
first_item,
second_item,
more_imported_items_with_really_enormously_long_names_that_might_be_too_descriptive,
that_would_certainly_not_fit,
on_one_line,
)
Run Code Online (Sandbox Code Playgroud)
这也有效,虽然我不是这种风格的粉丝:
from module import (a_ton, of, modules, that_seem, to_keep, needing,
to_be, added, to_the_list, of_required_items)
Run Code Online (Sandbox Code Playgroud)
Shi*_*hah 10
我建议不要盲目遵循 PEP-8。当你有大约一半的屏幕导入时,事情开始变得不舒服,然后 PEP-8 与 PEP-20 可读性指南发生冲突。
我的偏好是,
上面给了你很好的平衡,因为读者仍然可以快速浏览依赖项,同时实现合理的紧凑性。
例如,
我的偏好
# one line per package
import os, json, time, sys, math
import numpy as np
import torch, torch.nn as nn, torch.autograd, torch.nn.functional as F
from torchvision models, transforms
Run Code Online (Sandbox Code Playgroud)
PEP-8 推荐
# one line per module or from ... import statement
import os
import json
import time
import sys
import math
import numpy as np
import torch
from torch import nn as nn, autograd, nn.functional as F
from torchvision import models, transforms
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32688 次 |
| 最近记录: |