1 #1.形参和实参 2 #对于以下例子来说: 3 #Name作为形参充当变量名,其实际的值作为实参 4 def Fun(Name): 5 print(Name) 6 Fun("HHZ") 7 8 #2.函数文档 9 #作为函数的一部分存储起来,其功能和注释一样 10 #可以通过 __doc__ 或者 help() 来访问 11 def Print_Fun(Name): 12 """ 13 print ( "Name" ) 14 :param Name: 15 :return: None 16 """ 17 print('"'+ Name + '"' ) 18 Print_Fun("Tom") 19 print( Print_Fun.__doc__ ) 20 help( Print_Fun ) 21 22 #3.默认参数 23 def say( name = "Tom" , words = "I Love Python"): 24 print( name + ' -> ' + words ) 25 say() 26 say("Jerry" , "I Love C++") 27 28 #4.收集参数 29 #把参数个数设为默认参数 30 #params称作可变参数 31 32 def Test( *params , n = 0 ): 33 print("%d个参数:"%n ) 34 for i in range(n): 35 print( params[i] , end=' ') 36 Test() 37 Test(1,2,4,n=3) 38 a = ['a','b','c'] 39 Test( *a , n = len(a) ) 40 41 #5.函数返回值 42 #通过以下例子可说明返回值为:None 43 #Python中所有的函数都是有返回值的 44 def Hello(): 45 print("Hello") 46 print( Hello() ) 47 48 #6.函数的作用域 49 #对于以下例子: 50 #a)在函数Discount中局部变量t不能在函数外访问 51 #其原理:Python在运行函数的时候,利用栈(Stack)进行存储,当执行完该函数后,函数中的所有数据都会被自动删除。 52 #所以函数外部无法访问到函数内部的局部变量 53 54 def Discount(price , rate ): 55 t = price * rate 56 return t 57 old_price = 100 58 rate = 0.8 59 new_price = Discount(old_price,rate) 60 print(new_price) 61 #报错 print(t) 62 63 #b)函数内能访问全局变量,但不能直接修改 64 #python中屏蔽机制(Shadowing)保护全局变量, 65 # 一旦函数内部试图修改全局变量, 66 # python就会在函数内部自动创建一个名字一模一样的局部变量, 67 # 这样结果不会影响到全局变量 68 # 若要修改则需要在函数内加global关键字 69 cnt = 5 70 def myFun(): 71 global cnt 72 cnt = 10 73 print(cnt) 74 myFun() 75 print(cnt) 76 77 #7.内嵌函数 78 #python是允许在函数中定义函数 79 #同时也受作用域的限制 80 #即外部不能直接调用函数里的函数 81 82 def fun1(): 83 def fun2(): 84 print("Fun2") 85 print("Fun1") 86 fun2() 87 88 fun1() 89 90 #8.闭包(closure) 91 #如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用, 92 #那么内部函数被认为是闭包(closure) 93 def funX(x): 94 def funY(y): 95 return x * y 96 return funY 97 98 #若内部函数向修改外部函数里的局部变量的值,使用nonlocal进行声明 99 def funX(): 100 x = 5 101 def funY(): 102 nonlocal x 103 x *= x 104 return x 105 return funY 106 107 print(funX()()) 108 109 #9.lambda表达式 110 #Python允许使用lambda关键字来创建匿名函数 111 #lambda使代码更加精简,不需要考虑命名问题,简化代码的可读性. 112 g = lambda x : 2 * x + 1 113 print( g(5) ) 114 115 g = lambda x , y : x + y 116 print( g(1,2) ) 117 118 #10.BIF -> filter() & map() 119 #filter( function or none , iterable ) 120 #第一个参数可以是函数,第二个可迭代数据里每一个元素将作为函数的参数进行计算 121 #返回的是filter类型 122 123 #例一,筛选为真的数 124 temp = filter( None , [ 1 , 0 , True , False ] ) 125 print( type(temp) ) 126 print( list(temp) ) 127 128 #例二,筛选奇数 129 def odd(x): 130 return x % 2 131 temp = filter( odd , range(10) ) 132 print( list(temp) ) 133 134 temp = filter( lambda x : x % 2 , range(10) ) 135 print( list(temp) ) 136 137 #map( function or none , iterable ) 138 #第一个参数可以是函数,第二个可迭代数据里每一个元素将作为函数的参数进行计算 139 #返回的是map类型 140 141 print( list( map( lambda x : x * 2 , range(10) ) ) ) 142 143 #11.递归函数 144 #限制递归函数为1e6层 145 import sys 146 sys.setrecursionlimit( 1000000 ) 147 148 #a)递归写阶乘函数 149 def fac(n): 150 if n == 1 : 151 return 1 152 else : 153 return n * fac( n - 1 ) 154 #number = int( input("输入一个数")) 155 number = 5 156 print( fac(number) ) 157 158 #b)汉诺塔问题 159 def hanoi( n , x , y , z ): 160 if n == 1 : 161 print( x , ' --> ' , z ) 162 else: 163 hanoi( n-1 , x , z , y ) 164 print( x , ' --> ' , z ) 165 hanoi( n-1 , y , x , z ) 166 n = 3 167 hanoi( n , 'A' , 'B' , 'C' )