【发布时间】:2023-02-21 23:55:44
【问题描述】:
我想像这样在 Python 中循环 Unicode-Characters:
hex_list = "012346789abcdef"
for _1 in hex_list:
for _2 in hex_list:
for _3 in hex_list:
for _4 in hex_list:
my_char = r"\u" + _1 + _2 + _3 + _4
print(my_char)
正如预期的那样打印出来:
\u0000
\u0001
...
\uffff
然后我尝试更改上面的代码以不打印 Unicode 而是打印相应的字符:
hex_list = "012346789abcdef"
for _1 in hex_list:
for _2 in hex_list:
for _3 in hex_list:
for _4 in hex_list:
my_char = r"\u" + _1 + _2 + _3 + _4
eval("print(my_char)")
但这输出与之前的代码相同。
hex_list = "012346789abcdef"
for _1 in hex_list:
for _2 in hex_list:
for _3 in hex_list:
for _4 in hex_list:
eval("print(" + r"\u" + f"{_1}{_2}{_3}{_4})")
这样的事情会引发以下错误消息:
eval("print(" + r"\u" + f"{_1}{_2}{_3}{_4})")
File "<string>", line 1
print(\u0000)
^
SyntaxError: unexpected character after line continuation character
是什么让这段代码按预期工作?
【问题讨论】:
-
摆弄
evaling 字符串文字闻起来像XY problem。为什么不用chr(codepoint)? -
@Brian 要清楚,
codepoint需要是一个整数,可以用int(f"{_1}{_2}{_3}{_4})", 16)得到 -
Python 字符串是 Unicode。所有字符都是 Unicode 字符。 Unicode 不是某种转义序列,它是一种将字符映射到字节的方法。
-
另外,请注意
eval("print(my_char)")与print(my_char)相同,它只是打印变量my_char的字符串内容 -
鉴于事实Python 字符串是 Unicode,您可以使用 chr 将 Unicode 代码点转换为具有该字符的字符串,例如
print(chr(1081))。您可以从0迭代到您想要生成字符的任何数字
标签: python loops unicode backslash