12: 贴士

这节课会讲一些之前的课中未提到的关于Python的知识。

print选项

到目前为止,我们学到的使用打印的方法只有一种,print(),该方程在同一时间打印出多个东西,用空格将它们分开。事实上,打印还有一些关键字参数,关键字参数可以让你按照自己的需求来做一些变化。

  • 若是想把空格分隔符换成其他的字符串S,那么就增加sep = «S»
  • 若要将"行末"字符更换成字符串S,那么就增加end = «S»

下面的几个例子可以用来简单的向大家展示一下关键字参数。

示例
sepend的例子。观察每一个print的结果。

这些关键字参数必须放在参数列表的最后,否则错误就会出现。如果两个都使用,它们可以以任何顺序排列。

编程练习: Alphabet Aerobics
用我们刚刚讲解过的知识,调试下面的程序,在同一行输出大写字母。

有效变量/函数名

  • 名字可以包括字母,数字,和下划线(_)字符。
  • 每一个名字的第一个字符必须是字母。
  • Python能够区分大小写字母。

因此,my_3rd_int是一个合格的变量名字,但是3rd_int不是。

示例
区分大小写。

递减for循环& 其他的一些增量

我们曾经展示了for循环是如何通过递增数字重复的:

示例
for循环

通常,必须要通过递减数字(最大到最小)写一个for循环。为了实现它,我们需要调用一个带有实参名为“步”(step)的range。

示例
range里面步为负

想一下,你会注意到range(0, 5)range(0, 5, 1)是一样的:默认增量是1。不管哪一种形式,要注意range(start, stop, step)会运行到stop之前停止。更多信息,可以查看Python manual

编程练习: 幸运七
通过使用for循环编写一个程序,其中步为10。该程序按递增顺序打印出所有个位是7的两位数。

同样,你可以使用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",如下:

示例
Examples of +=, -=, *=, /=

同样,也有整数除法(//=),模(%=),以及幂(**=)的运算符。

内联块

我们已经见过在缩进模块代码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)的缩写。

示例
使用[:]range()的默认值

None

有一些方程把返还一个值作为主效应,比如abs(x)。但是另一些方程的作用更有价
值,比如print ( ),仍然返回‘默认’值None:

示例
print的价值

在这里None是Python的一个特殊值,它作为一个通用的占位符。如果你下令type(None),你会发现None有它自己的类型,NoneType。让我们来看看什么是类型的类型:

示例
类型的类型

在下一个练习中,我们会让你通过使用type 和print 来追踪一个很长的指令的结果。

综合练习: One None
print(type(print(type(type(print(print()))))))的结果由4行组成。进行调整,让其变成正确的顺序。
  • <class 'NoneType'>
  • «blank line»
  • None
  • <class 'type'>
正确!

这是目前为止所有的贴士。你现在可以进行下一课的学习啦!