# 创建函数
>>> def MyFirstFunction():
# code
# 调用函数
>>> MyFirstFunction()
# 当函数发生调用的时候,会从前方代码中寻找函数
# 函数的参数
>>> def MySecondFunction(num):
print(num + 'OK!')
# 调用
>>> MySecondFunction('很有精神!')
# 多个参数用,隔开
>>> def add(num1,num2):
print (num1 + num2)
# 函数的返回值,利用关键字return
>>> def add(num1,num2):
return (num1 + num2)
# 可变参数(收集参数):不确定函数到底需要多少参数,用*标示参数名
# Python会将可变参数打包成为一个元组
>>> def test(*params):
print("参数的长度是:",len(params));
print("第二个参数是:",params[1]);
>>> test(1,3,4,'ttt')
# 在Python中,只有函数(有返回值),没有过程(没有返回值)
>>> def Hello():
print('Hello!')
>>> temp = Hello()
Hello!
>>> temp
# 因为Hello()函数没有返回语句,所以这里不会打印任何语句
>>> print(temp)
None #即使Hello()函数没有返回语句,函数依然会返回一个None对象
>>> type(temp)
<class 'NoneType'>
# 内嵌函数:在函数内部创建一个新函数
>>> def fun1():
print('fun1 is running...')
def fun2():
print('fun2 is running...')
fun2()
>>> fun1():
fun1 is running...
fun2 is running...
# 因为fun2的整个作用域都在fun1内部,所以在fun1外部,是无法调用fun2的。
# 闭包(closure):在一个内部函数里,对外部作用域(非全局)的变量进行调用,该内部函数为闭包。
>>> def funx(x):
def funy(y):
return x * y #内部函数funy调用了外部函数funx的变量x
return funy
>>> i = funx(8)
>>> i
<function funx.<locals>.funy at 0x7fb81ca1dc10>
>>> type(i)
<class 'function'> # 说明i是一个函数的函数
>>> i(5) # 利用函数i,给fun2赋值
40 # 8 * 5 =40
>>> funx(8)(5)
40
# lamda表达式
# 利用lamda表达式可以创建匿名函数
>>> lambda x : x * 2 + 1
>>> lambda x , y : x + y
# 使用lambda表达式可以省略定义函数的过程,不需要考虑函数的命名,精简代码
# 过滤器filter()
>>> filter(None, [1,0,1])
<filter at 0x7fcd8cd47b80>
>>> list(filter(None,[0,1,True,False,333]))
[1, True, 333]
>>> list(filter(lambda x : x % 2 , range(10)))
[1, 3, 5, 7, 9]
# 映射函数map()
>>> list(map(lambda x : x * 2 , range(10)))
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 递归:可以简化代码,但是效率往往很低。
# 计算阶乘
>>> def fac(n):
return n * fac(n-1) if n != 0 else 1
>>> fac(5)
120
# 斐波那契数列
>>> def fabo(n):
return fabo(n-1) + fabo(n-2) if n >2 else 1
# 利用递归解决汉诺塔问题
def hanoi(n , x , y , z):
"""汉诺塔程序
Args:
n ([int]): 表示圆盘的数量
x ([str]): 代表第一个圆柱x
y ([str]): 代表第二个圆柱y
z ([str]): 达标第三个圆柱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) # 将y上的n-1个盘子移动到z上
n = int(input("Input Level:"))
hanoi(n , 'X' , 'Y' , 'Z')