Commit 3f5848fc authored by gabrieldemarmiesse's avatar gabrieldemarmiesse

Moved examples from string.rst and completed them to make them runnable.

parent 04780910
cdef bytes bytes_string = b'hello world'
cdef char c
for c in bytes_string:
if c == 'A':
print("Found the letter A")
cdef unicode ustring = u'Hello world'
# NOTE: no typing required for 'uchar' !
for uchar in ustring:
if uchar == u'A':
print("Found the letter A")
cpdef void is_in(Py_UCS4 uchar_val):
if uchar_val in u'abcABCxY':
print("The character is in the string.")
else:
print("The character isn't in the string")
......@@ -676,22 +676,14 @@ C code::
for c in c_string[:100]:
if c == 'A': ...
The same applies to bytes objects::
The same applies to bytes objects:
cdef bytes bytes_string = ...
cdef char c
for c in bytes_string:
if c == 'A': ...
.. literalinclude:: ../../examples/tutorial/string/for_bytes.pyx
For unicode objects, Cython will automatically infer the type of the
loop variable as :c:type:`Py_UCS4`::
cdef unicode ustring = ...
loop variable as :c:type:`Py_UCS4`:
# NOTE: no typing required for 'uchar' !
for uchar in ustring:
if uchar == u'A': ...
.. literalinclude:: ../../examples/tutorial/string/for_unicode.pyx
The automatic type inference usually leads to much more efficient code
here. However, note that some unicode operations still require the
......@@ -704,11 +696,9 @@ loop to enforce one-time coercion before running Python operations on
it.
There are also optimisations for ``in`` tests, so that the following
code will run in plain C code, (actually using a switch statement)::
code will run in plain C code, (actually using a switch statement):
cdef Py_UCS4 uchar_val = get_a_unicode_character()
if uchar_val in u'abcABCxY':
...
.. literalinclude:: ../../examples/tutorial/string/if_char_in.pyx
Combined with the looping optimisation above, this can result in very
efficient character switching code, e.g. in unicode parsers.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment