一、作用域
1、全局变量与局部变量
name = 'CRTao' #全局变量
def change_name():
name = 'tao' #局部变量
print(name)
change_name() #tao
print(name) #CRTao
2、关键字global
关键字global可以声明变量为全局变量
name = 'CRTao' #全局变量
def change_name():
global name #声明name为全局变量
name = 'tao'
print(name)
change_name() #tao
print(name) #tao
(1)一般来说:全局变量变量名大写;局部变量变量名小写。
(2)优先读取局部变量,能读取全局变量,在局部作用域内无法对全局变量重新赋值,但可以使用全部变量的方法。例:
l = [1,2,3]
def func():
l.append(10)
func()
print(l) #[1, 2, 3, 10]
3、关键字nonlocal
关键字nonlocal声明该变量不是本层局部变量,依次向外一层找,找到为止。如果局部变量都没找到,而是找到全局变量,则报错。
l = [1,2,3]
def func1():
l = ['a','b']
def func2():
# nonlocal l
l = 'CRTao'
func2()
print(l) #['a', 'b']
func1()
print(l) #[1, 2, 3]
l = [1,2,3]
def func1():
l = ['a','b']
def func2():
nonlocal l
l = 'CRTao'
func2()
print(l) #CRTao
func1()
print(l) #[1, 2, 3]
二、前向引用
函数即变量。下述代码中,函数f1可以写在f2前面,程序正常运行,不报错。因为可以把函数理解为存储一些字符串(函数体语句)的变量。
def f1():
print('from f1')
f2()
def f2():
print('from f2')
f1()
'''
from f1
from f2
'''
三、递归
def calc(n):
print(n)
if int(n / 2) == 0:
return n
res=calc(int(n / 2))
return res
res=calc(10)
print('res:',res)
'''
10
5
2
1
res: 1
'''