python 3.8.0 -在新行中打印自文档化表达式,其中包含变量值

inkz8wg9  于 2023-01-08  发布在  Python
关注(0)|答案(2)|浏览(91)

Python 3.8.0允许使用=自文档化表达式和调试,例如:print(f'{myvar=}').
是否可以在新的一行打印输出?这对于多行输出的变量(如 Dataframe )非常有用。
例如:

>>> df = pd.DataFrame({'animal':['alligator', 'bee', 'falcon', 'lion',
                  'monkey', 'parrot', 'shark', 'whale', 'zebra']})

>>> print(f'{df.head()=}')
df.head() =
    animal
0  alligator
1        bee
2     falcon
3       lion
4     monkey
7fhtutme

7fhtutme1#

如果您将f字符串用三重引号括起来,则可以在=之后包含一个换行符:

df = pd.DataFrame({'animal':['alligator', 'bee', 'falcon', 'lion',
                  'monkey', 'parrot', 'shark', 'whale', 'zebra']})

print(f'''{df=
}''')
eiee3dmh

eiee3dmh2#

使用三重引号是有效的,但是当print语句在缩进的块中时会引起一些麻烦:

if True:
    if True:
        # ...some code with indentation...
        print(f"""{df =
}""")
        # ...more code with indentation...

注意,在不破坏f字符串第一行的格式的情况下,不能简单地将}"""部分缩进到适当的级别。
我问了一个类似的问题,并找到了一个单行解决方案here,我也将其写在这里,以供参考。

df = pd.DataFrame({'animal':['alligator', 'bee', 'falcon', 'lion',
                  'monkey', 'parrot', 'shark', 'whale', 'zebra']})

f_str_nl = lambda object: f"{chr(10) + str(object)}"  # add \n directly
# f_str_nl = lambda object: f"{os.linesep + str(object)}"  # add \r\n on windows

print(f"{f_str_nl(df) = !s}")

其输出:

f_str_nl(df) = 
      animal
0  alligator
1        bee
2     falcon
3       lion
4     monkey
5     parrot
6      shark
7      whale
8      zebra

这个方法不会引起缩进块的问题,但是,f-string中的对象名会被函数名f_str_nl() Package 。

相关问题