Python函数运用(2)—Python Day5

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

递归函数
递归函数 如果一个函数在内部不调用其它的函数,而是自己本身的话,这个函数就是递归函数。
Python函数运用(2)—Python Day5
递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,只到到达最大递归深度报错。
递归满足的条件
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.递归占用大量内存,耗费计算机资源。

上一篇:8月清北学堂培训 Day5


下一篇:T31训练营-DAY5异常处理与日志