首页 文章

在Python中定义unicode变量

提问于
浏览
2

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

我有以下代码:

# coding:utf-8

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

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

总而言之,我也很难弄清楚PEP究竟要解决的实际问题以及我如何(以及在何处)利用所提出的解决方案 . 我已经阅读了相同的讨论,但他们没有提出我的问题的答案,而是对正确语法的解释:

2 回答

  • 2

    不,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,可以通过添加这样的 Headers 来改变它 .

  • 7

    我不认为这两篇文章是关于编码的,例如你的变量名称是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
    

    希望这能回答你的问题

    问候框架

相关问题