Lista de Python para operaciones bitwise

¿Hay alguna forma de tomar una lista de expresiones de consulta de django (p. Ej., Q(first_name="Jordan") , donde Q es django.db.models.Q ) y en modo de bit O juntos?

En otras palabras, tengo algo como esto:

 search_string = "various search terms" 

Y quiero hacer esto:

 search_params = [Q(description__icontains=term) for term in re.split(r'\W', search_string)] search_params = something_magical(search_params) results = Record.objects.filter(search_params) 

donde search_params ahora es equivalente a Q(description__icontains="various") | Q(description__icontains="search" | Q(description__icontains="terms" Q(description__icontains="various") | Q(description__icontains="search" | Q(description__icontains="terms"

Sé que sería posible con una función como esta:

 def something_magical(lst): result = lst[0] for l in lst[1:] result |= l return result 

Así que me pregunto si esta funcionalidad ya está incorporada en Python (y supongo que está más optimizada que mi función aquí).

Aunque me interesa para esta aplicación, también me interesa teóricamente.

Probablemente quieras

 import operator from functools import reduce # Python 3 search_params = reduce(operator.or_, search_params, Q()) 

Esto colocará un bit search_params o ( | ) entre todos los elementos en search_params , comenzando con una condición vacía Q() .