【问题标题】:Defining unicode variables in Python在 Python 中定义 unicode 变量
【发布时间】:2018-02-10 14:08:57
【问题描述】:

最近,我一直在阅读有关 Python 源代码编码的信息,尤其是 PEP 263PEP 3120

我有以下代码:

# coding:utf-8

s = 'abc∂´ƒ©'
ƒ = 'My name is'
ß = '˚ß˙ˆ†ˆ∆ ßå®åø©ˆ'
print('s =', s)
print('ƒ =', ƒ, 'ß =', ß)

此代码适用于 Python3,但在 Python2.7 中会生成 SyntaxError
我明白这可能与源代码编码无关。
所以,我想知道是否有办法在 Python2 中支持 Unicode 变量名。

总之,我也很难弄清楚 PEP 究竟要解决什么实际问题,以及我如何(以及在​​哪里)利用所提出的解决方案。我已经阅读了一些关于相同的讨论,但它们并没有给出我的问题的答案,而是对正确语法的解释:

【问题讨论】:

    标签: python python-2.7 unicode encoding python-3.5


    【解决方案1】:

    不,Python 2 仅支持 ASCII 名称。来自the language reference

    identifier ::=  (letter|”_”) (letter | digit | “_”)*
    letter     ::=  lowercase | uppercase
    lowercase  ::=  “a”…”z”
    uppercase  ::=  “A”…”Z”
    digit      ::=  “0”…”9”
    

    与更长的Python 3 version 相比,它确实具有完整的 Unicode 名称。

    PEP 解决的实际问题是,以前,如果超过 127 的字节出现在源文件中(比如在 unicode 字符串中),那么 Python 无法知道该字符是指哪个字符,因为它可能是任何字符。编码。现在默认解释为UTF-8,可以通过添加这样的header来改变。

    【讨论】:

    • 对不起,我无法理解“超过 127 的字节”的含义?你的意思是说一个字符的ASCII码超过127?
    • 是的。 ASCII 定义了字节 0 到 127 的含义。您将看到的几乎所有编码都将这些值编码为与 ASCII 相同。但是超过 127 的值不是 ASCII,通常是不同编码的完全不同的字符。
    • 这是经典文章:joelonsoftware.com/2003/10/08/….
    【解决方案2】:

    我不认为这两篇文章是关于编码的,例如你的变量名称是一个 Beta 符号,而是关于变量值的编码。

    因此,如果您将代码更改为此示例:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    a = 'abc?´ƒ©'
    b = 'My name is'
    c = '°ß?ˆ†ˆ? ßå®åø©ˆ'
    print 'a =', a # by the way, the brackets are only used in python 3, so they are also being displayed when running the code in python 2.7
    print 'b =', b, 'c =', c 
    

    希望能回答你的问题

    问候 框架

    【讨论】:

    • 这将是解决问题而不是解决方案。顺便说一句,我的问题是 Python2 和 Python3 之间的互操作性。
    • @KshitijSaraogi 你不能指望版本之间有完美的互操作性,有些事情你可以在 Python 3 中做而在 Python 2 中根本做不到。变量名的特殊字符就是其中之一东西。
    猜你喜欢
    • 2021-10-09
    • 2019-04-20
    • 2023-04-06
    • 2020-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多