一.局部变量和全局变量
程序变量中使用的范围不同:作用域就是变量的有效范围。变量的作用域取决于变量的访问性。
局部变量:函数内部的变量称为局部变量,它的作用域仅限于函数内部, 离开该函数后就是无效的,再使用就会报错。
1.主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用。
2.允许在不同的函数中使用相同的变量名,他们代表不同变量,分配不同的存放单元,互不相干,不会发生混淆。
3.复合语句中定义的变量,只限于使用当前函数中,也是复合语句的局部变量。
4.形参变量、在函数体内定义的变量都是局部变量。实参给形参传值的过程也就是给局部变量赋值的过程。
全局变量:在所有函数外部定义的变量称为全局变量,它的作用域默认是整个程序。它的作用域是从声明时刻开始,到程序结束。
1.全局变量定义必须在所有函数之外。
2.全局变量可加强函数模块之间的数据联系,但是函数又依赖这些变量,降低函数的独立性。
3.在同一源文件中,允许全局变量和局部变量同名,在局部变量作用域内,同名的全局变量不起作用。
二.递归
重点:递归步骤和基线条件。
def recurMul(a, b):
if b == 1:#基线条件
return a
else:
return a + recurMul(a, b-1) #递归步骤
斐波纳契数
def fib(x):
assert type(x) == int and x >= 0
if x == 0 or x == 1:#基线条件
return 1
else:
return fib(x-1) + fib(x-2)#递归步骤
三.回文
def isPalindrome(s): #函数,内部函数调用
def toChars(s):#函数
s = s.lower()#定义所有字符为小写
ans = ''
for c in s:
if c in 'abcdefghijklmnopqrstuvwxyz':
ans = ans + c
return ans#返回重新生成的字符串
def isPal(s):
if len(s) <= 1:#基线条件
return True
else:
return s[0] == s[-1] and isPal(s[1:-1])#递归步骤
return isPal(toChars(s))