📄 node5.html
字号:
<code>abs(<var>z</var>)</code> 来得到 <code>z</code> 的magnitude(以浮点数表示),或是如上所述用<code>z.real</code> 直接得到其实数部分。 </p> <p> </p> <dl> <dd><pre class="verbatim">>>> a=1.5+0.5j<br>>>> float(a)<br>Traceback (innermost last):<br> File "<stdin>", line 1, in ?<br>TypeError: can't convert complex to float; use e.g. abs(z)<br>>>> a.real<br>1.5<br>>>> abs(a)<br>1.58113883008<br></pre> </dd> </dl> <p> 在互动模式之下,最后一个印出来的expression的值会储存在一个特殊变数 "<code>_</code>" 之中。这表示,当你用Python的直译器来当作计算机用的时候,想要连续做运算其实是方便许多的。如下例: </p> <p> </p> <dl> <dd><pre class="verbatim">>>> tax = 17.5 / 100<br>>>> price = 3.50<br>>>> price * tax<br>0.61249999999999993<br>>>> price + _<br>4.1124999999999998<br>>>> round(_, 2)<br>4.1100000000000003<br></pre> </dd> </dl> <p> 对于使用者来说, "<code>_</code>" 这个变数是一个唯读的变数。你没有办法设定一个值给它,当你这样做的时候,事实上你是重新创造一个同名的变数,但是跟之前系统内建的"<code>_</code>" 这个变数是一点关系也没有的了。 </p> <p> </p> <h2> <br> 3.1.2 字串 </h2> <p> 除了数字之外, Python也有能力处理字串(string)。字串在Python中有很多种表达方式,它可以放在双括号””之中,也可以放在单括号’’里面: </p> <p> </p> <dl> <dd><pre class="verbatim">>>> 'spam eggs'<br>'spam eggs'<br>>>> 'doesn\'t'<br>"doesn't"<br>>>> "doesn't"<br>"doesn't"<br>>>> '"Yes," he said.'<br>'"Yes," he said.'<br>>>> "\"Yes,\" he said."<br>'"Yes," he said.'<br>>>> '"Isn\'t," she said.'<br>'"Isn\'t," she said.'<br></pre> </dd> </dl> <p> 字串常数(string literals)是可以跨越多行的,其表示方法有很多。如果要换行的话可以用”\”符号来表示之。如下例: </p> <p> </p> <dl> <dd><pre class="verbatim">hello = "This is a rather long string containing\n\<br>several lines of text just as you would do in C.\n\<br> Note that whitespace at the beginning of the line is\<br> significant.\n"<br>print hello<br></pre> </dd> </dl> <p> 这个例子会印出以下的结果: </p> <p> </p> <dl> <dd><pre class="verbatim">This is a rather long string containing<br>several lines of text just as you would do in C.<br> Note that whitespace at the beginning of the line is significant.<br></pre> </dd> </dl> <p> 你也可以用成对的三个单引号( <code>"""</code> ) 或双引号 ( <code>'''</code> ) 来表示字串。在此情况下你所打入的ENTER就会直接被解读为换行符号而不需要再用\n了。 </p> <p> </p> <dl> <dd><pre class="verbatim">print """<br>Usage: thingy [OPTIONS] <br> -h Display this usage message<br> -H hostname Hostname to connect to<br>"""<br></pre> </dd> </dl> <p> 这个例子会印出以下的结果: </p> <p> </p> <dl> <dd><pre class="verbatim">Usage: thingy [OPTIONS] <br> -h Display this usage message<br> -H hostname Hostname to connect to<br></pre> </dd> </dl> <p> 如果你打入的expression是字串的运算,运算的结果的同样的会由直译器显示出来,而且显示的方式跟你直接打入字串常数(stringliterals)是一样的:会在引号之中,所有有escape character “\”表示的字元都会依样的显示出来。如果字串本身包含有单引号,整个字串就会用双引号括起来,要不然就会只用单引号来把整个字串括起来。(如果你使用 <tt class="keyword">print</tt> 这个叙述(statement)来印出字串的话,萤幕的输出就不会有引号出现,而且字串中的escapecharacter (\”表示的特殊字元) 都会显示出其所代表的意义来。) </p> <p> 字串可以用 <code>+</code> 这个运算元来相加 (连接起来),或是用 <code>*</code> 这个运算元来重复之。请看例子: </p> <p> </p> <dl> <dd><pre class="verbatim">>>> word = 'Help' + 'A'<br>>>> word<br>'HelpA'<br>>>> '<' + word*5 + '>'<br>'<HelpAHelpAHelpAHelpAHelpA>'<br></pre> </dd> </dl> <p> 如果你把两个字串常数放在一起,它们自动就会相加起来。所以,上面的例子的第一行也可以写作"<tt class="samp">word = 'Help' 'A'</tt>" 。不过这个方法只适用于两个字串常数的相加,其他情况就不适合了。请看例子: </p> <p> </p> <dl> <dd><pre class="verbatim">>>> import string<br>>>> 'str' 'ing' # <- This is ok<br>'string'<br>>>> string.strip('str') + 'ing' # <- This is ok<br>'string'<br>>>> string.strip('str') 'ing' # <- This is invalid<br> File "<stdin>", line 1<br> string.strip('str') 'ing'<br> ^<br>SyntaxError: invalid syntax<br></pre> </dd> </dl> <p> 如同在C语言一样,字串是有标记(subscript(index))的,第一个字元的标记(subscript(index))就是0。在Python中没有另外一个字元character资料型态,一个字元就是一个长度为1的字串。就像是在Icon语言一样,字串是可以用其subscript(index)来切出( <i>slice notation</i> )其中的一部份的,其语法为"<tt class="samp" string[subscprt:subscprt]</tt="">"。 </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> word[4]<br>'A'<br>>>> word[0:2]<br>'He'<br>>>> word[2:4]<br>'lp'<br></tt></pre> </dd> </dl> <p> <tt class="samp" string[subscprt:subscprt]</tt="">与C不同的是,Python的字串是不可改变的(immutable),如果你想要改变其中的一个字元或是一个部份(slice),你会得到一个错误的信息: </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> word[0] = 'x'<br>Traceback (innermost last):<br> File "<stdin>", line 1, in ?<br>TypeError: object doesn't support item assignment<br>>>> word[:-1] = 'Splat'<br>Traceback (innermost last):<br> File "<stdin>", line 1, in ?<br>TypeError: object doesn't support slice assignment<br></tt></pre> </dd> </dl> <p> <tt class="samp" string[subscprt:subscprt]</tt="">但是你可以任意使用一个字串的一个字元或是一个部份(slice)来创造出另一个字串,这是完全可行的: </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> 'x' + word[1:]<br>'xelpA'<br>>>> 'Splat' + word[-1:]<br>'SplatA'<br></tt></pre> </dd> </dl> <p> <tt class="samp" string[subscprt:subscprt]</tt="">当你用字串切片(string slice)的语法时,可以使用其预定(default)的subscript(index)值,这是很方便的。第一个subscript(index)的预设值是0,第二个subscript(index)的预设值则是这个字串的整体长度。 </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> word[:2] # The first two characters<br>'He'<br>>>> word[2:] # All but the first two characters<br>'lpA'<br></tt></pre> </dd> </dl> <p> <tt class="samp" string[subscprt:subscprt]</tt="">所以, <code>s[:i] + s[i:]</code> 会恰好等于 <code>s</code> 。你可以想一想为什么: </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> word[:2] + word[2:]<br>'HelpA'<br>>>> word[:3] + word[3:]<br>'HelpA'<br></tt></pre> </dd> </dl> <p> <tt class="samp" string[subscprt:subscprt]</tt="">如果你用一些奇怪的index来切割字串,Python直译器也都处理的很好:如果第二个index太大的话就自动代换为字串的长度,如果第二个index比第一个index还要小的话就自动传回一个空字串。 </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> word[1:100]<br>'elpA'<br>>>> word[10:]<br>''<br>>>> word[2:1]<br>''<br></tt></pre> </dd> </dl> <p> <tt class="samp" string[subscprt:subscprt]</tt="">字串的index甚至可以是负数,若是负数的话,就必须从字串的尾巴开始算起。如下例: </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> word[-1] # The last character<br>'A'<br>>>> word[-2] # The last-but-one character<br>'p'<br>>>> word[-2:] # The last two characters<br>'pA'<br>>>> word[:-2] # All but the last two characters<br>'Hel'<br></tt></pre> </dd> </dl> <p> <tt class="samp" string[subscprt:subscprt]</tt="">但是 -0 事实上是等于 0 ,所以不会从尾巴开始算起。 </tt></p> <p> </p> <dl> <dd><pre class="verbatim"><tt class="samp" string[subscprt:subscprt]</tt="">>>> word[-0] # (since -0 equals 0)<br>'H'<br></tt></pre>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -