自定义函数
1.创建
def function_name([arguments]): >>>def addMe2Me(x)
"optional documentation string" 'apply operation + to argument' 这里是指函数的注释,叫做DocString
function_suite return(x+x)
如果我们想要查看其他函数的DocString的话,可以通过print (fn._ _doc_ _)
2.调用
函数名加上函数运算符,一对小括号,括号之间是所有可选的参数,即使没有参数,小括号也不能省略,如果有参数,不写也会出错。
3.默认参数
函数的参数可以有一个默认值,如果提供有默认值,在函数定义中,默认参数以赋值语句的形式提供。
默认参数的值可以改变的
def f(x,y=true) 可以的 f(68) ok f(68,false)ok
def f(y=true,x) 不允许的
默认参数一般需要放置在参数列表的最后
4.关键字参数
关键字参数是让调用者通过使用参数名区分参数。允许改变参数列表中的参数顺序。
f(y=False,x=68) 但是f(y=False,68)会出错,因为已经改变了其位置,就必须每一个参数都要标明。
5.传递函数
函数可以像参数一样传递给另外一个函数
def addMe2Me(x):
def self(f,y):
print(f(y))
self(addMe2Me,2.2)
6.lambda函数
匿名函数:没有定义函数的过程,没有返回return,没有函数名,可以简单很多。
递归
1.斐波那契数列
0,1,1,2,3,5,8 第一项为0,第二项为1,后面每一项是前两项的和
递归必须要有边界条件,即停止递归的条件
递归的代码更简洁,更符合自然逻辑,更容易理解
#the nth Fibonacci number
def fib(n):
a,b=0,1
count=1
while count<n:
a,b=b,a+b
count=count+1
print(a)
采用递归
#the nth Fibonacci number
def fib(n):
if n==0 or n==1:
return n
else:
return fib(n-1)+fib(n-2)
2.汉诺塔游戏:
def hanoi(a,b,c,n):
if n==1:
print(a,'->',c)
else:
hanoi(a,c,b,n-1)#借助c,把a上的n-1个盘子移动到b上
print(a,'->',c)#把第n个盘子移动从a移动到c上
hanoi(b,a,c,n-1)#借助a把b上的n-1个盘子移动到c上
变量作用域
全局变量
局部变量
当全局变量和局部变量用同一个名字的时候,要遵循一个原则:内层屏蔽外层
如果在函数内部修改全局变量的值是不可以的,python中会报错,需要在函数内部中告知这一变量为全局变量,用到global语句,强调全局变量。