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


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.