【python】函数

  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' )
函数-全部调试代码
原文地址:https://www.cnblogs.com/Osea/p/12191803.html