不带参数的函数:
def MyFunction(): print ("这是我创建的第一个函数") print ("我表示很鸡冻~") MyFunction() >>>这是我创建的第一个函数 >>>我表示很鸡冻~带参数的函数:
def add(figure1,figure2): print (figure1+figure2) add(1,2) >>>3带返回值的参数:
def add(figure1,figure2): return (figure1+figure2) sum=add(1,2) print(sum) >>>3定义函数时括号里的参数是形参,调用函数时括号里的参数是实参。
定义函数时可以给形参赋初值,这样调用时即使无参数也不会报错。
当定义的一个函数不知道它有多少个参数时,可以使用收集参数,只需将形参前加*即可。例如:
def test(*params): print("参数的长度是:",len(params)) print("第一个参数是:",params[0]) test('我是第一个参数',3.14,1,2,3,4,5) >>>参数的长度是: 7 >>>第一个参数是: 我是第一个参数在函数里定义的变量为局部变量,不要试图在函数里修改全局变量,因为python会屏蔽它,只是创建了一个名字与全局变量相同的局部变量,只可访问。例如:
count = 5 def test(): count = 10 print(count) test() print(count) >>>10 >>>5输出结果是10,5而不是10,10,若想在函数中修改全局变量怎么办呢?只需在函数中用global修饰全局变量即可。
count = 5 def test(): global count count = 10 print(count) test() print(count) >>>10 >>>10python支持函数的嵌套,被嵌套的函数只能在嵌套它的函数中被调用。
def fun1(): print("fun1被调用") def fun2(): print("fun2被调用") fun2() fun1() >>>fun1被调用 >>>fun2被调用如果在一个内部函数里,对外部作用域(但不是全局作用域)的变量进行了引用,那么内部函数就认为是闭包。
def funX(x): def funY(y): return (x*y) return funY print(funX(8)(5)) >>>40Python写一些脚本函数时,使用lambda可以省略函数的定义过程,也不用考虑命名的问题,使程序更加简洁。:左边是参数,右边是返回值。
add = lambda x,y : x + y print(add(3,4)) >>>7filter(function,iterable):过滤函数,过滤的内容为iterable,过滤条件是使function返回值为0的参数。例:
print(list(filter(lambda x : x % 2,range(1,10)))) >>>[1, 3, 5, 7, 9]map(function,iterable):将iterable的每个元素作为function的参数进行运算。例:
print(list(map(lambda x : x * 2,range(1,10)))) >>>[2, 4, 6, 8, 10, 12, 14, 16, 18]递归的算法用条件和循环都能搞定,目的是使得程序变得简洁易懂,但是也扩大了内存的消耗。例如著名的斐波那契数列问题,用普通的算法如下,可以运算到100都没有问题:
def Fibonacci(n): if n == 1 or n == 2: return 1 else: return Fibonacci(n-1)+Fibonacci(n-2) n = int(input("请输入一个正整数")) result = Fibonacci(n) print("%d的斐波那契数列是%d"%(n,result)) >>>请输入一个正整数40 >>>40的斐波那契数列是102334155用递归的方法:本人的电脑最多只能到40,而且速度非常慢:
def F(n): n1 = n2 =n3 =1 while((n-2)> 0): n3 = n1 + n2 n1 = n2 n2 = n3 n -= 1 return n3 n = int(input("请输入一个正整数")) result = F(n) print("%d的斐波那契数列是%d"%(n,result)) >>>请输入一个正整数100 >>>100的斐波那契数列是354224848179261915075下面讲一个特别有趣的汉诺塔问题,用递归的方法实现,设有三根柱子为‘X’,‘Y’,‘Z’,汉诺塔层数为n。
def Hanoi(n,x,y,z): if n == 1: print(x," -> ",z) else: Hanoi(n-1,x,z,y)#将n-1层从x移动到y print(x," -> ",z)#将最底层从x移动到z Hanoi(n-1,y,x,z)#将n-1层从y移动到z n = int(input("输入汉诺塔的层数")) Hanoi(n,'X','Y','Z')