2009-09-28 3 views
6

Perl 습관은 몹시 죽습니다. 변수 선언, 범위 지정, 전역/지역은 두 언어간에 다릅니다. 펄 코딩에서 파이썬 코딩으로의 전환을 고통스럽지 않게 만드는 권장 파이썬 언어 관용구가 있습니까?Python 환경에서 Perl 습관 관리

미묘한 가변 맞춤법 오류는 엄청난 시간을 낭비 할 수 있습니다.

나는 변수 선언의 문제는 내가 언어 변경이나 기능, 사이 단지 신뢰할 수있는 다리에 대한 주장 아니에요 파이썬 사람들 내 펄 습관을 발생하지 않습니다 2 개 언어 내 파이썬 노력을 싱크 사이의 유사 종교 이해.

감사합니다.

+4

인생을 잘못 먹는 오식에 관해서는 http://stackoverflow.com/questions/613364/ --summary에서 몇 가지 흥미로운 점이 있습니다. 사람들은 pylint와 같은 정적 검사기를 사용하는 것이 좋습니다 – daotoad

+0

당신은 무엇을 의미하는지 더 설명 할 수 있습니까? "변수 선언 문제"? Perl과 Python을 모두 알고 있으며 언어가 실제로 다르지만 어떤 문제를 언급하고 있는지 확실하지 않습니다. –

+5

perl에서 "use strict;" 우리 중 많은 사람들에게 필수품입니다. 파이썬 (그다지 좋지 않다)에 대한 나의 이해는 파이썬에는 그러한 구조가 없다는 것이다. 이것은 "변수 선언 문제"가 의미하는 바입니다. 감사. – namrokretep

답변

1

나는 질문을 좋아하지만 펄에 대한 경험이 없으므로 최선의 조언 방법을 모르겠습니다.

"파이썬 관용어"에 대한 Google 검색을 제안합니다. 너는 몇몇 보석을 발견 할 것이다. 특히 :

http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

http://docs.python.org/dev/howto/doanddont.html

변수 "선언"이 문제에 관해서는 http://jaynes.colorado.edu/PythonIdioms.html

는, 여기 당신을 위해 내 최고의 조언이다 :

기억 파이썬에서 그, 객체는 변수 이름과 별개로 자신 만의 생명을가집니다. 변수 이름은 객체에 바인딩 된 태그입니다. 언제든지 완전히 다른 유형의 다른 객체로 이름을 다시 바인딩 할 수 있습니다. 따라서 이것은 완벽하게 합법적입니다.

x = 1 # bind x to integer, value == 1 
x = "1" # bind x to string, value is "1" 

실제로 파이썬은 강력하게 입력됩니다. 당신이 나를 믿지 않는다면 코드 1 + "1"을 실행하고 그것이 얼마나 효과가 있는지보십시오. 값이 1 인 정수 오브젝트는 명시 적 유형 강제 변환이없는 경우 문자열 값의 추가를 허용하지 않습니다. 따라서 파이썬 이름에는 변수의 플래그 특성을 갖는 sigil 문자가 절대로 존재하지 않습니다. 파이썬이 어떻게 작동하는지는 아닙니다. 임의의 유효한 식별자 이름은 모든 유형의 파이썬 객체에 바인딩 될 수 있습니다.

+0

"다른 객체에 이름을 다시 바인딩"... Perl OO 시스템은 Python에서 가져온 것이므로 가능합니다. Perl에서해야 할 일. –

+0

내가 말했듯이, 나는 Perl에서 실제 경험이 없으므로 Perl OO 시스템에 대해서는 아무것도 모른다. 그러나 저는 궁금합니다. Perl에서 변수의 유형에 관해 알려주는 "sigils"가 있다고 생각했습니다. 예를 들어, @x는 배열입니다. "@x"는 배열이 아닌 것을 의미하도록 리바 인딩 할 수 없습니다. 파이썬에는 sigils가 없으며, 그것은 내가 언급 할 가치가 있다고 생각한 차이점이다. – steveha

+1

@steveha : 펄에서는 $ x, @x, % x, * x 같은 이름을 가진 모든 타입을 가질 수 있습니다. 그렇게하는 것이 최선의 방법은 아니지만, 원한다면 거기에 있습니다.(그러나 그렇습니다. "@x"는 배열 x를 의미합니다. – runrig

1

python에서 $ _는 파이썬 셸을 제외하고 존재하지 않으며 전역 범위를 갖는 변수는 frowned됩니다. 실제로

이이 두 가지 주요 효과 :

    파이썬에서
  1. 당신이, 펄로 자연스럽게 정규 표현식을 사용할 수 없습니다 일치하는 S0 각 _ $를 반복 유사 일치를 잡는 것은
  2. 파이썬 함수를 더 복잡 명시 적으로 호출되거나 기본 변수를 가지는 경향이 있습니다.

그러나 이러한 차이는 Python에서 거의 모든 것이 클래스가되는 것으로 간주 할 때 상당히 미약합니다. Perl을 사용했을 때 "조각"을 생각했습니다. 파이썬에서 나는 오히려 내가 "작곡"하고 있다고 느낍니다.

파이썬에는 Perl의 관용적 풍부함이 없기 때문에 아마도 번역을 시도하는 것이 실수라고 생각합니다.

+0

perl() if ($ # nothing) || $ rich = ~/about /); –

0

변수 이름을 잘못 입력하지 마십시오. 진지하게.짧고, 설명이 쉬우 며, 지역적으로 사용하고, 전체 범위에 의존하지 마십시오.

큰 프로젝트를 수행하는 경우이 작업을 제대로 수행하지 않으면 pylint, unit tests 및 coverage.py를 사용하여 코드가 예상 한대로 작동하는지 확인하십시오.

other threads 중 하나에 코멘트에서 복사 :

" '엄격한 바르'가 주로 실수로 전역을 만들 수 typoed 참조 놓칠 아웃 '내의를 중지하기위한 것입니다 (물론, 펄 측면에서 패키지 변수). 이것은 파이썬에서 벌어지지 않는 배정이 로컬 선언을 기본으로하고 배제되지 않은 배타적 기호가 예외를 발생시키기 때문에 발생할 수 없습니다. "

+4

그러나 오타가있는 할당은 여전히 ​​죽은 변수의 선언이 될 수 있으며 논리 오류가 발생하지만 컴파일 오류는 발생하지 않습니다. – hobbs

+1

짧은 이름? 그러나 그 때 당신은 코멘트가 있어야한다! (http://xrl.us/bfn45h) – ysth

+0

@hobbs 그렇습니다. 좋은 IDE를 사용하고 린트/테스트 케이스를 사용하십시오. 로 말했습니까? 작동하지 않으면 실패합니다. 단순한. 파이썬은 "엄격한"모드를 가지고 있지 않습니다. 언어를 깨뜨리는 것입니다. 이름이 너무 길어서 일상적으로 잘못 입력하면 이름을 변경해야합니다. 또한, 파이썬은 펄이 아닙니다. –

2

파이썬 클래스를 파일과 같이 별도의 파일로 분할하면 관용적 인 파이썬 (pythonic이 아님)이 아니지만 범위 지정 문제를 찾을 수 있습니다.

내가 나이 임에도 불구하고, 많은 펄 후 파이썬를 작성하고 유용하게 tchrist에서이 발견되었습니다

http://linuxmafia.com/faq/Devtools/python-to-perl-conversions.html

는 펄의없이 가장 우수한 변수 범위 지정을 수행하는 데 사용하기 것은 둘째되었습니다 내 펄 -> 파이썬 전환과 함께 가장 어려운 문제. 첫 번째는 perl : CPAN이 많은 경우 분명합니다.

+0

나는 당신이 삐삐에 대해 모른다. –

+2

나는 pypi를 알고 CPAN과 비교할 수있다. CPAN에는 필자가 필요로하는 프로젝트의 많은 부분이 이미 코딩되어 있습니다. pypi에서 나는 훌륭한 것들을 찾았지만 나를 위해 그것은 더 작은 비율입니다. 프로젝트에 따라 다릅니다. 인터페이스, 텍스트 처리 및 일반적인 데이터 변환 프로세스의 경우 필자는 Perl/CPAN을 선호합니다. 수치 알고리즘, 물류 및 다른 언어와의 통합을 위해 저는 Python/pypi를 선호합니다. 최신 이미지 처리는 Python으로, 최신 CAD 도구 통합은 Perl입니다. 저는 프로젝트별로 언어와 도서관을 선택합니다. 또한 C++, VB, 뭐든간에. –

1

읽기, 수행, 이해하고, 파이썬에 대한 모든의 스타일 가이드 라인의 자세한 사항 PEP 8을 사랑 해요.

파이썬의 권장 관용구 및 습관에 대해 알고 싶다면 이것이 근원입니다.

관련 문제