2015-11-27 5 views
0
Условно

Рассмотрим следующий кодформат строки

', '.join(['{} <{}> ({})'.format(user.nickname, user.email, user.employee_id) 
        for user in referrers]) 

Теперь я хотел бы, чтобы пропустить () и пустое пространство, когда employee_id не существует.

referrer_strs = [] 
for user in referrers: 
    if user.employee_id is None: 
     referrer_strs.append('{} <{}>'.format(user.nickname, user.email)) 
    else: 
     referrer_strs.append('{} <{}> ({})'.format(user.nickname, user.email, user.employee_id)) 

return ', '.join(referrer_strs) 

Я мог бы преобразовать его в понимание, но есть ли более питонический способ сделать это?

+1

Этот код выглядит хорошо. Это читаемо. Не меняйте его. – furas

+0

Я знаю, что это читаемо, но я задаюсь вопросом, есть ли какая-то маска формата строки, например. '{} <{}> {?()} ' –

+0

Попробуйте https://pyformat.info/. Может быть, вы что-то нашли. Но я так не думаю. – furas

ответ

0

код теперь больше удовольствия = P

Вы можете использовать «псевдо-троичный оператор», если вы хотите сделать все, что только в одной строке

class User: 
    def __init__(self, nickname, email, employee_id=None): 
     self.nickname = nickname 
     self.email = email 
     self.employee_id = employee_id 

referrers = [ 
    User('macabeus', '[email protected]', 1), 
    User('joão', '[email protected]'), 
    User('josé', '[email protected]', 3) 
] 

print(
    ', '.join(
     ['{} <{}>{}'.format(user.nickname, user.email, ('', ' ({})'.format(user.employee_id))[user.employee_id is not None]) 
        for user in referrers] 
    ) 
) 
0

Используя этот conditional list indices removal SO post, попробуйте добавить a, если логика:

', '.join(['{} <{}> ({})'.format(user.nickname, user.email, user.employee_id) 
        for user in referrers if not (user.employee_id is None)]) 
Смежные вопросы