局部变量和全局变量
局部变量:就是在函数内部定义的变量,作用域仅仅局限在函数的内部
不同的函数,可以定义相同的局部变量,但是互不干扰
局部变量的作用:为了临时保存数据,需要在函数中定义来进行存储
全局变量:作用域为全局
优先级:当全局变量与局部变量冲突时,优先使用局部变量
如果要修改全局变量,需要借助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.递归占用大量内存,耗费计算机资源。