语句
print语句
print语句可以打印多个表达式,只需要用逗号隔开。
>>> print(1,2,3)
1 2 3
import语句
import somemodule
对于模块somemodule的某个函数somefunction,可以使用somemodule.somefunction来调用,或者:
from somemodule import somefunction
就可以直接使用somefunction。
from somemodule import * #此句表示导入所有功能。
也可以给导入的模块或者函数提供别名,只用可以直接使用a来代替amodule或者afunction:
import amodule as a
from somemodule import afunction as a
赋值语句
序列解包
多个赋值操作可以同时进行,并且用它交换两个或多个变量也是没问题的。
>>> x = 1
>>> y = 2
>>> x, y = y, x
>>> x
2
>>> y
1
这实际上是一个序列解包或者递归解包问题,将多个值的序列解开,然后放到变量的序列中。
用这个方法可以同时获取字典中的任意键—值对。
>>> scoundrel = {'name': 'Robin', 'addr': 'NewYork'}
>>> key, value = scoundrel.popitem()
>>> key
'addr'
>>> value
'NewYork'
链式赋值
将同一个值赋值给多个变量的捷径,
x = y = somefunction()
#或者
y = somefunction()
x = y
增量赋值
>>> x = 2
>>> x += 1
>>> x *= 2
>>> x
6
>>> fnord = 'foo'
>>> fnord += 'bar'
>>> fnord *= 2
>>> fnord
'foobarfoobar'
语句块
冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的(缩进量相同),当回退到和已经闭合的块一样的缩进量时,就标识当前块已经结束了。
条件语句
布尔型:真、假。“标准的”布尔值为True和False,它的返回值也可以是1或者0.
广义上,所有值都可以作为布尔值,如标准值False和None、所有类型的数字0、空序列以及空的字典都为假,而其他的一切都被解释为真。
>>> bool('Hello')
True
>>> bool(42)
True
>>> bool(0)
False
>>> bool([])
False
if语句:如果条件判定为真,那么后面的语句块执行,否则不执行。
else语句:如果if判定为假,则跳过if后面的语句块,而执行else后的语句块。
elif子句:相当于else if的简写。
比较运算符:对于相对大小的任意两个对象x和y都可以使用比较运算符比较,并且都会得到一个布尔值结果,但是只有在x和y是相同或者近似类型的对象时,比较才有意义。比较不兼容类型的对象是不支持的。
相等运算符和同一性运算符:相等运算符(==)来比较两个东西是否相等。而同一性运算符(is)来比较两个东西是否是同一个。
>>> x = y = [1, 2, 3]
>>> z = [1, 2, 3]
>>> x == y
True
>>> x == z
True
>>> x is y
True
>>> x is z
False
成员资格运算符:成员资格运算符(in)也可以像其他比较运算符一样在条件语句中使用。
字符串和序列可以按照字母顺序排列进行比较。
>>> "alpha" < "beta"
True
同样的,其他序列也可以使用同样的方式进行比较。
>>> [2, [1, 4]] < [2, [1, 5]]
True
布尔运算符:也就是逻辑运算符,如and、or和not,采用短路逻辑。
x and y:如果x为假,返回x的值,否则返回y 的值。
x or y:如果x为真,返回x的值,否则返回y的值。
这样做避免了无用的执行代码。
a if b else c
# 如果b为真,返回a,否则返回c。
断言语句:assert用来确保某些条件必须为真,否则程序直接崩溃。可以在后面添加字符串来解释断言。
>>> age = -1
>>> assert 0 < age < 100, 'The age must be realistic'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: The age must be realistic
循环语句
while循环,while后条件为真时,执行之后的语句块。直到while后的条件为假。
for循环,通过按次序迭代的循环。
for num in range(0,5):
print(num)
运行结果:
1
2
3
4
5
也可以使用for循环来遍历字典中的所有键。
d = {'x':1, 'y':2, 'z':3}
for key, value in d.items():
print(key, 'corresponds to', value)
运行结果:
z corresponds to 3
y corresponds to 2
x corresponds to 1
zip函数,可以用来进行并行迭代,把两个序列“压缩”在一起,然后返回一个元组的列表。然后利用for循环来进行并行迭代。
names = ['anne', 'beth', 'george', 'damon']
ages = [12, 45, 32, 102]
zip(names, ages)
输出:
[('anne', 12), ('beth', 45), ('george', 32), ('demon', 102)]
for name, age in zip(names, ages):
print(name, 'is', age, 'years old')
输出:
anne is 12 years old
beth is 45 years old
george is 32 years old
damon is 102 years old
跳出循环
break可以结束循环。
continue可以结束当前迭代,而进入下一个迭代。
while True/break语句:while True实现了一个永远不会自己停止的循环,在循环内部使用 if break的条件语句,在满足if条件时调用break,就可以终止循环。
如果for循环中有break语句,可以在for循环后增加一个else子句,仅在没有调用break时执行。
from math import sqrt
for n in range(99,80,-1):
root = sqrt(n)
if root == int(root):
print(n)
break
else:
print("Didn't find it!")
输出:
81
如果把80改成81后,则会输出”Didn’t find it!”,因为循环的范围不包括81了。
列表推导式
>>> [x*x for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [y for y in range(10) if y%3 == 0]
[0, 3, 6, 9]
pass语句:仅代表占位语句,一般在调试代码时使用。
del语句:删除一个对象的引用,并移除那个名字本身,正是因为删除的只是引用和名称,因此当x和y指向同一个列表时,使用del删除x时,y不会受到影响。
eval函数对写在字符串中的表达式进行计算并且返回结果。
>>> x = 2
>>> y = 3
>>> 'x*y'
'x*y'
>>> eval('x*y')
6