Czy istnieje zalecany format importu wielowierszowego?

Przeczytałem, że istnieją trzy sposoby kodowania importu wielowierszowego w Pythonie

Z ukośnikami:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
    LEFT, DISABLED, NORMAL, RIDGE, END

Duplikacja wysłanych:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END

W nawiasie:

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
    LEFT, DISABLED, NORMAL, RIDGE, END)

Czy istnieje zalecany format lub bardziej elegancki sposób na te stwierdzenia?

Author: alok, 2013-01-17

4 answers

Osobiście używam nawiasów przy importowaniu więcej niż jednego komponentu i sortuję je alfabetycznie. Tak:

from Tkinter import (
    Button,
    Canvas,
    DISABLED,
    END,
    Entry,
    Frame,
    LEFT,
    NORMAL,
    RIDGE,
    Text,
    Tk,
)

Ta dodatkowa zaleta polega na łatwym sprawdzaniu, jakie komponenty zostały dodane / usunięte w każdym commicie lub PR.

Ogólnie rzecz biorąc, jest to osobiste preferencje i radzę Ci wybrać to, co wygląda najlepiej dla Ciebie.
 103
Author: Brendan Maguire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-09 11:20:17

Twoje przykłady wydają się wynikać z PEP 328 . Tam, nawias-notacja jest proponowana dla dokładnie tego problemu, więc prawdopodobnie wybrałbym ten.

 13
Author: Thorsten Kranz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-17 10:35:41

Wybrałbym notację w nawiasie z PEP328 z nowymi liniami dodanymi przed i po nawiasach:

from Tkinter import (
    Tk, Frame, Button, Entry, Canvas, Text, 
    LEFT, DISABLED, NORMAL, RIDGE, END
)

Jest to format, który Django używa:

from django.test.client import Client, RequestFactory
from django.test.testcases import (
    LiveServerTestCase, SimpleTestCase, TestCase, TransactionTestCase,
    skipIfDBFeature, skipUnlessAnyDBFeature, skipUnlessDBFeature,
)
from django.test.utils import (
    ignore_warnings, modify_settings, override_settings,
    override_system_checks, tag,
)
 1
Author: Max Malysh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-19 14:20:31

Zazwyczaj z Tkinter, jest w porządku po prostu używać from Tkinter import * jako moduł będzie eksportować tylko nazwy, które są wyraźnie widżety.

PEP 8 nie wymienia żadnych konwencji dla takiego przypadku, więc myślę, że to do ciebie należy decyzja, która jest najlepsza opcja. Chodzi o czytelność, więc wybierz to, co sprawia, że jest jasne, że importujesz rzeczy z jednego modułu.

Ponieważ wszystkie te nazwy są dostępne w Twoim zakresie, osobiście uważam, że opcja 2 jest najbardziej przejrzysta jak ty można zobaczyć importowane nazwy najlepiej. Następnie można nawet podzielić go bardziej, aby być może grupować te nazwy razem, które należą do siebie. W twoim przykładzie mogę umieścić Tk, Frame i Canvas osobno, ponieważ grupują widżety razem, podczas gdy Button i Text osobno, ponieważ są mniejszymi komponentami w widoku.

 -2
Author: poke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-17 10:34:37