python은 왜 그토록 underscore를 좋아하나?

ed.netdiver의 이미지

python은 분명 매력적인 언어와 module들로 무장한 훌륭한 언어임에 틀림이 없습니다.
하지만, 제가 python에서 제일 싫어하는 것, 혹은 문자를 대라면 단연 underscore('_')를 꼽겠습니다.
이 underscore는 실로 python에 있어 뺄래야 뺄수 없는 아주 중요한 문자로서,
간단히는 이전 결과값부터 시작해서 각종 module, source에 안들어가는데가 없습니다.
class의 init, 내장 module등등...
이정도이다보니, 이렇게 괜찮은 언어에서 왜 underscore를 그토록 자주, 편집증스럽게 사용하는건지 모르겠습니다.

제게 있어 underscore는 python code의 가독성을 현저히 떨어뜨리고, 일관된 구조내에 뭔가 모르는 내장기능이 있을것같다는 망상에 빠뜨리는, 그런 암적인 존재입니다.

underscore를 사용하지 않을수는 없었던건지...

오늘은 문득 python code를 해석하다가, 그간 갑갑해했던 것이 떠올라 이렇게 무의미하게 적어봅니당.^^;

댓글

puaxx의 이미지

파이썬 만든 사람이 편집증 이라기 보다 글쓰는 분께서 편집증 같아 보인다는 =3=3=3

ed.netdiver의 이미지

켁^^; 그럴지도 모르겠네용^^;
=33

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

익명사용자의 이미지

원래 뱀은 바닥을 기죠. ^^;

ed.netdiver의 이미지

오호~ 그런 이유가!^^;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

puaxx의 이미지

그런 ^^ 해석이

xx1의 이미지

상당히 설득력 있는 말씀이네요. ^_^

hys545의 이미지

_print같이 내부함수에 _사용하기도 하고,

즐린

ed.netdiver의 이미지

흐흐, 네 물론 그렇죠.
거기다 펄류의 script언어들은 @#$%^&*등 거의 특수문자의 도배다시피 하기도 하고 말이죠.
근데, python은 뭐랄까 댄디한 언어잖아요? indent나 가독성에 목숨걸고 말이죠..
name mangling도 잘하지 그러냐고 권고도 많고...
그런데 유독 _때문에 코드가 꼭 꽁수라도 쓰는것인양(실제론 그게 아닌데도) 보이게끔 되어버린다 이거예요.
물론, 위에 어느분이 말씀하셨듯, 제 혼자만의 편집적 성향일수도 있겠지만,
저는 그부분, 뭐랄까 뉘앙스로서의 사파스러움...(뭔소린지..), 이 좀 그렇게 느껴지더군요..^^;
하하^O^//

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

talpo의 이미지

c/c++에서도 그렇지만 _로 시작하는 멤버들은 주로 내부적으로 사용하고,

클라이언트 프로그래머들이 사용하지 않는 것이 묵시적인 의미 같습니다.

파이썬의 class에서 __init__, __str__, ... 이런 멤버들도 (클래스를 만드는 쪽보다는) 클래스를 사용하는 쪽에서 되도록 보거나 명시적으로 사용하지 말라는 캡슐화의 요소가 있지 않을까 합니다.

따라서 가독성에 영향을 미치는 것은 의도적일 것 같습니다. 일부러 이 멤버들은 private이나 내부적인 것이니 특별히 알려고 하지 마시오.. 이런 것처럼요.

ed.netdiver의 이미지

네 바로 그렇습니다.
그리고, 예를들면 override같은 경우가 비일비재한데, 그걸 talpo님이 말씀하신 것처럼, 내부적 용도로 묵시적 hide를 해버린것 같은 결과가 _의 사용으로 남고, 또 이것이 계속 코드에 사용되는게, python이란 언어의 기본 방침과 위배되는것이 아닌가 싶은거죠.^^;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

zeon의 이미지

_, __ 등이 왜 가독성을 떨어뜨리는지는 납득이 안됩니다.
자세한 설명 요망!

제 생각에 이건 ed.bsd님 IDE의 폰트 때문이 아닐까 생각됩니다.

God said it. I believe it. That settles it.

여친이 길르는 용..

ed.netdiver의 이미지

흐, 저는 사실 ide는 따로 안씁니다.
editor는 주로 emacs이고, 보는 용도로는 vi를 씁니다.
idle보다는 wx pycrust, console에선 ipython만 씁니다.^^;
그러니 폰트문제는 아니구요...
바로 위에 talpo님께서 말씀하신 바로 그부분이 제가 이야기하고자 했던것과 정확히 일치합니다.
요컨대, 소스파일 자체의 가독성도 가독성이지만, 내장함수로 hide시켜놓은것(처럼 보이도록 _를 써놓고는)을,
그걸 매우 자주 많이 실 코드에서 사용하다보니, 이건 굳이 _로 가려놓은게 의미가 없어질 지경이고,
또 그게 가독성과 코드의 댄디한 일관성을 해치고, 저같은 코더의 입장에서 보면 python의 기본 방침과 대치되는 듯이
여겨지게 만든다는 겁니다.^^;

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

--------------------------------------------------------------------------------
\(´∇`)ノ \(´∇`)ノ \(´∇`)ノ \(´∇`)ノ
def ed():neTdiVeR in range(thEeArTh)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.