I've seen it used in two ways. Both as a throw-away variable but more commonly as a text wrapper for internationalization.
Throw-away variable
name, _ = 'bida.bombu.foo'.split('.', 1)
Although I would not recommend this. Call it "ignored" instead.
name, ignored = 'bida.bombu.foo'.split('.', 1)
It's clearer.
i18n wrapper
from zope.i18nmessageid import MessageFactory
_ = MessageFactory('my.domain')
label = _("The label text")
label
will here be a "Message", an object that has a message id and a domain, and when rendered to a user interface (like a web page) it will be translated to the current user language via a message catalog, so that the label will end up in the local language of the user.
_
is used here because it is short and unobtrusive. The resulting code, _("The label text")
doesn't look to different from just a string, while MyDomainMessage("The label text")
does look very different and also is much longer.