认识函数
help() 查看内部函数的帮助
import this 查看python之禅
特性:
1.功能性
2.隐藏细节
3.避免编写重复的代码
次要特性:组织代码 -> 面向对象更合理
函数的定义及运行特点:
函数的基本结构
def func(**param):
pass
- 参数列表可以没有
2.return 用来返回函数返回值 - 函数需要调用才会起作用
- 函数调用需要在定义之后
函数的取值根据顺序来决定,主要是位置参数、还有可变参数,命名关键词参数,关键词参数。
python设置最大递归层数
import sys
sys.setrecursionlimit(10000)
循环实现的fab数列,递归也能实现,而且更简单。
廖雪峰--递归与尾递归--汗诺塔
# 递归函数 -- 别人写的汗诺塔
class Tower(object):
def __init__(self):
self.counter = 0
def hanoi(self, n, org, aux, dst):
if n == 1:
self.counter += 1
print('{0}->{1}'.format(org, dst))
else:
self.hanoi(n - 1, org, dst, aux)
self.hanoi(1, org, aux, dst)
self.hanoi(n - 1, aux, org, dst)
def homework(*args):
tower = Tower()
print('移动步骤如下:')
tower.hanoi(*args)
print('总共移动次数为: {0}'.format(tower.counter))
homework(100,'a','b','c') # 100基本算不出来,10还差不多
如何让函数返回多个结果
def damage(skill1, skill2):
return skill1*3, skill2*3 # 默认返回值为tuple
print(damage(1, 2))
#获取返回结果的正确方法
# 序列解包
skill1_damage, skill2_damage = damage(1, 2)
#不推荐通过索引获取,会造成可读性变差
序列解包和链式调用
d = 1, 2, 3 序列
a, b, c = d 类似这种的赋值形式就是序列解包,解包的变量个数要和序列数相等,否则会报错。
a = b = c = [1, 2] 链式调用,会同id。
必须参数与关键字参数
必须参数:位置参数,必须要传入。
形参、实参的概念。
通过关键字参数没必要通过位置参数顺序调用函数。指定参数给哪个形参。
必须参数和关键字参数的区别主要在调用上,定义上没区别。
默认参数
从而使参数不是必须输入的。