gpt4 book ai didi

python-3.x - ipython:打印带有千位分隔符的数字

转载 作者:行者123 更新时间:2023-12-05 09:06:37 28 4
gpt4 key购买 nike

我在 Debian 10 上使用 ipython 5.8.0

输出是这样的:

In [1]: 50*50
Out[1]: 2500

是否可以配置 ipython 打印所有带有千位分隔符的数字?即:

In [1]: 50*50
Out[1]: 2'500

In [2]: 5000*5000
Out[2]: 25'000'000

或许,是否有可能让 ipython 也理解输入的千位分隔符?

In [1]: 5'000*5'000
Out[1]: 25'000'000

更新

@Chayim Friedman 接受的答案适用于整数,但不适用于 float :

In [1]: 500.1*500
Out[1]: 250050.0

此外,当它工作时,它使用 , 作为千位分隔符:

In [1]: 500*500
Out[1]: 250,000

我可以使用 ' 代替吗?

最佳答案

在输入中使用 ' 作为千位分隔符是很有问题的,因为 Python 使用 ' 来分隔字符串,但是您可以使用 _ ( PEP 515, Underscores in Numeric Literals ) :

IPython input thousand separators

关于输出,这有点难,但可以使用 IPython 扩展来完成。

将以下 Python 代码放入 ~/.ipython/extensions/thousands_separator.py 的新文件中:

default_int_printer = None

def print_int(number, printer, cycle):
printer.text(f'{number:,}') # You can use `'{:,}'.format(number)` if you're using a Python version older than 3.6

def load_ipython_extension(ipython):
global default_int_printer

default_int_printer = ipython.display_formatter.formatters['text/plain'].for_type(int, print_int)

def unload_ipython_extension(ipython):
ipython.display_formatter.formatters['text/plain'].for_type(int, default_int_printer)

此代码告诉 IPython 将默认的 int 格式化程序替换为加载此扩展时打印千位分隔符的格式化程序,并在卸载时恢复原始格式。

编辑:如果您想要不同的分隔符,例如 ',请将 f'{number:,}' 替换为 f'{number:,}'.replace(',', "'")

您可以使用魔术命令 %load_ext thousands_separator 加载扩展并使用 %unload_ext thousands_separator 卸载它,但如果您始终需要它,可以将它放在默认配置文件。

在终端中运行以下代码:

ipython3 profile create

它将报告文件 ~/.ipython/profile_default/ipython_config.py 已创建。输入它,然后搜索以下字符串:

## A list of dotted module names of IPython extensions to load.
#c.InteractiveShellApp.extensions = []

将其替换为以下内容:

# A list of dotted module names of IPython extensions to load.
c.InteractiveShellApp.extensions = [
'thousands_separator'
]

这会告诉 IPython 默认加载此扩展。

完成!

enter image description here

编辑:我看到您想要 a) 使用 ' 作为分隔符,b) 对 float 执行相同操作:

使用不同的分隔符非常简单:只需str.replace():

def print_int(number, printer, cycle):
printer.text(f'{number:,}'.replace(',', "'"))

对 float 做同样的事情也很简单:只需设置 print_int 就可以将 float 打印到。我还建议将名称更改为 print_number

最终代码:

default_int_printer = None
default_float_printer = None

def print_number(number, printer, cycle):
printer.text(f'{number:,}'.replace(',', "'"))

def load_ipython_extension(ipython):
global default_int_printer
global default_float_printer

default_int_printer = ipython.display_formatter.formatters['text/plain'].for_type(int, print_number)
default_float_printer = ipython.display_formatter.formatters['text/plain'].for_type(float, print_number)

def unload_ipython_extension(ipython):
ipython.display_formatter.formatters['text/plain'].for_type(int, default_int_printer)
ipython.display_formatter.formatters['text/plain'].for_type(float, default_float_printer)

关于python-3.x - ipython:打印带有千位分隔符的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65769435/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com