Python的:是什么这两个导入语句之间的区别?(Python: What is the diffe

2019-07-18 02:48发布

他们在功能上看起来一样对我。 有没有使用一个在另一个之上的任何区别和优势?

>>> from datetime import datetime, timedelta
>>> from datetime import (datetime, timedelta)

Answer 1:

如果您在包裹括号进口,你没有,如果你把一个换行符在import语句,这是首选的风格来使用的续行反斜杠。 在功能上,它们是相同的,并且如果在一行上,而忽略了括号是清洁器。



Answer 2:

他们两人都是相同的:

In [17]: import dis

In [18]: def func1():
   ....:     from datetime import datetime, timedelta
   ....:     

In [19]: def func2():
   ....:     from datetime import (datetime, timedelta)
   ....:     

In [20]: dis.dis(func1)
  2           0 LOAD_CONST               1 (-1)
              3 LOAD_CONST               2 (('datetime', 'timedelta'))
              6 IMPORT_NAME              0 (datetime)
              9 IMPORT_FROM              0 (datetime)
             12 STORE_FAST               0 (datetime)
             15 IMPORT_FROM              1 (timedelta)
             18 STORE_FAST               1 (timedelta)
             21 POP_TOP             
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE        

In [21]: dis.dis(func2)
  2           0 LOAD_CONST               1 (-1)
              3 LOAD_CONST               2 (('datetime', 'timedelta'))
              6 IMPORT_NAME              0 (datetime)
              9 IMPORT_FROM              0 (datetime)
             12 STORE_FAST               0 (datetime)
             15 IMPORT_FROM              1 (timedelta)
             18 STORE_FAST               1 (timedelta)
             21 POP_TOP             
             22 LOAD_CONST               0 (None)
             25 RETURN_VALUE      


Answer 3:

有没有区别除了第一节看起来更好一点给我。

作为边注,看来PEP 8还使用第一种形式中的例子虽然它不出声从优选明确排除第二形式。



Answer 4:

一个除了@ sr2222的答案。 一般来说,如果你想继续到下一行写,你只需要这些括号。 例如,你可以使用括号宣布在以下两种方式两行字符串:

In [1]: s1 = 'abc' \
   ...:     'def'

In [2]: s1
Out[2]: 'abcdef'

In [3]: s2 = ('abc'
   ...:    'def')

In [4]: s2
Out[4]: 'abcdef'

这同样适用于if语句,例如。 使用括号分割表达式为多行:

In [6]: if 1 in \
   ...:     [1,2,3]:
   ...:     pass

In [7]: if (1 in
   ...:     [1,2,3]):
   ...:     pass

这两个版本在功能上是相同的。 但是,使用替代反斜线括号是更好的风格。 这是一个与你的import语句相同。 如果整个表达式在一行符合,你就根本不需要括号。



Answer 5:

没有,没有任何区别 。 逗号和括号是元组文字一般Python语法。 您可能会看到他们的任何地方。 正如你已经发现,有语法的两个版本,因为括号是可选的。 这两种选择返回相同的值:

>>> 4,5
(4, 5)

>>> (4,5)
(4, 5)

然而,在一些更复杂的背景下,解析器理解逗号不同,所以使用括号,如果你真的想要一个元组是必要的。 例如f(3,4)不等同于f((3,4))

请参阅该文档在http://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange和http://docs.python.org/ 2 /参考/ grammar.html (铁杆)



文章来源: Python: What is the difference between these two import statements?