标签: f-string

如何在隐式字符串连接中处理 f 字符串?

我犯了这个错误:

key, value = 'K', 999
msg = (
    f"key={key}, "
    "value={value}"  # needs to be prefixed with f as well
    )
# key=K, value={value}
Run Code Online (Sandbox Code Playgroud)

并开始想知道 Python 如何处理复杂的文字连接情况。

我们假设一个字符串是 f 字符串(格式化字符串文字),另一个字符串是普通字符串文字,如上例所示。Python 会在编译时连接这两个字符串吗?如果是,结果是什么?

python python-3.x f-string

8
推荐指数
1
解决办法
1万
查看次数

Python f 字符串格式不适用于内联 strftime

我遇到了一个我试图理解的奇怪错误。进行一些常规代码清理并将所有字符串格式转换为 f 字符串。这是在 Python 3.6.6 上

此代码不起作用:

from datetime import date
print(f'Updated {date.today().strftime('%m/%d/%Y')}')

  File "<stdin>", line 1
    print(f'Updated {date.today().strftime('%m/%d/%Y')}')
                                               ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

但是,这(功能相同)确实有效:

from datetime import date
d = date.today().strftime('%m/%d/%Y')
print(f'Updated {d}')

Updated 11/12/2018
Run Code Online (Sandbox Code Playgroud)

我觉得我可能遗漏了一些明显的东西,并且第二次迭代很好,但我想了解这里发生了什么。

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

8
推荐指数
2
解决办法
7357
查看次数

为什么f字符串比str()解析值快?

我正在玩f字符串(请参阅PEP 498),因此我决定检查f字符串解析(例如f“ {1}”)的速度与通常的str解析(例如str(1) ))。但是令我惊讶的是,当我使用timeit函数检查两种方法的速度时,我发现

>>> from timeit import timeit
>>> timeit("f'{1}'")
0.1678762999999961
Run Code Online (Sandbox Code Playgroud)

>>> timeit("str(1)")
0.3216999999999999
Run Code Online (Sandbox Code Playgroud)

甚至是repr func,在大多数情况下,它们都比str转换快

>>> timeit("repr(1)")
0.2528296999999995
Run Code Online (Sandbox Code Playgroud)

我不知道为什么呢?我以为f弦在内部调用了str,但是现在,我有点困惑了,有什么想法吗?提前致谢!

PD:就像有人想知道的那样:

assert f"{1}" == str(1) == repr(1)
Run Code Online (Sandbox Code Playgroud)

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

8
推荐指数
1
解决办法
383
查看次数

+ 与 f-string 的字符串连接

假设我有两个变量:

>>> a = "hello"
>>> b = "world"
Run Code Online (Sandbox Code Playgroud)

我可以通过两种方式连接它们;使用+

>>> a = "hello"
>>> b = "world"
Run Code Online (Sandbox Code Playgroud)

或者使用 f 字符串:

>>> a + b
"helloworld"
Run Code Online (Sandbox Code Playgroud)

哪种方式更好或更好的做法?有人告诉我 f-string 在性能和健壮性方面是更好的做法,我想详细了解原因。

python string performance python-3.x f-string

8
推荐指数
3
解决办法
2953
查看次数

如何在 Python 3 中向 f 字符串添加大括号?

我有这个代码

class = "maximum"
s = f"""The code for {class} is {3854-st56}"""
print(s)
Run Code Online (Sandbox Code Playgroud)

我想要这个输出:

>> The code for maximum is {3854-st56}
Run Code Online (Sandbox Code Playgroud)

但 f 字符串无法识别 3854-st56 周围的大括号,而是认为我正在尝试输入实际的 Python 代码。如何使 f 字符串识别大括号是字符串文字。

python python-3.x f-string

8
推荐指数
2
解决办法
1万
查看次数

python 3.6+记录器记录pandas数据帧 - 如何缩进整个数据帧?

我需要使用 python 日志模块来记录熊猫数据帧。我需要同等缩进的整个数据框(所有行)。

以下是简单的所需输出:

Test Dataframe Output Below:

       col1  col2
    0     1     3
    1     2     4
Run Code Online (Sandbox Code Playgroud)

但是,我得到以下输出,其中缩进仅应用于数据帧的第一行:

Test Dataframe Output Below:

       col1  col2
0     1     3
1     2     4
Run Code Online (Sandbox Code Playgroud)

我正在运行的示例代码是:

import pandas as pd
import logging

# sample dataframe
test_df = pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})

# logging set up
logging.basicConfig(level=logging.INFO)
logging.getLogger().handlers.clear()
c_handler = logging.StreamHandler()
c_handler.setFormatter(logging.Formatter('%(message)s'))
logging.getLogger().addHandler(c_handler)

# log the pandas dataframe to console
logging.info(f'\tTest Dataframe Output Below:')
logging.info(f'\n\t\t{test_df}')
logging.info(f'{test_df}')
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!

python logging python-3.x pandas f-string

7
推荐指数
1
解决办法
5802
查看次数

使用 f 字符串格式化布尔值

我希望有人已经回答了这个问题,但我已经搜索了这个主题,但找不到答案。
使用 Python3.6+,我想使用 f 字符串将布尔变量格式化为固定宽度。我有结果表,并希望 True 和 False 值的宽度固定,所以我想要一个宽度为五个字符的格式化字符串。以下是有意义的:

print(f"X = {True:5s}")
Run Code Online (Sandbox Code Playgroud)

但是得到:

ValueError: Unknown format code 's' for object of type 'bool'
Run Code Online (Sandbox Code Playgroud)

我知道我可以强制进行字符串转换:

print(f"X = {str(True):5}")
Run Code Online (Sandbox Code Playgroud)

但是,不能使用格式说明符代码似乎很奇怪。是否有一些我缺少的语法变体?我读过PEP498,但它甚至从未提到布尔值。

python-3.x f-string

7
推荐指数
1
解决办法
1985
查看次数

防止 f 字符串将浮点数转换为科学记数法

我对 python 3.7.2 中 f-strings 的这种默认行为感到震惊:

>> number = 0.0000001
>> string = f"Number: {number}"
>> print(string)
Number: 1e-07
Run Code Online (Sandbox Code Playgroud)

我的预期是: Number: 0.0000001

这非常烦人,尤其是对于文件名的创建。如何禁用这种自动转换为科学记数法的功能?为什么首先启用它?

基本上与这个问题相反。

编辑:我想避免为浮动通过设置固定长度,{number:.8f}因为我的数字有不同的长度,我不想有任何尾随零。我想使用 f-strings 自动生成文件名,如下所示:

filename = f"number_{number:.10f}_other_number_{other_number:.10f}.json"
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个简单的修饰符,它可以禁用自动科学记数法,同时保持浮点数的原始精度。

python floating-point f-string

7
推荐指数
2
解决办法
599
查看次数

在 json 数据列表中使用 python f-string

我需要通过他们的 API 将数据推送到网站,并且我正在尝试找到一种使用 F 字符串传递数据列表中的变量的方法,但找不到方法。

到目前为止,这是我尝试过的:

today = datetime.date.today()
tomorrow = today + datetime.timedelta(days = 1)

#trying to pass *tomorrow* value with f-string below

data = f'[{"date": "{tomorrow}", "price": {"amount": 15100}}]'

response = requests.put('https://api.platform.io/calendar/28528204', headers=headers, data=data)
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现这个目标?

python json list f-string

7
推荐指数
1
解决办法
2万
查看次数

使用 F-string 显示浮点数

我真的很好奇为什么将这个“f”添加到我想要显示的数字的末尾时行为如此不同:

# CASE with f
float1 = 10.1444786

print(f"{float1:.4f}")
# print out: 10.1445

# CASE without f
print(f"{float1:.4}")
# print out: 10.14
Run Code Online (Sandbox Code Playgroud)

为什么在第二个例子中只显示了 2 个字符?

python floating-point f-string

7
推荐指数
1
解决办法
167
查看次数