Zmienne ze wskazaniem na typ

Zmienne ze wskazaniem na typ
Guaz
  • Rejestracja:około 8 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Częstochowa
  • Postów:221
0

Hej, odkryłem coś w pythonie, nie wiem czy to coś nowego, czy po prostu nie jest spotykane.
(Nie wykluczam możliwości że weszło to w pythonie3.6 bo aktualnie to testuje)
Stąd pojawia się kilka moich pytań, może ktoś zechce udzielić mi odpowiedzi :).

Precyzowanie typów zmiennych, które jest powszechne w wielu innych językach:

Kopiuj
string: str = "jakiś napis"
string = 0 #możliwa jest zmiana tego typu w normalny sposób
string: str #możliwa jest inicjalizacja bez nadania domyślnej wartości
string: int = 0 #możliwa jest zmiana typu nawet w jawny sposób
string = "jakiś napis"
def do_some(a: str):
    print(a) #jakiś napis
do_some(string)
a: int = 0.3 #To nie rzutuje wartości, umożliwia takie 'pranki'
print(a) #0.3
print(type(a)) #<class 'float'>  

Wszystkie są poprawne według interpretera, i tu pojawia się kilka moich pytań:
#1: Czy to przyśpiesza działanie Pythona?
#2: Czy jeśli przyspiesza działanie, stosowanie tego wskazania na typ musi odnosić się w każdym miejscu?
#3: Czy jest to zalecany, bądź raczej niezalecany zapis?


Linux Mint
Arduino / Python 3.5.2
edytowany 2x, ostatnio: Guaz
IK
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 2 lata
0
  1. nie
  2. nie
  3. zależy od projektu

Polecam lekturę: http://mypy.readthedocs.io/en/latest/index.html i https://www.python.org/dev/peps/pep-0484/
Ogólnie w runtime nic to nie zmienia.

Guaz
Dzięki za treściwą odpowiedź :). Z lekturą się zapoznaje, a przy okazji mam pytanie odnośnie deklaracji zmiennej w klasie w tym stylu variable = ... # type: list - to jest również tylko wskazanie egzystencji zmiennej nic nie wnoszące w działanie programu?
IK
Dokładnie, z tą różnicą, że typehinty w komentarzach powinny być stosowane tylko w Pythonie poniżej 3.5. Dodatkowo nie wiem, czy miałeś to na celu, ale ... to w Pythonie pełnoprawny obiekt, a ty przypisujesz go do zmiennej zadeklarowanej jako lista ;)
enedil
  • Rejestracja:prawie 12 lat
  • Ostatnio:2 dni
  • Postów:1027
0

Jakbyś przyjrzał się jeszcze uważniej, zauważyłbyś taki fenomen:

Kopiuj
>>> string: str
>>> type(string)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'string' is not defined

Innymi słowy, tak naprawdę to nie ma tutaj żadnej "inicjalizacji", ba, to naprawdę nie wpływa na typ zmiennej.

edytowany 1x, ostatnio: enedil
lion137
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 godziny
  • Postów:4946
0

Pep chyba tłumaczy dokładnie, zwłaszcza tutaj: https://www.python.org/dev/peps/pep-0484/#non-goals


Spine
  • Rejestracja:około 22 lata
  • Ostatnio:2 minuty
  • Postów:6698
0

To jest świetne dla narzędzi do refaktoryzacji. Teraz dobrze napisany kod powinien się refaktorować nie psując działania aplikacji.


🕹️⌨️🖥️🖱️🎮

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.