2017-01-25 1 views
0

변수가 포함 된 문자열에 대해 새로운 형식 옵션을 사용하고 싶지만 스크립트를 통해 정밀도를 설정하는 변수를 갖고 싶습니다. . 나에게 작은 예를 들어 보겠습니다 :새로운 파이썬 형식 옵션에 대한 가변 정밀도를 설정하는 방법

a = 1.23456789 
out_str = 'a = {0:.3f}'.format(a) 
print(out_str) 

지금이 내가 의사 코드에서하고 싶은 것이 무엇인가 :

a = 1.23456789 
some_precision = 5 
out_str = 'a = {0:.(some_precision)f}'.format(a) 
print(out_str) 

하지만 아마도 어떻게하면 나는 그것이 가능성이있는 경우, 확실하지 오전 구문은 다음과 같습니다.

답변

8

할 수 있습니다 중첩 된 자리는 형식 스펙 어디에서나 사용할 수 있습니다 둥지 자리 :

out_str = 'a = {0:.{some_precision}f}'.format(a, some_precision=some_precision) 

나는 거기라는 이름의 자리 표시자를 사용하지만, 너무 슬롯 번호를 사용할 수 있습니다

out_str = 'a = {0:.{1}f}'.format(a, some_precision) 

중첩 슬롯 (파이썬 2.7 이상)에 대한 자동 번호 매김도 지원됩니다. 여전히 왼쪽에서 오른쪽으로 번호가 지정됩니다.

out_str = 'a = {0:.{}f}'.format(a, some_precision) 

중첩 슬롯이 먼저 채워집니다.

>>> '{:.{}f}'.format(1.234, 2) 
'1.23' 
>>> '{:.{:{}}f}'.format(1.234, 2, 'd') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Max string recursion exceeded 

또한 필드 이름에 자리를 사용할 수 없습니다 (값 그래서 동적 할당 : 현재 구현은 그렇게 작동하지 않는 자리에 자리에 자리 표시자를 사용하여, 2 단계까지 중첩 자리에 당신을 수 있습니다 슬롯에).

2

또는 번호 매기기를 사용할 수 있습니다.

a = 1.23456789 
some_precision = 5 
out_str = 'a = {0:.{1}f}'.format(a,some_precision) 
print(out_str) 

Ouptut :

a = 1.23457 
관련 문제