'Fetch extended information for the specified users.
Users may be specified either as lists of either user_ids,
screen_names, or twitter.User objects. The list of users that
are queried is the union of all specified parameters.
Args:
user_id:
A list of user_ids to retrieve extended information. [Optional]
screen_name:
A list of screen_names to retrieve extended information. [Optional]
users:
A list of twitter.User objects to retrieve extended information.
[Optional]
include_entities:
The entities node that may appear within embedded statuses will be
disincluded when set to False. [Optional]
Returns:
A list of twitter.User objects for the requested users'

def UsersLookup(self, user_id=None, screen_name=None, users=None, include_entities=True):

    if ((not user_id) and (not screen_name) and (not users)):
        raise TwitterError({'message': 'Specify    at    least    one    of    user_id,    screen_name,    or    users.'})
    url = ('%s/users/lookup.json' % self.base_url)
    parameters = {}
    uids = list()
    if user_id:
        uids.extend(user_id)
    if users:
        uids.extend([u.id for u in users])
    if len(uids):
        parameters['user_id'] = ','.join([('%s' % u) for u in uids])
    if screen_name:
        parameters['screen_name'] = ','.join(screen_name)
    if (not include_entities):
        parameters['include_entities'] = 'false'
    resp = self._RequestUrl(url, 'GET', data=parameters)
    try:
        data = self._ParseAndCheckTwitter(resp.content.decode('utf-8'))
    except TwitterError as e:
        (_, e, _) = sys.exc_info()
        t = e.args[0]
        if ((len(t) == 1) and ('code' in t[0]) and (t[0]['code'] == 34)):
            data = []
        else:
            raise
    return [User.NewFromJsonDict(u) for u in data]
