x =2deffunc():
y =20print(x)print(y)
func()#结果为2,20,x为全部变量,可以在局部使用。print(y)#NameError: name 'y' is not defined,y为局部变量,无法在全局使用。
提升局部变量
defimprove():global f
f =100
g =200
improve()#注意这里结果improve和print(f)不能反着,因为先运行了函数f变量才能被提升print(f)
查看全局局部变量: globals()、locals()
2.eval和exec函数
都是把一个字符串当表达式来执行,但是exec函数不返回结果
#eval
x =10
y =3.1415926
c =eval("x + y")print(c)#结果为13.1415926#exec
x =10
y =3.1415926
c =exec("x + y")print(c)#结果为None
z =exec("print('x + y:',x + y)")#里面的print结果先输出,再通过exec返回值没有print(z)'''结果为
x + y: 13.1415926
None
'''
3.递归函数
函数间接或直接调用自己,对递归深度有限制
#递归函数举例defdigui():
x =1
x +=1print(x)
digui()
斐波那契数列
deffibo(n):if n <=0:print("数字必须大于0")if n ==1:return1if n ==2:return1return fibo(n -1)+ fibo(n -2)
defhano(n, a, b, c):'''
n:有多少个盘子
a:第一个塔,开始的塔
b:第二个塔,中间的塔
c:第三个塔,目标的塔
'''if n ==1:print(a,"-->", c)returnNoneif n ==2:print(a,"-->", b)print(a,"-->", c)print(b,"-->", c)returnNone#先通过C,把A上的n-1个盘子移动到B
hano(n -1, a, c, b)print(a,"-->", c)#最后通过A,将B上的n-1个盘子移动到C
hano(n -1, b, a, c)