2010-12-02 3 views
3

저는 파이썬 프로그래밍 (C/C++ 배경)에 새로운 것이 있습니다. 목록의 사전과 같은 복잡한 데이터 구조를 사용해야하는 코드를 작성하고 있습니다. 이 객체를 사용해야 할 때 구조를 간략하게 기억하고 액세스하는 방법을 간략하게 기억해야합니다. 이로 인해 며칠 동안 손질되지 않은 코드 작업을 다시 시작하기가 어렵습니다. 각 변수에 주석을 사용하는 것이 매우 바람직하지 않지만 매우 유연하지는 않습니다. 그래서 파이썬 변수는 메모리에 대한 포인터 일 뿐이며 정적으로 타입을 선언 할 수 없기 때문에 복잡한 데이터 구조를 쉽게 사용할 수있는 규칙이나 규칙이 있습니까?Python에서 복잡한 데이터 구조에 대한 선언 형식

+0

좋은 이름을 사용 하시겠습니까? ;) – delnan

+1

사전에서 알려진 고정 키 세트를 사용하는 경우 C++에서와 같이 클래스를 사용하는 것이 더 자연스러운 것일 수 있습니다. 그렇지 않으면 유익한 이름을 선택하려고합니다. –

+0

Russel에게 의견을 보내 주셔서 감사합니다.하지만 사전이 제 코드에서해야 할 일에 너무 적합하다고 생각합니다. 수업을 사용하는 것은 비생산적이라고 생각합니다. 일반적으로 말하지만, 귀하의 의견을 기억하는 것이 좋습니다. –

답변

3

클래스에 docstrings을 사용하는 경우 help(vargoeshere)을 사용하여 사용 방법을 확인할 수 있습니다.

+0

해답을 주셔서 감사합니다. 모든 점에서 고려해야 할 가장 좋은 해결책은 주석과 좋은 설명이 포함 된 변수 이름을 사용하는 것입니다 (당연히 헝가리 표기법 (감사 필러)). –

1

나는 당신이 당신의 복잡한 구조의 일부를 잘 봐야한다고 생각한다. 당신이 그들과하고있는 일은 ...이 Pythonic인가? 여기에 물어보십시오. 복잡성이 C/C++의 인공물 인 경우를 발견 할 것입니다.

+0

이것은 절대적으로 맞습니다. 내 C/C++ 경험에 영향을받지 않고 파이썬 지향적 인 방식으로 코드를 작성할 수 있도록 최대한 노력했습니다. :) –

0

예제 코드를 코드 또는 테스트에 포함하십시오.

2

무엇을 하든지, 반복하지 말고 헝가리 표기법을 사용하지 마십시오! 그것은 심각한 뇌를 일으킨다 & 비트 부패.

그래서 무엇을 할 수 있습니까? 파이썬과 C/C++은 상당히 다릅니다. C에서

void doWithFooThing(FooThing *foo) { 
    foo->bar(); 
} 

동적 다형성 ++ 상속에 따라 달라집니다 : doWithFooThing에 전달 된 포인터는 FooThing 또는 그 서브 클래스의 1 개의 인스턴스를 가리킬 수 C++에서 당신은 일반적으로 그렇게 같은 다형성 호출을 처리합니다. 아니 파이썬 있도록 : 여기

def do_with_fooish(fooish): 
    fooish.bar() 

, 어떤 충분히 fooish 일 (호출 가능한 바 속성이 즉 모든 것이) 사용할 수에 상관없이이 상속을 통해 다른 fooish 일에 releated 방법.

요점은 C++에서는 모든 객체가 가지고있는 (기본) 유형을 알고 있지만 파이썬에서는 그렇지 않으며, 당신은 상관하지 않습니다. 파이썬에서 달성하고자하는 것은 클래스 상속의 엄격한 규칙에 따라 모든 것을 강제로 수행 할 필요없이 가능한 많은 상황에서 재사용 가능한 코드입니다. 귀하의 이름은이를 반영해야합니다.

def some_action(a_list): 
    ... 

:하지만 서열이 목록은 있지만 반복 가능한 순서뿐만 아니라 수 있습니다

def some_action(seq): 
    ... 

, 그것은리스트, 터플, 딕셔너리, 설정, 반복자, 어떤 일을 당신은 쓰기니까.

일반적으로 형식 구조 대신 코드의 의도에 중점을 둡니다. 대신 작성 :

dict_of_strings_to_dates = {} 

당신은 쓰기 :

users_birthdays = {} 

또한 C/C++에 비해 더욱 더 짧은 기능을 유지하는 데 도움이됩니다. 그러면 무슨 일이 일어나는지 쉽게 볼 수 있습니다.

또 다른 한가지 : 파이썬 변수를 메모리의 포인터로 생각하면 안됩니다.

assert foo.bar == getattr(foo, 'bar') == foo.__dict__['bar'] 

없음 항상 정확히 그래서, 내가 동의하지만, 세부 사항은 docs.python.org에서 조회 할 수 있습니다 : 그들은 사실 dicionary 항목에있어.

그리고 BTW, 파이썬에서 은 C/C++ 에서처럼을 선언하지 않습니다. 항목을 정의합니다.

+0

여기 아주 훌륭한 토론, thx – Pete

+0

나는 하나의 유형으로 함수 인자를 생각하는 것에 대해 유죄입니다. 이것은 차례로 내가 쓰는 함수에 영향을 미친다. 파이썬의 중요한 부분은 이전의 모든 제약 조건과 우리가 결과로 개발 한 방법론을 배우지 않는 것입니다. – Pete

관련 문제