首页 > 代码库 > Python全栈开发【基础三】

Python全栈开发【基础三】

Python全栈开发【基础三】

 

 

 本节内容:

  • 函数(全局与局部变量)
  • 递归
函数

 

一、定义和使用

函数最重要的是减少代码的重用性和增强代码可读性

1 def 函数名(参数):
2         
3     ...
4     函数体
5     ...
6     返回值

函数的定义主要有如下要点:

  • def:表示函数的关键字
  • 函数名:函数的名称,日后根据函数名调用函数
  • 函数体:函数中进行一系列的逻辑计算
  • 参数:为函数体提供数据
  • 返回值:当函数执行完毕后,可以给调用者返回数据。

总结使用函数的好处:

1.减少代码重用

2.保持一致性,易维护

3.可扩展性

返回值

 1 def 发送邮件():
 2         
 3     发送邮件的代码...
 4     
 5     if 发送成功:
 6 
 7         return True
 8 
 9     else:
10 
11         return False
12 
13 while True:
14         
15     # 每次执行发送邮件函数,都会将返回值自动赋值给result
16 
17     # 之后,可以根据result来写日志,或重发等操作
18 
19     
20     result = 发送邮件()
21 
22     if result == False:
23 
24         记录日志,邮件发送失败...

 

二、参数

1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

1 def calc(x,y)   #x,y即为形参
2     res = x**y
3     return res
4 
5 c = calc(2,3)  #2,3即为实参
6 print(c)

3.位置参数和关键字(标准调用:实参与形参位置一一对应;关键字调用:位置无需固定)

注:位置参数必须在关键字参数前面

 

 1 def calc(x,y):  
 2     res = x**y
 3     return res
 4  
 5 c = calc(y=2,x=3)  #关键字参数
 6 print(c)
 7 
 8 
 9 
10 def calc(x,y):  
11     res = x**y
12     return res
13  
14 c = calc(2,y=3)  #2为位置参数,y=3为关键字参数
15 print(c)  

 

4.默认参数

1 def calc(x,y=3):  #y=3为默认参数后面函数可不传值
2     res = x**y
3     return res
4 
5 c = calc(3) #可不传y值
6 print(c)

 

5.参数组

 1 ###############列表*args
 2 
 3 def func(*args):
 4     print args
 5 
 6 # 执行方式一
 7 func(11,22,33,55,66)
 8 
 9 # 执行方式二
10 li = [11,22,33,55,66]
11 func(*li)
12 
13 
14 ###############字典**kwargs
15 
16 def func(**kwargs):
17     print kwargs
18 
19 
20 # 执行方式一
21 func(name=ocean,age=18)
22 
23 # 执行方式二
24 li = {name:ocean, age:18, job:python}
25 func(**li)

 

三、 局部变量与全局变量

全局变量在函数里可以随便调用,但要修改就必须用 global 声明

 1 ##########全局变量与局部变量########
 2 NAME = "aa"
 3 
 4 def cn():
 5     global NAME
 6     NAME = "mm"
 7     print(">>>>",name)
 8 print(name)   #输出aa
 9 cn()          #>>>mm
10 print(name)   #mm
11 
12 
13 ##########
14 #本例重点是函数只有调用时才运行
15 name = "aa"   
16 #全局变量一般为大写用于区分局部变量,这里临时使用小写
17 def aa():
18     name = "bb"
19     def bb():
20         nonlocal name  
21         #nonlocal用来在函数或其他作用域中使用外层(非全局)变量
22         name = "cc"
23     bb()
24     print(name)
25 print(name)
26 aa()
27 print(name)    

 

递归

在函数内部,可以调用其他函数。如果一个函数在内部调用函数本身,这个函数就是递归函数。

递归特性:

1. 必须有一个明确的结束条件

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少

3. 递归效率不高,递归层次过多会导致栈溢出,浪费内存

 1 def calc(n):
 2     print(n)
 3     if int(n/2) ==0:
 4         return n
 5     return calc(int(n/2))
 6  
 7 calc(10)
 8  
 9 输出:
10 10
11 5
12 2
13 1

 

 

Python全栈开发【基础三】