otrzymuję, że byłoby to możliwe, aby zrobić coś podobnegoCzy można pisać wektory w formacie i, j, k?
i = numpy.array([1,0,0])
j = numpy.array([0,1,0])
k = numpy.array([0,0,1])
a = 2*i + 5*j + 9*k
ale jest to możliwe, aby wykorzystać podobną składnię do sposobu liczby zespolone są zrobione, i utworzyć klasę, która może określić 2i + 5j + 9k
jest członkiem mojego klasy i automatycznie go utworzyć?
A może wymagałoby to zmiany interpretera python, zmieniając sposób, w jaki analizuje pliki? Zajrzałem do pliku gramatycznego, ale wszystko, co widzę, to aluzja do: NUMBER
, a j
nie jest wymienione.
Zajrzałem także pod parsermodule.c, ale nie mogłem łatwo zauważyć niczego, co sprawiło, że było oczywiste, jak można to zrobić.
Czy ktoś wie, jak to możliwe?
Powinienem chyba dodać, że tak naprawdę nie planuję tego zrobić (chyba, że jakimś cudem okazało się, że nie będę wymagał rekompilacji mojej własnej wersji Pythona, co byłoby szalone, aby zrobić coś innego niż akademicką podróż) , ale tylko z ciekawości, jak działa ten język.
Nie, nie jest to możliwe bez zmiany parsera Python. Dodałem znacznik "Python-internals" i już wkrótce ludzie z całego świata zbiegną się tutaj, by powiedzieć, gdzie taka zmiana musiałaby zostać wykonana (i radzę nie robić tego). – jsbueno
Możesz zobaczyć, gdzie wyodrębniane są liczby złożone w ['tokenizer.py'] (https://hg.python.org/releasing/2.7.9/file/753a8f457ddc/Parser/tokenizer.c#l1429) – jonrsharpe
Komentarz matematyczny : Czy twój wektor 'j' nie powinien być' numpy.array ([0,1,0]) '(druga współrzędna 1 zamiast 0)? – halex