Let's carry on with the last article about speeding up Python with Cython. After running the test.py script again by using now the new version of the module, we obtain as follows.
Now the improvement achieves the 98% apropos of the first round. Let's take a look at the new HTML file in order to discern which parts of the code have been directly turned into pure C code.
From the previous picture, it can be asserted that apart from the two static types, a couple of critical structures have been also translated into C: the loops. Cython also provides another C-style syntax so as to write loops. The following file uses this kind of structure, but remember that will not produce any improvement because those loops have already been translated into C.
You can check the documentation located on the Cython website and learn lots of code structures provided by Cython. For example, if this method was embedded in the main script (not as an imported module), you might develop the next optimized method, where the function returns a pointer to an array, and that array has been defined as static and not as a Python list.
Let's test out again the HTML file generated for this method.
cython$ python test.py
0.0394711971283
Now the improvement achieves the 98% apropos of the first round. Let's take a look at the new HTML file in order to discern which parts of the code have been directly turned into pure C code.
From the previous picture, it can be asserted that apart from the two static types, a couple of critical structures have been also translated into C: the loops. Cython also provides another C-style syntax so as to write loops. The following file uses this kind of structure, but remember that will not produce any improvement because those loops have already been translated into C.
defcalculate_primes(int limit):
primes = []
cdef int number =0
cdef int divisor =0
for number from2<=number<=limit:
for divisor from2<=divisor<=number:
if number % divisor ==0and number == divisor:
primes.append(number)
break
elif number % divisor ==0and number != divisor:
break
return primes
You can check the documentation located on the Cython website and learn lots of code structures provided by Cython. For example, if this method was embedded in the main script (not as an imported module), you might develop the next optimized method, where the function returns a pointer to an array, and that array has been defined as static and not as a Python list.
cdef int*calculate_primes(int limit):
cdef int primes[10000]
cdef int number =0
cdef int divisor =0
cdef int i =0
for number from2<=number<=limit:
for divisor from2<=divisor<=number:
if number % divisor ==0and number == divisor:
primes[i] = number
i +=1
break
elif number % divisor ==0and number != divisor:
break
return primes
Let's test out again the HTML file generated for this method.