标签: f-string

Python 3.6中的格式化字符串文字是什么?

Python 3.6的一个功能是格式化字符串.

这个SO问题(python-3.6中带有'f'前缀的字符串)询问格式化字符串文字的内部,但我不理解格式化字符串文字的确切用例.我应该在哪些情况下使用此功能?不明确比隐含更好吗?

python python-3.6 f-string

17
推荐指数
1
解决办法
4111
查看次数

如何将字符串格式作为变量传递给 f 字符串

我正在使用 f-strings,我需要定义一个依赖于变量的格式。

def display_pattern(n):
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:>3}' + temp
        print(temp)
Run Code Online (Sandbox Code Playgroud)

如果相关,则输出display_pattern(5)为:

  1
  2  1
  3  2  1
  4  3  2  1
  5  4  3  2  1
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以操作 format >3,并传递一个变量。例如,我尝试了以下方法:

def display_pattern(n):
    spacing = 4
    format_string = f'>{spacing}' # this is '>4'
    temp = ''
    for i in range(1, n + 1):
        temp = f'{i:format_string}' + temp
        print(temp)
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

Traceback (most recent call last):
  File "pyramid.py", line 15, …
Run Code Online (Sandbox Code Playgroud)

python string f-string

15
推荐指数
1
解决办法
7008
查看次数

f字符串中的星号(星号)是做什么的?

在python文档2.4.3中。格式化的字符串文字,似乎可以在f字符串中写一个星号后跟一个表达式{},但是我找不到如何使用它。

那是什么以及我如何使用它?是否记录在某处?

确切地说,这是关于"*" or_expr以下BNF的一部分。

f_string          ::=  (literal_char | "{{" | "}}" | replacement_field)*
replacement_field ::=  "{" f_expression ["!" conversion] [":" format_spec] "}"
f_expression      ::=  (conditional_expression | "*" or_expr)
                         ("," conditional_expression | "," "*" or_expr)* [","]
                       | yield_expression
Run Code Online (Sandbox Code Playgroud)

我在REPL中尝试过,但是会导致错误。

f_string          ::=  (literal_char | "{{" | "}}" | replacement_field)*
replacement_field ::=  "{" f_expression ["!" conversion] [":" format_spec] "}"
f_expression      ::=  (conditional_expression | "*" or_expr)
                         ("," conditional_expression | "," "*" or_expr)* [","]
                       | yield_expression
Run Code Online (Sandbox Code Playgroud)

python string language-lawyer python-3.x f-string

15
推荐指数
1
解决办法
717
查看次数

为什么 f 字符串需要在赋值表达式两边加上括号?

在 Python (3.11) 中,为什么在 f 字符串内使用赋值表达式(“海象运算符”)时需要用括号括起来?

例如:

#!/usr/bin/env python

from pathlib import Path

import torch


DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")

ckpt_dir = Path("/home/path/to/checkpoints")

_ckpt = next(ckpt_dir.iterdir())
print(_ckpt)
sdict = torch.load(_ckpt, map_location=DEVICE)

model_dict = sdict["state_dict"]

for k, v in model_dict.items():
    print(k)
    print(type(v))
    print(_shape := v.size())
    print(f"{(_numel := v.numel())}")
    print(_numel == torch.prod(torch.tensor(_shape)))
Run Code Online (Sandbox Code Playgroud)

上面的代码块 withprint(f"{_numel := v.numel()}")相反不会解析。

解析/AST 创建是否要求这样做?

python f-string python-assignment-expression

15
推荐指数
2
解决办法
1650
查看次数

为什么不能在f字符串中使用"await"?

为什么不能在f字符串中使用"await"?有没有办法强制f字符串在协程函数的上下文中评估格式表达式?

$ python3 
Python 3.6.0 (default, Mar  4 2017, 12:32:37) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> async def a(): return 1
... 
>>> async def b(): return 'The return value of await a() is {}.'.format(await a())
... 
>>> async def c(): return f'The return value of await a() is {await a()}'
... 
  File "<fstring>", line 1
    (await a())
           ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-3.6 f-string

14
推荐指数
1
解决办法
542
查看次数

为什么在Python 3.6中评估f"\ {10}"时符号"{"仍然存在?

f-string是Python 3.6中的新功能之一.

但是,当我尝试这个:

>>> f"\{10}"
'\\{10'
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚为什么左大括号'{'保留在结果中.我认为结果应该与str.format:

>>> "\{}".format(10)
'\\10'
Run Code Online (Sandbox Code Playgroud)

PEP-0498中,它没有明确回答这个问题.那么是什么原因导致左大括号'{'留在结果和是什么原因导致之间的差异f-stringstr.format()

python python-3.x python-3.6 f-string

13
推荐指数
1
解决办法
390
查看次数

用于解压缩具有大括号抑制的列表的f-string语法

我一直在使用新的f-string格式检查我的一些字符串格式选项.我经常需要解压缩列表和其他未知长度的迭代.目前我使用以下...

>>> a = [1, 'a', 3, 'b']
>>> ("unpack a list: " + " {} "*len(a)).format(*a)
'unpack a list:  1  a  3  b '
Run Code Online (Sandbox Code Playgroud)

这虽然有点麻烦,但使用3.6之前的格式表示法.考虑到运行时字符串连接,新的f-string格式选项很有意思.这是我遇到问题的{}数量的复制.在我之前的例子中,我只是创建了必要的结构并在.format()部分中解压缩.

尝试这样做产生了一个有效的变体,但是,我不能将两个花括号放在一起,或者它不能解包...

(1)

>>> 'unpack a list'  f' {{*a}}'
'unpack a list {*a}'
Run Code Online (Sandbox Code Playgroud)

按下,我在内部{}对周围插入了一个空格.这是一个适度的改进,但是开始和结束{,}存在.

(2)

>>> 'unpack a list'  f' { {*a} }'
"unpack a list {1, 3, 'a', 'b'}"
Run Code Online (Sandbox Code Playgroud)

将变体拼接成一个封闭的f-string使外观和语法更好,因为评估显然是从左到右.然而,这仍然留下了封闭的花括号.

(3)

>>> f'unpack a list { {*a} }'
"unpack a list {1, 3, 'a', 'b'}"
Run Code Online (Sandbox Code Playgroud)

也许,我正在过度思考整个过程,并希望采用某种形式的自动拆包.这只是产生了列表表示,大括号被[]替换.
(4)

>>> f'unpack a list {a}'
"unpack a …
Run Code Online (Sandbox Code Playgroud)

python string-formatting python-3.x python-3.6 f-string

13
推荐指数
2
解决办法
7544
查看次数

你可以重载Python 3.6 f-string的"运算符"吗?

在Python 3.6中,您可以使用以下f字符串:

>>> date = datetime.date(1991, 10, 12)
>>> f'{date} was on a {date:%A}'
'1991-10-12 was on a Saturday'
Run Code Online (Sandbox Code Playgroud)

我想重载接收'%A'上述方法的方法.可以吗?

例如,如果我想写一个愚蠢的包装器datetime,我可能期望这个重载看起来像:

class MyDatetime:
    def __init__(self, my_datetime, some_other_value):
        self.dt = my_datetime
        self.some_other_value = some_other_value

    def __fstr__(self, format_str):
        return (
            self.dt.strftime(format_str) + 
            'some other string' +
            str(self.some_other_value
        )
Run Code Online (Sandbox Code Playgroud)

python python-3.x python-3.6 f-string

12
推荐指数
1
解决办法
653
查看次数

如何在python中拆分长f字符串?

我得到了一个line too longpep8 E501问题.

f'Leave Request created successfully. Approvers sent the request for approval: {leave_approver_list}'
Run Code Online (Sandbox Code Playgroud)

我尝试使用多行字符串,但这带来了一个\n,这打破了我的测试:

f'''Leave Request created successfully.
Approvers sent the request for approval: {leave_approver_list}'''
Run Code Online (Sandbox Code Playgroud)

如何保持单线并通​​过pep8linting

python string python-3.x f-string

12
推荐指数
2
解决办法
2735
查看次数

f 字符串格式:显示数字符号?

关于 python f 字符串的基本问题,但找不到答案:如何强制浮点数或整数的符号显示?即什么 f 字符串使3显示为+3

python string python-3.x f-string

12
推荐指数
2
解决办法
5617
查看次数