The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск языка программирования Python 3.6, opennews (ok), 24-Дек-16, (0) [смотреть все] +2

Сообщения [Сортировка по времени | RSS]


66. "Выпуск языка программирования Python 3.6"  +/
Сообщение от freehckemail (ok), 25-Дек-16, 11:07 
>>> width = 10
>>> precision = 4
>>> value = decimal.Decimal("12.34567")
>>> f"result: {value:{width}.{precision}}"  # nested fields
> 'result:      12.35'

Офигеть, какой очевидный пример. Нет, оно что-то делает, очевидно, но вот что - не понимаю в упор. :)

Ответить | Правка | Наверх | Cообщить модератору

68. "Выпуск языка программирования Python 3.6"  +/
Сообщение от Andrey Mitrofanov (?), 25-Дек-16, 12:54 
>>>> width = 10
>>>> precision = 4
>>>> value = decimal.Decimal("12.34567")
>>>> f"result: {value:{width}.{precision}}"  # nested fields
>> 'result:      12.35'
> Офигеть, какой очевидный пример. Нет, оно что-то делает, очевидно, но вот что
> - не понимаю в упор. :)

sprintf( "result: %*.*f", width, precision, value) какой-нибудь, наверное. Да, sprintf(), как типа синтаксическая фича языка это надо...  Означаетли это что в _языке_ не достаточно средств композиции, синтеза, абстрацкции или чето там? Есть в зале CS-учёные, ну, хотя в объёме 3ёх курсов??---

Ответить | Правка | Наверх | Cообщить модератору

70. "Выпуск языка программирования Python 3.6"  +4 +/
Сообщение от Stax (ok), 25-Дек-16, 14:50 
Причем тут вообще композиция и прочее?? Форматированию по имени, а не позиции сто лет в обед, это с каких-то древнейших вторых (если вообще не первых, но тут уже не помню) версий питона работает. И доступ к атрибутам всегда был. См. "Accessing arguments by name" и "Accessing arguments’ attributes" примеры: https://docs.python.org/2/library/string.html#format-examples

По самой фиче - они просто добавили возможность обращаться к этим аргументам без явной передачи их в format() и синтаксический сахар f"строка" для замены "строка".format(). Путем некого извращения (и это довольно неэффективно с точки зрения того, как это в данном примере выполняется) это можно эмулировать вообще в любом питоне, как третьем, так и втором:

>>> num=123
>>> "num={num}".format(**locals())

'num=123'
>>> 'num=%(num)d' % locals()

'num=123'

Ну а с атрибутами (в примере с Decimal) оно автоматически получилось, т.к. эта возможность существовала и ранее.

Ответить | Правка | Наверх | Cообщить модератору

74. "Выпуск языка программирования Python 3.6"  +/
Сообщение от Аноним (-), 26-Дек-16, 07:32 
Да это же Сишники, что с них взять.
Ответить | Правка | Наверх | Cообщить модератору

76. "Выпуск языка программирования Python 3.6"  –1 +/
Сообщение от freehckemail (ok), 26-Дек-16, 12:33 
>>>>> f"result: {value:{width}.{precision}}"  # nested fields
>> Офигеть, какой очевидный пример. Нет, оно что-то делает, очевидно, но вот что
>> - не понимаю в упор. :)
> sprintf( "result: %*.*f", width, precision, value) какой-нибудь, наверное.

О, и правда, похоже на то. Спасибо.

Ответить | Правка | К родителю #68 | Наверх | Cообщить модератору

77. "Выпуск языка программирования Python 3.6"  +/
Сообщение от Аноним (-), 26-Дек-16, 12:33 
>>>> width = 10
>>>> precision = 4
>>>> value = decimal.Decimal("12.34567")
>>>> f"result: {value:{width}.{precision}}"  # nested fields
>> 'result:      12.35'
> Офигеть, какой очевидный пример. Нет, оно что-то делает, очевидно, но вот что
> - не понимаю в упор. :)

Тут скорее забавен сам метод "float to string", когда pecision это количество цифр(значащих) а не количество после запятой :)
Мне почему-то казалось что логически верным было бы приведение типа:
'result:    12.3457' либо 'result: 1.2346e-1'

Ответить | Правка | К родителю #66 | Наверх | Cообщить модератору

83. "Выпуск языка программирования Python 3.6"  +1 +/
Сообщение от oopsy (?), 26-Дек-16, 23:19 
Так получилось потому, что используется формат по умолчанию. А формат по умолчанию в данном случае будет g.

Укажите явно f или e (например, "result: {value:{width}.{precision}f}" )
будет как привычно со времён FORTRAN-IV
'result:    12.3457' или 'result:  1.2346e+1'

Впрочем, поведение формата g в python соответствует поведению в C.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру