python变量定义的位置会让变量有不同的作用域,其中包括全局可使用的全局变量,和函数内定义的,只能函数内使用的局部变量。可以用特殊方法使局部变量变成全局变量。
变量的作用域
1、程序代码能访问该变量的区域
2、根据变量的有效范围可分为:
局部变量:
在函数内定义并使用的变量,只在函数内部有效,局部变量使用global声明,这个变量就会成为全局变量
全局变量:
函数体外定义的变量,可作用于函数内外
局部变量
def hua(a,b):
c=a+b #这里的变量c就是局部变量,因为c在是函数体内进行定义的变量,a,b为函数的形参,作用范围也是函数的内部,相当于局部变量
print(c)
print(c) #报错因为a,b超出了起作用的范围(超出了作用域)
print(a) #报错
全局变量
name="华老师" #在函数外定义的变量,name的作用范围为函数内部和外部都可以使用---称为全局变量
print(name)
def hua2():
print(name)
调用函数
hua2()
局部变量使用global声明可以成为全局变量
def hua3():
global age #函数内部定义的变量,局部变量,局部变量使用global声明,这个变量实际上就变成的全局变量
age=20 #用global声明该变量,该变量定义时就会变成1全局函数
print(age)
hua3()
print(age)
递归函数
什么是递归函数:
如果在一个函数的函数体内调用量该函数本身,这个函数就称为递归函数
递归的组成部分:
递归调用与递归终止条件 #递归函数既然又终止和调用条件,那么函数里面的语法肯定又if和else
if 终止条件 else 否则就执行递归函数
递归的调用过程:
每递归调用一次函数,都会在栈内存分配一个栈帧
每执行完一次函数,都会释放相应的空间
递归的优缺点:
缺点:
占用内存多,效率低下
优点:
思路和代码简单
例
def hua(n):
if n==1: #递归函数的终止条件
return 1
else: #递归函数的调用条件(什么时候终止,否则就调用)
return n*hua(n-1)
print(hua(6)) #返回值是720.
"""
运行实例:
hua(6) # 720
6fac(5) # 6(120)
6(5hua(4)) # 6(524))
6(5(4hua(3))) # 6(5(46))
6(5(4(3hua(2)))) # 6(5(4(32)))
6(5(4(3(2hua(1)))) # 6(5(4(3(21))))
"""
斐波那契数列
def fib(n):
if n==1: #终止条件
return 1
elif n==2:
return 1
else: #调用条件(什么时候终止,否则就调用)
return fib(n-1)+fib(n-2)
斐波那契数列第六位上的数字
print(fib(6)) #8
输出这个列表的前6位上的数字
for i in range(1,7):
print(fib(i))