파이썬 코드를 효과적으로 작성하는 법을 어떻게 배울 수 있습니까?


46

"pythonic"에 대한 Google 검색을 수행하면 광범위한 해석이 나타납니다. 위키 피 디아 페이지는 말한다 :

파이썬 커뮤니티의 일반적인 신조어는 파이썬인데, 이는 프로그램 스타일과 관련된 광범위한 의미를 가질 수 있습니다. 코드가 파이썬이라고 말하는 것은 파이썬 관용구를 잘 사용한다는 것, 자연 스럽거나 언어의 유창함을 말하는 것입니다. 마찬가지로, pythonic이라는 인터페이스 또는 언어 기능에 관해서는 파이썬 관용구와 잘 작동하고 나머지 언어와 잘 어울린다고 말합니다.

또한 "비 pythonic"이라는 용어에 대해서도 설명합니다.

반대로, 파이썬이 아닌 코드의 마크는 파이썬에서 C ++ (또는 Lisp, Perl 또는 Java) 코드를 작성하려고 시도한다는 것입니다. 즉, 다른 언어의 형태를 관용적으로 번역하는 대신 거친 전사를 제공합니다. pythonicity의 개념은 파이썬의 최소한의 가독성 철학과 밀접한 관련이 있으며 "한 가지 이상의 방법이 있습니다"접근 방식을 피합니다. 읽을 수없는 코드 또는 이해할 수없는 관용구는 비언어적입니다.

"파이 토닉"이라는 용어는 무엇을 의미합니까? 실제로 효과적으로 적용하는 방법을 배우려면 어떻게해야합니까?


6
귀하의 질문은 모든 프로그래밍 언어로 확장 될 수 있다고 생각합니다. 많은 경우에 정확하고 수정, 가독성 및 유지 관리를 향상시키기 위해 항상 권장되는 프로그래밍 방법이 있습니다. 또한 이러한 권장 사항에 도전하면 언어가 발전하고 발전 할 수 있다고 생각합니다.
Amine

@ 아민 너무 사실입니다. 실제로 나는 언어 숙어를 배울 수있는 곳으로 구성된 커뮤니티 위키 (모든 언어에 대해)를 고려해야한다고 생각합니다.
yati sagade


1
댓글 작성자 : 관련없는 댓글 게시를 중지하십시오. 그들은 이유 때문에 삭제되었습니다. 답변이 있으면 답변으로 남겨 두십시오. 이 질문의 주제에 대해 토론 하려면 chat을 사용 하십시오 .

1
파이썬을 연습함으로써!
동적

답변:


22

나는 대부분의 사람들이 "Pythonic"이 실제로 무엇을 의미하는지에 대한 자신의 해석을 가지고 있음을 발견했습니다. Wikipedia에서 :

파이썬 커뮤니티의 일반적인 신조어는 파이썬인데, 이는 프로그램 스타일과 관련된 광범위한 의미를 가질 수 있습니다. 코드가 파이썬이라고 말하는 것은 파이썬 관용구를 잘 사용한다는 것, 자연 스럽거나 언어의 유창함을 말하는 것입니다. 마찬가지로, pythonic이라는 인터페이스 또는 언어 기능에 관해서는 파이썬 관용구와 잘 작동하고 나머지 언어와 잘 어울린다고 말합니다.

반대로, 파이썬이 아닌 코드의 마크는 파이썬에서 C ++ (또는 Lisp, Perl 또는 Java) 코드를 작성하려고 시도한다는 것입니다. 즉, 다른 언어의 형태를 관용적으로 번역하는 대신 거친 전사를 제공합니다. pythonicity의 개념은 파이썬의 최소한의 가독성 철학과 밀접한 관련이 있으며 "한 가지 이상의 방법이 있습니다"접근 방식을 피합니다. 읽을 수없는 코드 또는 이해할 수없는 관용구는 비언어적입니다.

난 안보다 더 많은 시간, 더 "파이썬"예 실제로 파이썬 관용구와 영리하려고 사람들로부터 파생되어 (입니다 거의 읽을 수없는 자신의 코드 렌더링 (하지 않는 것보다 다시 번 이상) 것으로 나타났습니다 하지 파이썬을).

Python의 관용구를 고수하고 Python에서 C ++ (또는 다른 언어) 스타일을 사용하지 않는 한 Pythonic입니다.

WorldEngineer가 지적한 것처럼 PEP8은 준수하기에 좋은 표준입니다 (VIM을 사용하는 경우 PEP8 린팅에 사용할 수있는 플러그인이 있습니다).


실제로 하루가 끝날 때 솔루션이 작동하고 유지 관리가 불가능하고 느리지 않은 경우 누가 걱정합니까? 여러 번, 당신의 임무는 가능한 가장 우아하고 pythonic 코드를 작성하지 않고 작업을 수행하는 것입니다.


또 다른 측면 노트 (그냥 내 생각, 그것 때문에 downvote 주시기)) : 나는 또한 파이썬 커뮤니티를 발견했습니다이 가득합니다 t 없는 대부분의 지역 사회가 자아 (의 아니다 , 그냥 조금 더 유행이다 C 및 Python과 같은 커뮤니티에서). 따라서 자아를 "파이 토닉 (pythonic)"이라는 잘못 해석 된 해석과 결합하면 많은 근거없는 부정성이 생길 수 있습니다. 다른 사람들이 읽은 것을 한 알의 소금으로 가져 가십시오. 공식 표준과 문서를 고수하면 괜찮을 것입니다.


2
좋은 답변을 얻으려면 +1하십시오 (OP에서 사용한 이후의 견적 제외).

윽 .. 진작는 견적을 게시하기 전에 영업을 다시 읽기 : P
데미안 브레히트

3
오히려, 자아와 온라인 활동 사이에는 높은 상관 관계가 있으며 모든 커뮤니티 에서 의견을 표명 합니다 . 기본적으로 당신은 비 이기적인 사람들을 많이 보지 못합니다. 왜냐하면 그들은 처음부터 그렇게 많이 쓰지 않기 때문입니다.
isarandi

17

파이썬은 파이썬에서 관용적으로 코딩하는 것입니다. 그것은 프로그래밍 관점 에서뿐만 아니라 커뮤니티 독서 관점에서도 파이썬에 잘 작동하는 구조와 형식을 사용하는 것을 의미합니다. K & R이 오랫동안 C 프로그래밍 스타일의 표준을 설정 한 방식과 매우 흡사합니다. 이 안내서 는 파이썬에서 관용적으로 코딩해야 함을 보여줍니다. PEP 8은이 안내서에서 참조되므로 읽을 가치가 있습니다.


1
@MattFenwick 프로그래밍의 90 %가 아닌가? 훌륭한 프로그래머는 코드를 읽는 데 많은 시간을 소비하며 몇 시간이 지나면 많은 코드를 작성합니다. 더 많은 Pythonic 코드를 읽을수록 Python으로 더 많이 쓸수록 코드가 더 Pythonic입니다. 나는 여기에 어떤 지름길이 없다고 생각합니다.
Kris Harper

2
훌륭한 링크!
Ethan Furman

13

"Pythonic"코드 작성 IMHO는 언어가 제공하는 (V) HLL 기능을 효과적으로 사용합니다. 유비쿼터스 예제로서

x, y = 7, 'fuhrer'

그것은 매우 파이썬입니다. 몇 달 만에 파이썬으로 C #을 배우기 시작했을 때를 기억합니다.

int x, y = 10, z;

어떻게 든 혼란 스러웠지만 C / C ++ 루트로 돌아가려면 약간의 시간이 걸렸습니다.

또 다른 파이썬 방식은 람다를 사용하는 것입니다.

l = [1, 2, 3, 4, 5]
print(sorted(l, key=lambda x: -x))

실제로 l내림차순으로 정렬되어 인쇄됩니다 .

그런 다음 많이 사용되지만 이해하기 어려운 "오리 타이핑"이 있습니다. 걸어서 오리처럼 말하면 오리처럼 취급합니다. 이것은되고 느슨하게 다른 OO 언어의 인터페이스에 관련.

또한 맵 및 리덕션 사용과 같이 해당되는 경우 기능 프로그래밍 방법을 사용하는 것은 피 토닉으로 간주됩니다.

입력하는 동안 답변이 게시되는 것을 보았으며 멋진 링크가 포함되어 있습니다. 추신 : 파이썬에 대한 지식이 제한되지는 않습니다. 나는 파이썬이 당신의 모국어가 아니었기 때문에, (우리 대부분의 pythonistas와 마찬가지로) 뱀으로 "아이디 오 매틱"을 배우는 법을 배워야합니다! 건배!


WorldEngineer의 대답은 :) 그냥 언어가 당신과 다른 사람의 이익을 위해 기능을 "이용"의 생각, 당신은 방법에 파이썬를 얻을 수 있습니다, 그리고 제발 - 내가 입력했다 그것을 이미 게시 한 나는 링크를 포함하지 않았다 추적을 링크
yati sagade

4
사실, 많은 분쟁이 map, reduce, lambda등은 그 자체 관용적이다. 목록 이해와 생성기 표현은 대안이며 많은 사람들이 합리적으로 가능할 때마다 선호합니다 (특히, 람다가 필요할 때 잡음이 적습니다). 그들은 분명히 자신의 용도를 가지고 있으며 다른 관용구 (예 : 장식 자)에서 기능적 프로그래밍 쇼를 보여줍니다.

@delnan은 파이썬 3에 관해서는 훨씬 더 동의했다. 결론은 기능적 기능이 필요한 곳에 정확하게 사용되어야한다는 것이다 . 그리고 (그것을하는 명백한 방법은 하나뿐입니다) 관용구입니다 :)
yati sagade

개인적으로, 나는 첫 번째 예에 대한 사람들의 선호를 이해하지 못했습니다. 이 (어떤 정신적으로 해석보다 훨씬 쉽다 이다 파이썬의 선은, 코드가 더 자주 기록 된 것보다 읽기) : (x, y) = (7, 'fuhrer')- 아직 나는 거의 항상 괄호없이 쓸 수있는 가장 좋은 방법이다 "수정"야!
이즈 카타

2
나는 당신의 특정 정렬 예제가 파이썬이 아니라고 주장합니다. just을 할 수 있다면 람다로 재정렬을 다시 도입 해야하는 이유 print(sorted(l, reverse=True))는 독자에게 진행 상황을 추가로 명시 적으로 알려주는 것입니다. 첫 번째 예도 논쟁의 여지가 있습니다. 하나에 압축 된 두 가지 과제입니다. 괜찮아요, 파이썬이라고 부르지는 않겠습니다. 독자들은 두 가지 과제를 수행하는 것보다 그것이하는 일을 더 오래보아야합니다.
phresnel

7
--> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

파이썬 코드는 다음과 같습니다

  • 읽을 수있는
  • 단순 (가능한 한 단순하지만 단순하지는 않음)
  • 잘 생각해

1
+1. 파이썬의 선 (Zen of Python)은 관용구 목록을 따르는 것보다 파이썬 코드를 작성하는 데 더 중요합니다. 후자는 모든 상황을 다루지는 않습니다.
Doval

6

새로운 언어를 배우려고 할 때마다, 나는 손등과 같은 언어를 알고있는 사람들이 코드를 읽고, 이상하게 보이는 것을 찾거나 요구 한 다음, 그들의 스타일을 모방하려는 것이 최선의 방법. 예 :

파이썬에서 우리는 주제에 대해 다루기 때문에 Dive Into Python 의 예제 가 시작하는 데 매우 유용하다는 것을 알았습니다 . 그들은 파이썬의 기본 사항뿐만 아니라 관용적 파이썬 을 실제로 강조하는 경향이 있습니다.

D를 배울 때, 언어가 매우 까다로워서 당시 문서가 훌륭하지 않았기 때문에 표준 라이브러리, 특히 Andrei Alexandrescu의 걸작 중 일부를 읽는 코드를 배웠습니다 .

C ++을 배울 때 꽤 좋은 C ++ 프로그래머로부터 코드베이스를 물려 받았고 참조로 STL 컨테이너를 전달해야한다는 그의 주장으로 관용적 C ++ 프로그래밍에 대해 많은 것을 배웠습니다.

모든 언어에서 언어에 대한 StackOverflow 질문을 탐색하고 사람들이 일반적으로 기본적인 일을 수행하는 데 도움이되는 것을 살펴 보았습니다.


+1 언어의 기초를 익힌 후에는 코드를 읽는 것이 책을 읽는 것보다 훨씬 도움이됩니다.
Pace

3

파이썬은 자바가 아니므로 유용한 조언을 줄 수 있습니다. 어떤 종류의 문제가 발생했는지 모른 채 더 이상 말할 수는 없지만 파이썬을 다르게 수행하는 방법에 대한 다른 언어 (이 경우 특히 Java) 배경에서 온 프로그래머에게는 매우 구체적인 조언입니다.


2

어떤 사람은 역설적 표현으로 파이썬이 무엇인지 배우기 위해 코드를 강타했습니다. 나는 그것에 동의하지 않습니다. 고밀도 코드를 작성하는 것이 더 파이썬적인 것은 아닙니다.

자신에 관한 한 Pythonic을 정의하는 데 도움이되는 한 가지 방법은 자신에게 "왜 Python 언어를 사용 하는가?" 무엇이 당신에게 호소합니까?

나에게는 가독성과 컴파일 및 오픈 소스 부족 (거의 모든 것)입니다. 많은 수의 라이브러리를 다운로드하고 다른 많은 언어보다 라이센싱에 대한 부담을 덜어 소스 코드를 읽을 수 있습니다.

나에게 파이썬은 시각적으로 아름답습니다. Guido (Python 제작자)는 PEPS에 대한 답변과 토론을 통해 나에게 그 언어를 어떻게 만들 었는지에 대한 그의 선택이 언어를 어떻게 만들어야하는지에 대한 내 생각보다 우수하다는 것을 계속해서 증명하고 있습니다.

저에게 훌륭한 프로그래머는 코딩 할 때 어떤 길을 가야할지에 대한 정보에 입각 한 의사 결정 기술을 가진 사람입니다. 나에게 파이썬은 그러한 선택을 빨리하는 것을 돕는다.

Explicid Type 캐스팅 대신 duck 타이핑을 허용하여 소스 코드 구문을 단순화하고 코드를 검토하는 코더가 "코더가 올바르게 작동해야합니다"라는 기대로 인해 "Pythonic"

그래서 파이썬적인 것에는 두 가지 측면이 있습니다. 하나는 구문 적이며 다른 하나는 실천입니다. "Pythonic"의 더 깊은면을 설명하는 방법 ..?

파이썬에서는 이렇게하는 것이 별거 아닙니다 : alist = [ 'one', 'two', 'three \ n'] alist.append ((1234, 'Atuple'))

튜플은 객체 유형에 관계없이 목록에 추가됩니다. 파이썬 부분은 당신이 이것을 할 수있는 것이 아니라 코드가 이것을 예상하고 작동 / 적응해야한다는 것입니다.

-alist- 객체에서 작동하는 것은 다른 코더가 들어와 목록에 문자열이 아닌 것을 추가 할 수 있고 새로운 코더에 의한 소스 코드 적응이 어렵지 않아야한다는 생각으로 작성되어야합니다. 이것이 결국 오리 타입의 이점입니다.


-2

권장 도서를 구입하십시오. 읽어. 언어를 사용하고 커뮤니티 스타일에 맞는 메커니즘을 사용하는 데 도움이됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.