여러 줄 가져 오기에 권장되는 형식이 있습니까?


114

파이썬에서 여러 줄 가져 오기를 코딩하는 세 가지 방법이 있음을 읽었습니다.

슬래시 사용 :

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

감정 복제 :

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

괄호 포함 :

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

이 진술에 권장되는 형식이나 더 우아한 방법이 있습니까?


3
수입품이 너무 많아서 왜 안돼 from Tkinter import *?
Inbar Rose

2
이것은 예입니다. 테 실제 문장이다 from data.forms import AddressEmbeddedField, PhoneEmbeddedField, MailEmbeddedField, \ WebEmbeddedField그러나 data.forms에 포함 된 필드의 모든 나머지를 가져 오지 않는다
마누엘 알바레즈

19
많은 이유. 예를 들어, 모르는 많은 변수를 덮어 쓸 수 있습니다. 에서 가져온 모든 이름을 알고 from Tkinter import *있습니까? 난 아니에요. 그리고 IDE는 이러한 이름 (아마도)을 알지 못하므로 잘못된 이름을 입력했는지 알 수 없습니다.
Thorsten Kranz 2013 년

2
그것은 나쁜 habbit, 봐입니다 @InbarRose stackoverflow.com/questions/3615125/...
Yuval 교수 Pruss

답변:


161

개인적으로 두 개 이상의 구성 요소를 가져올 때 괄호를 사용하여 알파벳순으로 정렬합니다. 이렇게 :

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

이는 각 커밋 또는 PR에서 추가 / 제거 된 구성 요소를 쉽게 볼 수있는 추가 이점이 있습니다.

전반적으로 개인적인 취향이지만 가장 잘 보이는 것을 선택하는 것이 좋습니다.


3
중요한 것은 일관성을 유지하는 것입니다 (적어도 주어진 프로젝트 내에서). 이렇게하면 코드를 읽는 사람이 너무 어렵지 않게 가져올 내용을 쉽게 찾을 수 있습니다.
Blckknght 2013 년

1
isort가 자동으로 서로 다른 스타일의 여러 줄의 수입을 포맷하는 데 사용할 수있는 참조 github.com/timothycrosley/isort#multi-line-output-modes
Motin

16

귀하의 예는 PEP 328 에서 비롯된 것 같습니다 . 거기에서 정확히이 문제에 대해 괄호 표기법이 제안되었으므로 아마도 이것을 선택했을 것입니다.


4

PEP328 의 괄호 표기법을 사용하여 괄호 앞뒤 에 줄 바꿈을 추가했습니다.

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

이것은 Django가 사용 하는 형식입니다 .

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,
)

PEP 328에서 괄호 앞 / 뒤에 줄 바꿈이 추가되지 않았습니까?
Gandalf Saxe

@GandalfSaxe PEP 328은 형식화가 아니라 의미론 (언어에 새로운 기능 추가)에 관한 것입니다.
Max Malysh

나는 그때 잘 이해하지 못한다. PEP 328을 여러 줄 가져 오기에 대해 괄호가있는 것으로 인용했지만 아무것도 없습니까? "괄호 앞뒤에 줄 바꿈이 추가 된 PEP328의 괄호 표기법을 사용합니다."
Gandalf Saxe

PEP 328은 언어에 괄호 표기법을 추가했습니다. 괄호 표기법은 다음과 같이 여러 모듈을 가져올 수있는 기능 from foo import (bar, baz)입니다.. PEP 328은 형식화에 대해 아무것도 말하지 않습니다.
Max Malysh

확인 아, 난 당신이 : 지금의 의미를 알기
간달프 작센

-4

일반적으로 Tkinter에서는 from Tkinter import *모듈이 분명히 위젯 인 이름 만 내보내므로 사용하는 것이 좋습니다 .

PEP 8 은 그러한 경우에 대한 규칙을 나열하지 않으므로 최선의 옵션을 결정하는 것은 귀하에게 달려 있다고 생각합니다. 가독성에 관한 것이기 때문에 단일 모듈에서 항목을 가져오고 있음을 명확하게하는 것을 선택하십시오.

이 모든 이름이 귀하의 범위에서 사용 가능하기 때문에 개인적으로 가져온 이름을 가장 잘 볼 수 있으므로 옵션 2가 가장 명확하다고 생각합니다. 그런 다음 더 분할하여 서로 속한 이름을 그룹화 할 수도 있습니다. 귀하의 예제에서 나는 넣어 수도 Tk, Frame그리고 Canvas하면서 그들이 그룹이 함께 위젯으로 분리 Button하고 Text별도로 그들이보기에 작은 구성 요소가있다.


11
X 가져 오기에서 사용하는 것은 허용되지 않습니다 *
Tolo Palmer

1
@ToloPalmer 보통은 사실이지만 Tkinter의 경우에는 위젯 만 가져 오므로 일반적으로 괜찮습니다. 라이브러리 참조 에 그런 식으로 나열되어 있습니다 . 가져 오기를 첫 번째로 나열하면 특히 충돌로부터 안전해야합니다.
찌르기

1
참고로,의 문제 from X import *도 사용하고있는 패키지에 대한 __all__제대로 같은 정적 코드 분석기이다 pyflakes어떤이있는 경우 정의되지 않은 이름을 감지 할 수 import *는 정의되지 않은 이름이 아마 수입되었다고 가정해야하기 때문에 *.
RubenLaguna
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.