局部变量和全局变量
局部变量:就是在函数内部定义的变量,作用域仅仅局限在函数的内部
不同的函数,可以定义相同的局部变量,但是互不干扰
局部变量的作用:为了临时保存数据,需要在函数中定义来进行存储
全局变量:作用域为全局
优先级:当全局变量与局部变量冲突时,优先使用局部变量
如果要修改全局变量,需要借助Global
print('-----------局部变量--------') def TestA(): Name="李易峰" print("{}".format(Name)) def TestB(): Name = "刘德华" print("{}".format(Name)) TestA() #同为Name变量 但是互不影响,输出结果不同 TestB() print('-----------全局变量--------') Pro="大数据分析师" #全局变量 后面的都可以用 Name="Peter" #当全局变量与局部变量冲突时,优先使用局部变量 def TestA(): Name="李易峰" print("{},{}".format(Name,Pro)) # Pro都可以用 TestA() def TestB(): Name="刘德华" print("{},{}".format(Name,Pro)) # Pro都可以用 TestB() print('-----------修改全局变量--------') def TestC(): global Name Name='PPPeter' TestC() print(Name)
匿名函数
python中使用lambda关键字创建匿名函数,所谓匿名即这个函数没有名字不用def关键字创建标准的函数。
语法:
lambda 参数1,参数2,参数3: 执行代码语句
使用lambda表达式计算两个数和:
test = lambda x,y:x +y test(1,3) test(4,5)
换成普通函数其实就是这样的
def test(x,y): return x + y
1.使用lambda关键字去创建函数
2.没有名字的函数
3.匿名函数冒号后面的表达式有且只有一个, 注意:是表达式,而不是语句
4.匿名函数自带return,而这个return的结果就是表达式计算后的结果
缺点
lambde只能是单个表达式,不是一个代码块,lambde的设计就是为了满足简单函数的场景,仅仅能封装有限的逻辑,复杂逻辑实现不了,必须使用def来处理
M=lambda x,y: x + y print(M(2,3)) MM=lambda a,b,c:a*b*c print(MM(2,3,4))
lambda与三元运算
M=lambda x,y: x + y print(M(2,3)) MM=lambda a,b,c:a*b*c print(MM(2,3,4)) age=15 print("可以参军"if age>18 else '继续上学') Func=lambda x,y:x if x>y else y print(Func(2,16)) Rs=(lambda x,y:x if x>y else y)(16,12) #直接调用 print(Rs) RSs=lambda x:(x**2)+890 print(RSs(2))
递归函数
递归函数 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,只到到达最大递归深度报错。
递归满足的条件
1.自己调用自己
2.必须有一个明确的结束条件
优点:逻辑简单、定义简单
缺点:容易导致栈溢出,内存资源紧张,甚至内存泄漏
print('-----------------求阶乘,循环的方法------------------') def JC(n): result=1 for item in range(1,n+1): result*= item return result print(JC(5)) print('-----------------求阶乘,递归的方法------------------') def DG(n): if n==1: return 1 else: return n*DG(n-1) print(DG(5)) print('-----------------递归案例,查找文件------------------') import os #引用文件操作模块 def FindFile(file_path): listRs=os.listdir(file_path) #得到该路径下所有文件夹 for file_item in listRs: full_item=os.path.join(file_path,file_item) #获取完整的路径 if os.path.isdir(full_item):#判断是否是文件夹 FindFile(full_item) #如果是一个文件夹,再次去递归 else: print(file_item) FindFile('D:\\0001U盘数据\\每日报数模板')
递归函数优缺点
优点:
1.递归使代码看起来更加整洁、优雅
2.可以用递归将复杂任务分解成更简单的子问题
3.使用递归比使用一些嵌套迭代更容易
缺点:
1.递归逻辑很难调试,递归条件处理不好容易造成程序无法结束,直到达到最大递归错误。
2.递归占用大量内存,耗费计算机资源。