python基础 函数局部变量 全局变量 递归

Posted flag_HW

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python基础 函数局部变量 全局变量 递归相关的知识,希望对你有一定的参考价值。

函数局部变量 全局变量 及其作用域

 1 #简单类型(int str等)变量的局部变量与全局变量及其作用域的关系
 2 name = "xxx" #第一级顶头定义的变量都称为全局变量,其作用域从变量定义的位置开始到此程序结束
 3 def Print_Name():
 4     print("name before change:", name)
 5 #由于name在此函数之前已经被定义为全局变量,此处函数读取变量name是读取的全局变量name “xxx”,函数内部就不能再定义其同名局部变量,否则无法区分变量为局部变量还是全局变量
 6 #   name = "yyy" #此语句放开以后会报错:IndentationError: unindent does not match any outer indentation level
 7 Print_Name()
 8 
 9 def Change_Name():
10     name = "yyy" #函数内部首先定义全局变量的同名局部变量,则整个函数内部操作的为局部变量(一个与全局变量同名的临时变量)
11     print("name after change is", name)
12 
13 Change_Name() # yyy实际输出的是局部变量的值
14 print("global name is", name) # xxx此处访问的是全局变量,因为此print语句不是在Change_Name内部。
15 
16 #函数内部需要强制对全局变量进行修改,使用global关键字
17 def Change_global_Name():
18     global name
19     print("name before change is :", name)
20     name = "yyy"
21 Change_global_Name() # xxx 修改前的全局变量
22 print("global name is :", name) # yyy此处由于函数内强制声明name为global变量,整个函数内部可以对global进行操作
23 
24 #复杂数据类型列表 集合 字典等复杂数据结构如果函数外部定义了函数里面是可以不用global声明也操作的是全局变量,没有局部变量一说了
25 names = [111, 222, 333]
26 def Change_Names():
27     names[0] = "444"
28     print("in function names :", names)
29 Change_Names() #in function names : [‘444‘, ‘222‘, ‘333‘]
30 print("global names :", names) #in function names : [‘444‘, ‘222‘, ‘333‘] 对于复杂的数据类型,函数内直接操作全局变量,不会再生成局部变量

递归

1 #函数内部可以调用其它函数,如果函数在内部调用自己就被称为递归函数
2 def Half_fun(n):
3     print(n)
4     if n < 2:
5         return n
6     Half_fun(n/2)
7 Half_fun(100)
8 #递归特性:1、必须有一个明确的结束条件 2、每次递归调用问题复杂度需要相比上次简化 3、递归会占用大量内存

 

 

以上是关于python基础 函数局部变量 全局变量 递归的主要内容,如果未能解决你的问题,请参考以下文章

Python学习——02-Python基础——4-变量与递归函数

第七章 python基础之函数,递归,内置函数

python3--函数(函数,全局变量和局部变量,递归函数)

python函数(全局变量,局部变量,作用域,递归函数,高阶函数,匿名函数)

python基础局部变量全局变量

python学习-day15:局部变量与全局变量嵌套函数递归