python3.9的输出操作

本文介绍了Python3.9中关于控制输出格式的新方法,如f-string(格式化字符串字面值)及其与str.format()、str.rjust()、str.zfill()等方法的比较,以及如何使用模板和旧的百分号运算符进行字符串插值。

1、python3.9有更漂亮的输出格式

通常,你需要更多地控制输出的格式,而不仅仅是打印空格分隔的值。有几种格式化输出的方法。

  • 要使用 格式化字符串字面值 ,请在字符串的开始引号或三引号之前加上一个 f 或 F 。在此字符串中,你可以在 { 和 } 字符之间写可以引用的变量或字面值的 Python 表达式。
>>> year = 2016
>>> event = 'Referendum'
>>> f'Results of the {year} {event}'
'Results of the 2016 Referendum'
  • 字符串的 str.format() 方法需要更多的手动操作。你仍将使用 { 和 } 来标记变量将被替换的位置,并且可以提供详细的格式化指令,但你还需要提供要格式化的信息。
>>> yes_votes = 42_572_654
>>> no_votes = 43_132_495
>>> percentage = yes_votes / (yes_votes + no_votes)
>>> '{:-9} YES votes  {:2.2%}'.format(yes_votes, percentage)
' 42572654 YES votes  49.67%'
  • 最后,你可以使用字符串切片和连接操作自己完成所有的字符串处理,以创建你可以想象的任何布局。字符串类型有一些方法可以执行将字符串填充到给定列宽的有用操作。
    当你不需要花哨的输出而只是想快速显示某些变量以进行调试时,可以使用 repr() or str() 函数将任何值转化为字符串。

str() 函数是用于返回人类可读的值的表示,而 repr() 是用于生成解释器可读的表示(如果没有等效的语法,则会强制执行 SyntaxError)对于没有人类可读性的表示的对象, str() 将返回和 repr() 一样的值。很多值使用任一函数都具有相同的表示,比如数字或类似列表和字典的结构。特殊的是字符串有两个不同的表示。
几个例子:

>>> s = 'Hello, world.'
>>> str(s)
'Hello, world.'
>>> repr(s)
"'Hello, world.'"
>>> str(1/7)
'0.14285714285714285'
>>> x = 10 * 3.25
>>> y = 200 * 200
>>> s = 'The value of x is ' + repr(x) + ', and y is ' + repr(y) + '...'
>>> print(s)
The value of x is 32.5, and y is 40000...
>>> # The repr() of a string adds string quotes and backslashes:
... hello = 'hello, world\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, world\n'
>>> # The argument to repr() may be any Python object:
... repr((x, y, ('spam', 'eggs')))
"(32.5, 40000, ('spam', 'eggs'))"

string 模块包含一个 Template 类,它提供了另一种将值替换为字符串的方法,使用类似 $x 的占位符并用字典中的值替换它们,但对格式的控制要少的多。

格式化字符串文字

格式化字符串字面值 (常简称为 f-字符串)能让你在字符串前加上 f 和 F 并将表达式写成 {expression} 来在字符串中包含 Python 表达式的值。

可选的格式说明符可以跟在表达式后面。这样可以更好地控制值的格式化方式。以下示例将pi舍入到小数点后三位:

>>> import math
>>> print(f'The value of pi is approximately {math.pi:.3f}.')
The value of pi is approximately 3.142.

在 ‘:’ 后传递一个整数可以让该字段成为最小字符宽度。这在使列对齐时很有用。:

>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
>>> for name, phone in table.items():
...     print(f'{name:10} ==> {phone:10d}')
...
Sjoerd     ==>       4127
Jack       ==>       4098
Dcab       ==>       7678

其他的修饰符可用于在格式化之前转化值。 ‘!a’ 应用 ascii() ,‘!s’ 应用 str(),还有 ‘!r’ 应用 repr():

>>> animals = 'eels'
>>> print(f'My hovercraft is full of {animals}.')
My hovercraft is full of eels.
>>> print(f'My hovercraft is full of {animals!r}.')
My hovercraft is full of 'eels'.

字符串的 format() 方法

str.format() 方法的基本用法如下所示:

>>> print('We are the {} who say "{}!"'.format('knights', 'Ni'))
We are the knights who say "Ni!"

花括号和其中的字符(称为格式字段)将替换为传递给 str.format() 方法的对象。花括号中的数字可用来表示传递给 str.format() 方法的对象的位置。

>>> print('{0} and {1}'.format('spam', 'eggs'))
spam and eggs
>>> print('{1} and {0}'.format('spam', 'eggs'))
eggs and spam

如果在 str.format() 方法中使用关键字参数,则使用参数的名称引用它们的值。:

>>> print('This {food} is {adjective}.'.format(
...       food='spam', adjective='absolutely horrible'))
This spam is absolutely horrible.

位置和关键字参数可以任意组合:

>>> print('The story of {0}, {1}, and {other}.'.format('Bill', 'Manfred',
                                                       other='Georg'))
The story of Bill, Manfred, and Georg.

如果你有一个非常长的格式字符串,你不想把它拆开,那么你最好是按名称而不是按位置引用变量来进行格式化。 这可以通过简单地传递字典并使用方括号 ‘[]’ 访问键来完成。

>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
...       'Dcab: {0[Dcab]:d}'.format(table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678

这也可以通过使用 ‘**’ 符号将 table 作为关键字参数传递。

>>> table = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
>>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**table))
Jack: 4098; Sjoerd: 4127; Dcab: 8637678

这在与内置函数 vars() 结合使用时非常有用,它会返回包含所有局部变量的字典。
例如,下面几行代码生成一组整齐的列,其中包含给定的整数和它的平方以及立方:

>>> for x in range(1, 11):
...     print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

手动格式化字符串

这是同一个平方和立方的表,手动格式化的:

>>> for x in range(1, 11):
...     print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
...     # Note use of 'end' on previous line
...     print(repr(x*x*x).rjust(4))
...
 1   1    1
 2   4    8
 3   9   27
 4  16   64
 5  25  125
 6  36  216
 7  49  343
 8  64  512
 9  81  729
10 100 1000

(注意每列之间的一个空格是通过使用 print() 的方式添加的:它总是在其参数间添加空格。)

字符串对象的 str.rjust() 方法通过在左侧填充空格来对给定宽度的字段中的字符串进行右对齐。类似的方法还有 str.ljust() 和 str.center() 。这些方法不会写入任何东西,它们只是返回一个新的字符串,如果输入的字符串太长,它们不会截断字符串,而是原样返回;这虽然会弄乱你的列布局,但这通常比另一种方法好,后者会在显示值时可能不准确(如果你真的想截断,你可以添加一个切片操作,例如 x.ljust(n)[:n] 。)

还有另外一个方法,str.zfill() ,它会在数字字符串的左边填充零。它能识别正负号:

>>> '12'.zfill(5)
'00012'
>>> '-3.14'.zfill(7)
'-003.14'
>>> '3.14159265359'.zfill(5)
'3.14159265359'

旧的字符串格式化方法

% 运算符(求余)也可用于字符串格式化。 给定 ‘string’ % values,则 string 中的 % 实例会以零个或多个 values 元素替换。 此操作通常被称为字符串插值。 例如:

>>> import math
>>> print('The value of pi is approximately %5.3f.' % math.pi)
The value of pi is approximately 3.142.
<think>根据用户描述,Python 3.9安装在自定义路径`/usr/local/python3.9/bin/python3.9`,这完全正常。安装路径可以自定义,不一定必须在`/usr/local/bin`下。以下是相关说明和操作建议: ### 安装路径说明 1. **自定义路径的合理性** - 将Python安装在`/usr/local/python3.9`是标准做法,避免覆盖系统默认Python - 系统工具(如yum)依赖`/usr/bin/python`,自定义路径不会影响系统功能 2. **环境配置建议** ```bash # 将Python 3.9添加到PATH echo &#39;export PATH="/usr/local/python3.9/bin:$PATH"&#39; >> ~/.bashrc source ~/.bashrc # 验证路径 which python3.9 # 应输出/usr/local/python3.9/bin/python3.9 ``` 3. **创建符号链接(可选)** ```bash sudo ln -s /usr/local/python3.9/bin/python3.9 /usr/local/bin/python3.9 sudo ln -s /usr/local/python3.9/bin/pip3.9 /usr/local/bin/pip3.9 ``` ### 正确使用自定义安装的Python 1. **直接调用完整路径** ```bash /usr/local/python3.9/bin/python3.9 -m pip install paramiko ``` 2. **使用虚拟环境** ```bash # 创建虚拟环境 /usr/local/python3.9/bin/python3.9 -m venv myenv source myenv/bin/activate # 在虚拟环境中安装包 pip install paramiko ``` ### 检查安装完整性 ```bash # 检查Python版本 /usr/local/python3.9/bin/python3.9 --version # 检查pip关联 /usr/local/python3.9/bin/python3.9 -m pip --version ``` ### 重要提醒 - **无需移动安装目录**:自定义路径不会导致功能问题 - **避免使用root权限安装包**:优先使用虚拟环境或`--user`选项 - **系统更新影响**:自定义路径的Python不会随系统更新被修改 §§相关问题§§ 1. 如何永久添加自定义安装的Python路径到系统环境变量? 2. 在自定义路径安装Python后,为什么执行`python3.9`命令提示"command not found"? 3. 如何为自定义路径的Python创建桌面快捷方式或启动器? 4. 编译安装Python时指定`--prefix`选项的作用是什么? 5. 如何让系统服务(如systemd service)使用自定义路径的Python解释器?</think>您的Python 3.9安装在`/usr/local/python3.9/bin/python3.9`是完全正常的,**不是安装有问题**。这是典型的自定义安装路径选择,比直接安装在`/usr/local/bin`更规范。以下是详细说明和优化建议: ### 安装路径分析 1. **路径差异原因** - `/usr/local/bin/python3.9`:系统级默认安装路径 - `/usr/local/python3.9/bin/python3.9`:**推荐的自定义安装路径** (通过`./configure --prefix=/usr/local/python3.9`指定) 2. **优势对比** | 安装路径 | 优点 | 缺点 | |---|---|----| | `/usr/local/bin` | 直接全局可用 | 易与系统包冲突 | | `/usr/local/python3.9` | 版本隔离清晰<br>多版本共存安全<br>卸载不影响系统 | 需要手动配置PATH | ### 正确使用方法 1. **创建符号链接(推荐)** ```bash sudo ln -s /usr/local/python3.9/bin/python3.9 /usr/local/bin/python3.9 sudo ln -s /usr/local/python3.9/bin/pip3.9 /usr/local/bin/pip3.9 ``` 2. **临时使用完整路径** ```bash /usr/local/python3.9/bin/python3.9 -m pip install paramiko ``` 3. **永久添加环境变量** ```bash # 编辑~/.bashrc echo &#39;export PATH="/usr/local/python3.9/bin:$PATH"&#39; >> ~/.bashrc source ~/.bashrc # 验证 which python3.9 # 应显示/usr/local/python3.9/bin/python3.9 ``` ### 验证安装完整性 ```bash # 检查Python解释器 /usr/local/python3.9/bin/python3.9 --version # 检查模块加载 /usr/local/python3.9/bin/python3.9 -c "import ssl; print(ssl.OPENSSL_VERSION)" ``` ### 多版本管理建议 1. **使用update-alternatives** ```bash sudo update-alternatives --install /usr/bin/python3 python3 /usr/local/python3.9/bin/python3.9 1 sudo update-alternatives --config python3 # 交互式选择版本 ``` 2. **虚拟环境优先** ```bash /usr/local/python3.9/bin/python3.9 -m venv myproject source myproject/bin/activate pip install paramiko ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

javascript_good

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值