簡體   English   中英

Python:這兩個import語句有什么區別?

[英]Python: What is the difference between these two import statements?

它們在功能上對我來說都是一樣的。 使用一個在另一個上有任何差異和優勢嗎?

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

如果在parens中包裝導入,如果在import語句中放置換行符,則不必使用反斜杠進行換行,這是首選樣式。 從功能上講,它們是相同的,如果在一條線上,那么將它們排除在外是更清潔的。

兩者都是一樣的:

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      

除了第一個看起來對我更好一點之外沒有區別

作為旁注,似乎PEP 8也使用了示例中的第一種形式,盡管它沒有說明明確排除第二種形式的首選形式。

@ 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

兩個版本的功能相同。 但是使用括號而不是反斜杠是一種更好的風格。 導入語句也是如此。 如果整個表達式適合一行,則根本不需要括號。

不,沒有任何區別 逗號和括號是元組文字的通用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-xrangehttp://docs.python.org/上的文檔。 2 / reference / grammar.html (hardcore)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM