这节课会讲一些之前的课中未提到的关于Python的知识。
print选项
到目前为止,我们学到的使用打印的方法只有一种,print(),该方程在同一时间打印出多个东西,用空格将它们分开。事实上,打印还有一些关键字参数,关键字参数可以让你按照自己的需求来做一些变化。
- 若是想把空格分隔符换成其他的字符串
S,那么就增加sep = «S»。 - 若要将"行末"字符更换成字符串
S,那么就增加end = «S»。
下面的几个例子可以用来简单的向大家展示一下关键字参数。
这些关键字参数必须放在参数列表的最后,否则错误就会出现。如果两个都使用,它们可以以任何顺序排列。
有效变量/函数名
- 名字可以包括字母,数字,和下划线(
_)字符。 - 每一个名字的第一个字符必须是字母。
- Python能够区分大小写字母。
因此,my_3rd_int是一个合格的变量名字,但是3rd_int不是。
递减for循环& 其他的一些增量
我们曾经展示了for循环是如何通过递增数字重复的:
通常,必须要通过递减数字(最大到最小)写一个for循环。为了实现它,我们需要调用一个带有实参名为“步”(step)的range。
想一下,你会注意到range(0, 5)和range(0, 5, 1)是一样的:默认增量是1。不管哪一种形式,要注意range(start, stop, step)会运行到stop值之前停止。更多信息,可以查看Python manual。
同样,你可以使用string[x:y:2]来得到由第x, x+2, x+4, ...位字符组成的子链,或用string [ y: x: -1]来获取string (where y>x)中的一部分颠倒的字符串。
对于一个for循环,另一种实现递减范围的方法是reversed(range(x, y)),也就是从y-1递减到x。
编写更短的代码
Python里面有几个方式来编写更短的代码;我们在这里讲解几个。
![]() | 在这个网站上,我们不会常用这些方式,因为有时这些代码更难让人理解。 |
分配运算符
Python里面"x += 1"意味着"向x加一"。所以它等同于"x = x + 1",如下:
同样,也有整数除法(//=),模(%=),以及幂(**=)的运算符。
内联块
我们已经见过在缩进模块代码indented “block”后的一些语句:for, if, else, elif, while, and def,比如:
if x==y: «block» #indented, multiline如果
«block»只有一行,Python允许另一种代码:
if x==y: «block» #single line下面是一个例子:
但是有一个限制:有冒号的复合的代码块(if, for等)不能被用作内联块。比如,if 2>1: if 4>3: print()会导致句法错误。
多赋值
Python允许将两个赋值语句结合成一个:
现在我们可以只用一行解决swapping exercise!
比较链接
Python可以将几个比较合并成一个:
v1 c1 v2 c2 v3 ...,其中v是值,c是比较,与(v1 c1 v2) and (v2 c2 v3) and...一样。
[:]和range()的默认值
当使用子链运算符[:]时,你可以忽略开始或/和结尾(对于序列来说也是正确的,我们会在下一节课看到)。第一位索引的默认值是0(字符串的开始),最后一位索引的默认值是字符串的长度。同样,range(n)是range(0, n)的缩写。
None
有一些方程把返还一个值作为主效应,比如abs(x)。但是另一些方程的作用更有价
值,比如print ( ),仍然返回‘默认’值None:
在这里None是Python的一个特殊值,它作为一个通用的占位符。如果你下令type(None),你会发现None有它自己的类型,NoneType。让我们来看看什么是类型的类型:
在下一个练习中,我们会让你通过使用type 和print 来追踪一个很长的指令的结果。
print(type(print(type(type(print(print()))))))的结果由4行组成。进行调整,让其变成正确的顺序。- <class 'type'>
- <class 'NoneType'>
- «blank line»
- None
这是目前为止所有的贴士。你现在可以进行下一课的学习啦!




