关于Python f-strings的基本问题,但是我找不到答案:如何强制显示浮点数或整数的符号?即哪个f-string可以将
3
显示为+3
?3
显示为+3
?来自文档:
选项 含义 '+'
表示应该为正数和负数都使用符号。 '-'
表示只有负数应该使用符号(这是默认行为)。
文档示例:
>>> '{:+f}; {:+f}'.format(3.14, -3.14) # show it always
'+3.140000; -3.140000'
>>> '{:-f}; {:-f}'.format(3.14, -3.14) # show only the minus -- same as '{:f}; {:f}'
'3.140000; -3.140000'
>>> '{:+} {:+}'.format(10, -10)
'+10 -10'
上述例子使用了f-strings:
>>> f'{3.14:+f}; {-3.14:+f}'
'+3.140000; -3.140000'
>>> f'{3.14:-f}; {-3.14:-f}'
'3.140000; -3.140000'
>>> f'{10:+} {-10:+}'
'+10 -10'
在打印0
时需要注意0既不是正数也不是负数。在Python中,+0 = -0 = 0
。
>>> f'{0:+} {-0:+}'
'+0 +0'
>>> f'{0.0:+} {-0.0:+}'
'+0.0 -0.0'
0.0
和-0.0
是不同的对象1。
在一些计算机硬件有符号数值表示中,零有两个不同的表示形式,一个与正数一起分组的正表示形式和一个与负数一起分组的负表示形式;这种双重表示形式称为带符号零,后一种形式有时被称为负零。
:+
number=3
print(f"{number:+}")
输出+3
f"{['', '+'][number>0]}{number}"
numbers = [+3, -3]
for number in numbers:
print(f"{['', '+'][number>0]}{number}")
结果:
+3
-3
编辑:小时间分析:
import time
numbers = [+3, -3] * 1000000
t0 = time.perf_counter()
[print(f"{number:+}", end="") for number in numbers]
t1 = time.perf_counter()
[print(f"{number:+.2f}", end="") for number in numbers]
t2 = time.perf_counter()
[print(f"{['', '+'][number>0]}{number}", end="") for number in numbers]
t3 = time.perf_counter()
print("\n" * 50)
print("""number:+ : """ + str(round(t1-t0, 2)) + "s")
print("""number:+.2f : """ + str(round(t2-t1, 2)) + "s")
print("""['', '+'][number>0] : """ + str(round(t3-t2, 2)) + "s")
结果:
number:+ : 1.43s
number:+.2f : 1.98s
['', '+'][number>0] : 1.23s
看起来我有最快的整数解决方案。
['', '+'][number>0]
是一个带下标的列表,并且周围的{}强制执行评估。 - ShpielMeisterf"{['(', ''][n>=0]}{n:3.4}{[')', ''][n>=0]}"
-> (-2.455)
- 我找不到其他方法来实现这个。 - undefined使用 if 语句:如果 x > 0,则执行 .. "",否则执行。