Найти - Пользователи
Полная версия: str.format
Начало » Python для новичков » str.format
1 2 3
Nedobolsky
 print('{}-{}-{}'.format(*[1, 2, 3]))
 print('{one}-{two}-{three}'.format(**{'two': 2, 'one': 1, 'three': 3}))
Вопрос: Объясните зачем в данных примерах ставят символ * ? Во втором примере, их вообще два!
Nedobolsky
Большое спасибо!
Rodegast
> print('{}-{}-{}'.format(*))

Люди! Не пользуйтесь форматом!
 >>> print('%i-%i-%i'%(1, 2, 3))
1-2-3
PEHDOM
Rodegast
Люди! Не пользуйтесь форматом!
обоснуй
Rodegast
“Читаемость имеет значение”
PEHDOM
Rodegast
“Читаемость имеет значение”
ну ХЗ, ИМХО особой разницы нет. С точки зрения читаемости f-строки более читабельны чем format или %-форматирование. Но им(f-строкам) нельзя скормить списко/словарь “как есть”.
Rodegast
> особой разницы нет

Разница большая, особенно когда пытаются конкатенировать строки при помощи этого формата.

> С точки зрения читаемости f-строки более читабельны

А вот для любителей f-строк в аду приготовлено специальное место.
py.user.next
Rodegast
Разница большая, особенно когда пытаются конкатенировать строки при помощи этого формата.
Разнотипные аргументы может использовать полиморфно
  
>>> fmt = '{} {}'
>>> 
>>> [fmt.format(*i) for i in ((1, 2), ('a', 'b'), (1+2j, None))]
['1 2', 'a b', '(1+2j) None']
>>> 
>>> 
>>> fmt = '{:10}'
>>> 
>>> list(map(fmt.format, (1, 'a', 1+2j)))
['         1', 'a         ', '    (1+2j)']
>>>
Причём можно и явно указывать, какие типы ожидаются, если, наоборот, нужно строго пропускать.

Также именованные аргументы играют тоже большую роль для ясности кода
  
>>> fmt = 'User: {user}\nAddress: {address}\nPhone: {phone}'
>>> 
>>> print('\n\n'.join(fmt.format(user=u, address=a, phone=p)
...           for u, a, p in (('John', 'Street 123', 123),
...                           ('Mary', 'Street 456', 456),
...                           ('Bob', 'Street 789', '555-55-55'),)))
User: John
Address: Street 123
Phone: 123
 
User: Mary
Address: Street 456
Phone: 456
 
User: Bob
Address: Street 789
Phone: 555-55-55
>>>
Часто бывает формат многострочный, а аргументов с десяток. Сообщение бота какое-нибудь с кучей подстановок.
Rodegast
> Также именованные аргументы играют тоже большую роль для ясности кода

Кто тебе запрещает использовать имена в месте с %?

> Часто бывает формат многострочный, а аргументов с десяток. Сообщение бота какое-нибудь с кучей подстановок.

Вот когда будет достаточно сложное форматирование, тогда и пользуйся форматом. Но в других ситуациях он не уместен. За такое прямо убить хочется…
 "aaaaa {}".format("bbb")
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB