Форматирование с плавающей запятой с помощью f-строки с использованием атрибута класса в качестве параметра

#python-3.x #string-formatting #f-string

#python-3.x #форматирование строки #f-строка

Вопрос:

Возможно ли сделать что-то подобное?

 class P():
    def __init__(self):
        self.digits = 5
        self.pi = f"{np.pi:eval(self.digits)f}"

test = Test()
test.pi
  

Я знаю, что f"{np.pi:5.f}" это работает, но возможно ли это сделать с атрибутом класса? Как в динамическом режиме? Его не нужно использовать eval() , важная часть — это если self.digits можно каким-то образом использовать.

Ответ №1:

вы можете вкладывать форматы внутри спецификатора формата

взяв ваш пример и исправив несколько вещей (отсутствующий импорт, ненужный numpy , несоответствие имени класса, выведите переменную вместо простого доступа к ней, поставьте точку перед числом, чтобы ограничить десятичные разряды):

 import math

class Test():
    def __init__(self):
        self.digits = 5
        self.pi = f"{math.pi:.{self.digits}f}"

test = Test()
print(test.pi)
  

вывод:

 $ python3 t.py 
3.14159
  

Комментарии:

1. Спасибо @Anthony Sottile, это было то, что я искал 🙂