变量:
局部变量:在子程序中定义的变量
全局变量:在程序一开始定义的变量
全局变量作用域是整个程序
局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
所以我们写程序时,用大写表示全局变量,用小写表示局部变量
如果函数的内容无global关键字:
1.有声明局部变量
NAME="小仙女" def test1(): NAME="小可爱" print("我是",NAME) test1()
2.无声明局部变量
NAME="小仙女" def test1(): print("我是",NAME) test1()
如果函数的内容有global关键字
1.有声明局部变量
NAME="小仙女" def test1(): global NAME NAME="小可爱" print("我是",NAME) test1()
2.无声明局部变量
NAME="小仙女" def test1(): global NAME print("我是",NAME) test1()
前向引用:函数即变量
正确的例子:
def action(): print ('in the action') logger() def logger(): print ('in the logger') action()
def logger(): print ('in the logger') def action(): print('in the action') logger()
嵌套函数与作用域:
嵌套函数(注意执行的顺序)
name="alex" def name1(): name="baby" def name2(): name="vera" print(name) name2() print(name) name1() print(name)
作用域
name='alex' def name1(): name="baby" def name2(): print(name) return name2() test=name1()
递归函数:
def calc(n): print(n) if int(n/2) ==0: return n return calc(n/2) calc(10)
特征:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)