在输入中使用' 作为千位分隔符是很成问题的,因为Python 使用' 来分隔字符串,但您可以使用_ (PEP 515, Underscores in Numeric Literals):
关于输出,这稍微难一些,但可以使用 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 默认加载这个扩展。
完成!
编辑:我看到你想要 a) 使用 ' 作为分隔符,并且 b) 对浮点数做同样的事情:
使用不同的分隔符非常简单:只需str.replace():
def print_int(number, printer, cycle):
printer.text(f'{number:,}'.replace(',', "'"))
对浮点数做同样的事情也很简单:只需设置 print_int 以便将浮点数打印到。我也建议把名字改成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)