2016-03-07 6 views
5

Pisałem jakiś kod w Pythonie i, jak zwykle, staram się, aby moje funkcje były małe i nadawały im jasne nazwy (choć czasami trochę za długie). Doszedłem do punktu, w którym nie ma zmiennych globalnych i wszystko, czego potrzebuje funkcja, jest przekazywane do niego.Dlaczego zmienne nie są globalne, ale w przypadku funkcji jest ok?

Ale myślałem, że w tym przypadku każda funkcja ma dostęp do dowolnej innej funkcji. Dlaczego nie ograniczyć dostępu do innych funkcji, tak jak ograniczamy dostęp do innych zmiennych.

Myślałem, że wykorzystam funkcje zagnieżdżone, ale to oznacza zamknięcie i to jeszcze gorzej dla mojego celu.

Myślałem także o używaniu obiektów i myślę, że to jest punkt OOP, choć w moim przypadku będzie to trochę za dużo.

Czy ktoś ma ten problem w swoim umyśle i jakie jest rozwiązanie.

+0

To sprawia, że ​​ustalenie stanu aplikacji jest prawie niemożliwe i zwiększa ilość informacji, które musisz przechowywać w swojej głowie, aby to zrobić. –

Odpowiedz

1

Dla dobra wszystkich osób czytających kod, pogrupowanie funkcji na klasy pomoże w ich klasyfikacji psychicznej. Użycie parametru klasy self pomaga również uporządkować zmienne, grupując je w klasie.

Możesz ograniczyć dostęp za pomocą single leading underscore na początku nazwy funkcji.

+0

Tak, myślę, że to właśnie chciałem usłyszeć. Nie chodzi tylko o zmienność, ale także o ogólną strukturę kodu. – nicusor

7

Nie jest dobrym pomysłem posiadanie globalnych zmiennych danych, np. zmienne. Zmienność jest tutaj kluczowa. Możesz mieć stałe i funkcje do zawartości swoich serc.

Ale zaraz po napisaniu funkcji, które opierają się na globalnie zmiennym stanie, ogranicza to możliwość ponownego wykorzystania twoich funkcji - są one zawsze związane z tym jednym wspólnym stanem.

0

Zmienne globalne są odradzane, ponieważ utrudniają śledzenie stanu programu. Jeśli debuguję plik o wartości 1000 wierszy i gdzieś w środku funkcji widzę some_well_named_flag = False, będę musiał zrobić wiele polowań, aby zobaczyć, jak inaczej wpływa to na to, co jeszcze w programie.

Funkcje nie mają stanu. Miejsca, w których mogą modyfikować program, są mniej lub bardziej ograniczone do parametrów i wartości zwracanej.

Jeśli nadal chcesz kontrolować dostęp do funkcji, możesz skorzystać z innych języków, takich jak Java lub C++. Jedną z konwencji w Pythonie jest przedrostek funkcji, które nie powinny być używane poza klasą z podkreśleniem, a następnie ufać ludziom, aby nie wywoływali ich spoza klasy.