4.1 if语句
if 条件:
语句
elif 条件:
语句
else:
语句
没有switch语句
4.2 for语句
for 项 in 序列:
语句
在迭代中修改序列是不安全的,可以使用切片复制需要修改的序列作为迭代的对象
4.3 range()函数
range(i) 生成包含0到i - 1的一个可迭代的对象
range(i, j) 生成包含i到j - 1的一个可迭代对象
range(i, j, k) 生成包含i到j - 1,步进为k的一个可迭代对象
4.4 break,continue,循环中的else
break,continue的作用与C中无异
for中的else当循环条件不满足的时候会被执行
4.5 pass语句
语法占位符
4.6 定义函数
def 函数名(参数):
语句
在函数的语句的第一行可选的有函数的文档字符串
函数调用回味函数的局部变量生成一个新的符号表,引用变量的时候遵守就近原则,
也就是先查找函数的局部符号表,然后是外层函数的符号表,再者是全局符号表,
最后是语言内置的符号表
非函数局部变量不能直接被赋值,但可以被引用。因为,在函数内,如果对一个新的
符号赋值,就会将这个符号添加到函数的局部符号表中,这样的话,引用的符号就不是
函数外部的符号了,所以也就不可能为外部符号赋值;另一方面,如果不是为符号赋值
而只是引用这个符号的话,python就会按照就近原则来查找这个符号,因此是可以引用
到外部的符号的。
在函数调用的时候,函数的局部变量表就会被创建,而且,函数的形参会被添加到局部
符号表中。
在A函数中定义B函数(没有错,可以在函数中定义函数,就像racket中一样)的时候,
会在A函数的符号表中添加上B函数的函数名这个符号,你可以将B函数赋值给其他的
变量,就像给其他变量赋值一个整数一样
当函数没有显式返回值或者return语句后没有值的时候,这个函数返回一个None,None
是一个python语言内置的符号
4.7 深入函数定义
4.7.1 默认参数值
可以为形参给定默认的值,就像在其他语言中一样,有默认值的形参后面不能出现没有
默认值的形参。py中形参默认值只被赋值一次,所以如果默认形参在函数中被改变了,
那么这种改变会在下一次调用中起作用。
4.7.2 关键字参数
函数可以通过‘形参=值’这种方式来调用。比如
def f(val):
print(val)
f(val = 2)
关键字参数必须在位置参数后面,位置参数就是根据位置确定值的形参。关键字参数
之间的顺序并不重要。
关键字参数的形式有点像字典的形式,所以如果参数中有字典参数的话就会将所有
非形参的关键字参数添加到字典参数中(字典参数使用前缀两个*来表示),比如:
def f(val, **kv):
for k, v in kv.items():
print(k, v)
f(i = 1, j = 2, val = 3, k = 4)
4.7.3 可变参数列表
当需要向函数传递任意数量的参数的时候,向函数传递一个序列类型变量,或者直接
将形参定义为可变参数列表的形参。将形参前缀上一个*,函数就会将这个形参视为一个
元组,可以向其传递任意数量的参数,比如:
def sum(*vals):
s = 0
for v in vals:
s += v
return s
print(sum(1, 2, 3, 4))
4.7.4 参数列表的分拆
如果一个函数调用需要用到某个列表里面的所有值,那么,可以使用分拆列表来将这些
值从列表中分拆出来,这只需要在列表变量前加上*,比如:
lst = [1, 10, 2]
print(range(*lst))
同样的,可以使用**来分拆字典
4.7.5 lambda形式
函数其实是一个lambda变量,就像在racket中一样,所以在函数中定义函数其实就是在
函数中定义一个lambda变量,然后使用某个符号引用这个lambda变量而已。例如:
def make_incrementor(n):
return lambda x: x + n
def add_2(x):
return make_incrementor(2)(x)
4.7.6 文档字符串
if 条件:
语句
elif 条件:
语句
else:
语句
没有switch语句
4.2 for语句
for 项 in 序列:
语句
在迭代中修改序列是不安全的,可以使用切片复制需要修改的序列作为迭代的对象
4.3 range()函数
range(i) 生成包含0到i - 1的一个可迭代的对象
range(i, j) 生成包含i到j - 1的一个可迭代对象
range(i, j, k) 生成包含i到j - 1,步进为k的一个可迭代对象
4.4 break,continue,循环中的else
break,continue的作用与C中无异
for中的else当循环条件不满足的时候会被执行
4.5 pass语句
语法占位符
4.6 定义函数
def 函数名(参数):
语句
在函数的语句的第一行可选的有函数的文档字符串
函数调用回味函数的局部变量生成一个新的符号表,引用变量的时候遵守就近原则,
也就是先查找函数的局部符号表,然后是外层函数的符号表,再者是全局符号表,
最后是语言内置的符号表
非函数局部变量不能直接被赋值,但可以被引用。因为,在函数内,如果对一个新的
符号赋值,就会将这个符号添加到函数的局部符号表中,这样的话,引用的符号就不是
函数外部的符号了,所以也就不可能为外部符号赋值;另一方面,如果不是为符号赋值
而只是引用这个符号的话,python就会按照就近原则来查找这个符号,因此是可以引用
到外部的符号的。
在函数调用的时候,函数的局部变量表就会被创建,而且,函数的形参会被添加到局部
符号表中。
在A函数中定义B函数(没有错,可以在函数中定义函数,就像racket中一样)的时候,
会在A函数的符号表中添加上B函数的函数名这个符号,你可以将B函数赋值给其他的
变量,就像给其他变量赋值一个整数一样
当函数没有显式返回值或者return语句后没有值的时候,这个函数返回一个None,None
是一个python语言内置的符号
4.7 深入函数定义
4.7.1 默认参数值
可以为形参给定默认的值,就像在其他语言中一样,有默认值的形参后面不能出现没有
默认值的形参。py中形参默认值只被赋值一次,所以如果默认形参在函数中被改变了,
那么这种改变会在下一次调用中起作用。
4.7.2 关键字参数
函数可以通过‘形参=值’这种方式来调用。比如
def f(val):
print(val)
f(val = 2)
关键字参数必须在位置参数后面,位置参数就是根据位置确定值的形参。关键字参数
之间的顺序并不重要。
关键字参数的形式有点像字典的形式,所以如果参数中有字典参数的话就会将所有
非形参的关键字参数添加到字典参数中(字典参数使用前缀两个*来表示),比如:
def f(val, **kv):
for k, v in kv.items():
print(k, v)
f(i = 1, j = 2, val = 3, k = 4)
4.7.3 可变参数列表
当需要向函数传递任意数量的参数的时候,向函数传递一个序列类型变量,或者直接
将形参定义为可变参数列表的形参。将形参前缀上一个*,函数就会将这个形参视为一个
元组,可以向其传递任意数量的参数,比如:
def sum(*vals):
s = 0
for v in vals:
s += v
return s
print(sum(1, 2, 3, 4))
4.7.4 参数列表的分拆
如果一个函数调用需要用到某个列表里面的所有值,那么,可以使用分拆列表来将这些
值从列表中分拆出来,这只需要在列表变量前加上*,比如:
lst = [1, 10, 2]
print(range(*lst))
同样的,可以使用**来分拆字典
4.7.5 lambda形式
函数其实是一个lambda变量,就像在racket中一样,所以在函数中定义函数其实就是在
函数中定义一个lambda变量,然后使用某个符号引用这个lambda变量而已。例如:
def make_incrementor(n):
return lambda x: x + n
def add_2(x):
return make_incrementor(2)(x)
4.7.6 文档字符串
4.7.7 函数注解
py文档http://www.pythondoc.com/pythontutorial3/controlflow.html