函数
定义
def 函数名(参数列表):
pass#占位符
类型
数据类型转换:int()等。另外可以把函数名赋值给一个变量
数据类型检查用isinstance(变量, (类型列表))
,返回布尔值
函数可以无返回值,Python自动返回None;也可以返回多个值,但实际上Python是把它们放在了一个tuple中返回的
参数
默认参数要指向不变对象
可变参数*args
。调用函数的时候,参数可以传任意个。也可以直接传入**args,接收的是tuple
关键字参数**kw
,接收的是dict,可以用关键字参数扩展函数功能
命名关键字参数使用def f(a, b, *, key1, key2 = value2)
传递,其中*之后的参数都是命名关键字参数,调用时必须传入参数名。这样可以限制关键字参数的名字
递归
这里主要记录一个尾递归优化的概念,主要是为了防止栈溢出,在函数return的时候不使用表达式而是调用自身,其实就和循环类似了。不过大多数编程语言没有针对尾递归做优化,Python也是,因此将递归改成尾递归仍然会溢出……
最后给出该教程中递归练习的解答,经典的汉诺塔问题
def move(n,a,b,c):#如果要将A上的n个盘子移动到C
if n>0:
move(n-1,a,c,b)#则需要首先将n-1个盘子从A移动到B
print('%s --> %s' %(a, c))#上一步完成之后才能把A上第n个盘子移动到C
move(n-1,b,a,c)#然后将n-1个盘子从B移动到C。完成