Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can Python be made statically typed?

Tags:

python

I know that Python is mainly slower than languages like fortran and c/c++ because it is interpreted rather than compiled.

Another reason I have also read about is that it is quite slow because it is dynamically typed, i.e. you don't have to declare variable types and it does that automatically. This is very nice because it makes the code look much cleaner and you basically don't have to worry too much about variable types.

I know that there won't be a very good reason to do this as you can just wrap eg. fortran code with Python, but is it possible to manually override this dynamicly typed nature of Python and declare all variable types manually, and thus increasing Python's speed?

like image 814
Jonny Avatar asked Jul 05 '15 17:07

Jonny


1 Answers

If I interpret your question as "Is there a statically-typed mode for Python?", then Cython probably comes closest to offering that functionality.

Cython is a superset of Python syntax - almost any valid Python code is also valid Cython code. The Cython compiler translates the quasi-Python source code to not-for-human-eyes C, which can then be compiled into a shared object and loaded as a Python module.

You can basically take your Python code and add as many or as few static type declarations as you like. Wherever types are undeclared, Cython will add in the necessary boilerplate to correctly infer them, at the cost of worse runtime performance. This essentially allows you to choose a point in the continuum between totally dynamically typed Python code and totally statically typed C code, depending on how much runtime performance you need and how much time you are prepared to spend optimizing. It also allows you to call C functions directly, making it a very convenient way to write Python bindings for external libraries.

To get a better idea of how this works in practice, take a look at the official tutorial.

like image 145
ali_m Avatar answered Sep 30 '22 00:09

ali_m