Python 是解析型的语言,所以我首先需要一个 Python 解析器。我开始的时候傻乎乎地用 Ubuntu 执行了 apt-get install python, 结果它告诉我已经安装过了。

好吧,安装过就安装过了吧。开始的时候我们在交互模式 (interactive prompt) 下玩玩,方法是打开终端,输入 python 后按回车。之后,终端下就会出现提示符 >>> 。一开始我们可以把它当成表达式计算器来用,当我们输入一个数学表达式后,按下回车,这个表达式将被计算,计算结果将被顶格输出。

有趣的是,Python 还有复数的数据类型,表示的方法和我们在数学上表示的方法很类似,只不过 i 变成了 j, 也就是,在 Python 里的复数的虚部用后缀 j 表示,比如 1+2j 等。而且这个 j 是不区分大小写的。

复数还有另外一种表示方法,与 C++ 有些像,complex(0, 1) 即可。显然右边的那个参数是虚部。

现在应该来点代码了:

1
2
3
4
5
6
>>> 1+1
2
>>> complex(0,1)+2
(2+1j)
>>> 1j*1j
(-1+0j)

注意只有在提示符 >>> 之后的内容才是输入的,其它都是前一行输入对应的输出,此之谓交互模式……

然后,Python 的变量是不需要声明的,赋值的方式与 C 也是类似的,也可以使用“连等”的赋值方式。举例:

1
2
3
4
5
6
7
8
9
10
>>> a=b=5
>>> a+b
10
>>> a=3+5j
>>> a.real
3.0
>>> a.imag
5.0
>>> abs(a)
5.8309518948453007

注意上面的代码出现了复数的实部与虚部的获得,以及取模的操作。

Python 里有一个比较特殊的变量,叫做 _ . 这个下划线指的是上一次的输出结果,就好像我们中学计算器里的 ANS 变量似的。有个有趣的问题就是,如果你给这个下划线赋值,会发生什么。据说这会创建一个同名的局部变量,在某个作用域内覆盖这个特殊变量。相关代码:

1
2
3
4
5
6
7
8
>>> 8
8
>>> _*2
16
>>> _*2
32
>>> _*2
64

Python 只有字符串的概念,没有“字符”的概念。字符串可以用单引号或双引号引起,若是用单引号引用的字符串,字符串中的双引号无需使用转义符;双引号亦然。

1
2
3
4
5
6
7
8
9
10
>>> 'doesn\'t'
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said."
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'

字符串的行末可以加上反斜杠 (backslash) 来连接下一行,书上的原话是“这表示下一行是当前行的逻辑延续”。

1
2
3
4
5
6
7
>>> hello="Something\n\
...     Example"

>>> hello
'Something\n    Example'
>>> print hello
Something
    Example

两个字符串的字面常量写在一起可以将字符串连接,或者在两个字符串之间写上 + 号也可以连接,注意这里字面常量的意思。甚至可以让字符串乘以某个整数,意思是让这个字符串重复那么多遍。

1
2
3
4
5
6
>>> s="hello "
>>> t="python " 'world'
>>> s*2+t
'hello hello python world'
>>> 2*s+t
'hello hello python world'

有个概念叫做“raw string”,是在引号之前加上一个 r, 这种模式下会跳过字符串中的转义符:

1
2
3
4
5
6
7
>>> hello=r'Something\n\
...     "Example'

>>> hello
'Something\\n\\\n    "Example'
>>> print hello
Something\n\
    "Example

显然 raw string 是为了方便输入含有大量转义符或换行符的文字。当然这种方法也是有问题的,比如如果前引号使用了单引号,字符串中就不能包含“单独的单引号”,因为这种情况下单引号会被视为字符串结束的标志。如果你在前面加上了反斜杠,这个单引号居然就被认为是单引号了,但是此时那个反斜杠亦然存在,此之谓不能包含“单独的”单引号。代码:

1
2
3
4
5
6
>>> hello=r'Something\'s fun'
>>> print hello
Something\'s fun
>>> hello=r'
\''
>>> print hello
\'

然后,这下面的代码产生了错误:

1
2
3
4
5
>>> hello=r'\'
  File "<stdin>", line 1
    hello=r'
\'
             ^
SyntaxError: EOL while scanning string literal

可见 Python 在这些细节上还是不够严谨。不过话说回来,这种不用转义符的字符串,本来就没有绝对的严谨。
在通常情况下,我们连续出现三个单引号或者双引号的概率的确是很小的,这样可以实现字符串内部换行,并且单引号和双引号都无需转义,但是其它的东西还是被转义了,所以这种东西也不是 raw string, 但是又类似:

1
2
3
4
5
6
7
8
9
10
>>> hello="""
... This funny thing'\\'\n\
... '''\'\\'
... """

>>> print hello

This funny thing'\'
'
'''\'

>>>

本文最后,说说字符串长度的获取……

1
2
>>> len(hello)
28

原创文章,转载请注明来源:http://euyuil.com/2127/note-about-python-number-string/