Bonjour,
Du fait de l’héritage de C, python utilise la plupart du temps un mot de 16 bits pour représenter un caractère, mais 2 mots de 16 bits quand il s’agit par exemple d’un emoji ou d’un caractère chinois "extension B".
En fait, je pense que python doit utiliser UTF-16 en interne.
Dans cette hypothèse, le traitement d’une chaîne sur 2 fois 16 bits devrait être plus long que le traitement d’une chaîne ASCII.
Mais ce n’est pas ce que je constate, je trouve des valeurs très proches.
Soit pae exemple la chaîne 'abcde' et la chaîne '𦀀𦀁𦀂𦀃𦀄𦀅𦀆𦀇’.
Pour la première chaîne, ce sont des caractères ASCII codés sur 1 mot de 16 bits.
Pour le seconde chaîne, ce sont des caractères de l’extension B, codés sur 2 mots de 16 bits en UTF-16.
Mais je trouve des valeurs du même ordre.
Mon code de test :
import time
A = 'abcdefgh'
#chaîne ASCII (1 codet de 16 bits en UTF-16)
B = '𦀀𦀁𦀂𦀃𦀄𦀅𦀆𦀇'
#chaîne extension B (2 codets de 16 bits en UTF-16)
C = '一二三四五六七八'
#chaîne en chinois sipmlifé (1 codet de 16 bits en UTF-16)
Testcar = '𠁵'
repeat = 10000000
print(len(A))
print(len(B))
print(len(C))
print(Testcar)
print(repeat)
start = time.perf_counter()
for x in range(repeat):
if Testcar in A:
i = 0
end = time.perf_counter()
print ('chaîne ASCII', end-start)
start = time.perf_counter()
for x in range(repeat):
if Testcar in B:
i = 0
end = time.perf_counter()
print ('chaîne extension B', end-start)
start = time.perf_counter()
for x in range(repeat):
if Testcar in C:
i = 0
end = time.perf_counter()
print ('chaîne chinois simplifié', end-start)
Quelqu’un a une idée ?.