Built-ins moins connues de Python
Directory
Source
Any
La fonction any
prend un itérable en entrée et retourne un booléen si au moins un élément de l’itérable est True
:
>>> any([0,0,0,1])
True
You might be wondering when you would ever use this built-in. I did too at first. An example that croppedupinoneofmyjobsinvolvedaverycomplexuseriterfacewhereIhadtotestvariouspieces offunctionality.OneoftheitemsthatIneededtotestwasifacertainlistofwidgetshadbeenshown or enabled when they shouldn’t be. The any built-in was very useful for that. Here’s an example that kind of demonstrates what I’m talking about, although it’s not the actual code I used:
>>> widget_one = ''
>>> widget_two = ''
>>> widget_three = 'button'
>>> widgets_exist = any([widget_one, widget_two, widget_three])
>>> widgets_exist 6
True
Basically I would query the user iterface and ask it if widgets one through three existed and put the responses into a list. If any of them returned True, then I’d raise an error. You might want to check out Python’s all built-in as it has similar functionality except that it will only return True if every single item in the iterable is True.
Eval
La fonction eval
est assez controversée dans la communauté Python. Elle prend une string en entrée et execute son contenu.
>>> var = 10
>>> source = 'var * 2'
>>> eval(source)
20
Evaluate the given source in the context of globals and locals. The source may be a string representing a Python expression or a code object as returned by compile(). The globals must be a dictionary and locals can be any mapping, defaulting to the current globals and locals. If only globals is given, locals defaults to it
filter
La fonction filter
prend un une fonction et un itérable en argument et retourne un itérateur sur les éléments de l’itérable qui retournent True
:
import random
a = lambda i: i < 10
l = [random.randint(1,20) for i in range(20)]
p = [i for i in filter(a, l)]
print('l: {}\np: {}'.format(l, p))
Output:
l: [5, 3, 13, 13, 10, 15, 13, 8, 6, 1, 20, 7, 13, 3, 1, 10, 7, 20, 4, 2]
p: [5, 3, 8, 6, 1, 7, 3, 1, 7, 4, 2]
map
La fonction map
prend également une fonction et un itérable mais retourne un itérateur qui applique la fonction (map la fonction) sur chacun des éléments dans l’itérable:
f = lambda x: x*2
l = [1, 2, 3, 4, 5]
print(list(map(f,l)))
Output:
[2, 4, 6, 8, 10]
type(map(f,l))
retourne un objet de typemap
; c’est notre itérateur.
Les fonction filter et map dupliquent les fonctionnalités des générateurs d’expression en Python 3 et celle des list comprehension en Python 2.
Les façons de faire suivantes sont tout à fait équivalentes au précédent et le choix de la méthode est une question de style.
f = lambda x: x*2
l = [1, 2, 3, 4, 5]
print([i for i in map(f, l)])
print([f(i) for i in l])
print([i*2 for i in l])
Zip
La fonction zip
prend en argument une série d’itérables et crée un agrégat des éléments de chaque itérable.
k = ['x', 'y', 'z']
v = [5, 6, 7]
print(zip(k,v))
print(list(zip(k,v)))
print(dict(zip(k,v)))
Output:
<zip object at 0x000001B02EC57A08>
[('x', 5), ('y', 6), ('z', 7)]
{'z': 7, 'x': 5, 'y': 6}
Si les deux listes sont de taille différente, le zip se fait quand même mais les éléments supplémentaires dans la liste la plus longue ne seront pas traités.
L’usage le plus populaire de la fonction zip
est sa capacité de créer un dictionnaire entre deux listes.
dir
Cette fonction appelée sans paramètres retourne les noms de l’espace nom courant:
a = 3
b = 'string'
print(dir())
Output:
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'a', 'b']
Au sein d’une fonction:
a = 3
b = 'string'
def fonction():
x = 1
y = 2
print(dir())
fonction()
Output:
['x', 'y']