包含在def关键字定义的语句块中,即在函数中定义的变量。每当函数被调用时都会创建一个新的局部作用域。Python中也有递归,即自己调用自己,每次调用都会创建一个新的局部命名空间。在函数内部的变量声明,除非特别的声明为全局变量,否则均默认为局部变量。有些情况需要在函数内部定义全局变量,这时可以使用global关键字来声明变量的作用域为全局。局部变量域就像一个 栈,仅仅是暂时的存在,依赖创建该局部作用域的函数是否处于活动的状态。所以,一般建议尽量少定义全局变量,因为全局变量在模块文件运行的过程中会一直存在,占用内存空间。 注意:如果需要在函数内部对全局变量赋值,需要在函数内部通过global语句声明该变量为全局变量。
a = 6688 def foo(): a = 666 def inner_foo(): global a print(a) a = 888 print("1", a) inner_foo() print("2", a) print("3", a) foo() print("4", a) ''' 3 6688 6688 1 888 2 666 4 888 '''列表是可变数据类型,数字和字符串是不可变数据类型。
在一个函数体内部,调用函数本身,就被称为递归函数。
def func(n): print(n) if int(n / 2) == 0: return n return func(int(n / 2)) print(func(10)) ''' 10 5 2 1 1 '''格式:
lambda para1, para2, ... , paraN : expression using paras f = lambda x="city", y="college", z="ZUCC": x + y + z print(f("Zhejiang")) #ZhejiangcollegeZUCC把一个函数名,以实参的形式,传递给下颌骨函数的形参,这个函数就是高阶函数
def add(a, b, c): return c(a) + c(b) a_value = add(-9, 1, abs) print(a_value) #10 li = ['Zhejiang', 'University', 'City', 'College'] def filter_test(para): ret = [] for i in para: if not i.startswith("C"): ret.append(i) return ret print(filter_test(li)) #['Zhejiang', 'University']用高阶函数显示和map一样的结果:
li = [1, 2, 3, 4, 5] def f(x): return x * (x + 1) + 2 def map_test(func, para): ret = [] for i in para: ret.append(func(i)) return ret print(map_test(f, li)) #[4, 8, 14, 22, 32]