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='\n')
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' )