函数(2)

目录

全局变量和局部变量

引用

匿名函数

递归函数


全局变量和局部变量

1.局部变量就是在函数内部定义的变量-作用域仅仅局限于函数内部。

2.不同函数可以定义相同的局部变量,但各自用各自的,不会产生影响、

3.局部变量的作用:为了临时的保存数据,需要在函数中定义来进行存储

-----------全局变量---------

1.pro的定义是一个全局变量 当全局变量和局部变量同名时,局部变量优先

2.如果在函数的内部想要对全局变量进行修改的话,必须使用global关键字进行声明

pro = '计算机' #全局变量
name='吴老师' #当全局变量和局部变量同名时,局部变量优先
def printInfo():
    name='peter' #name是局部变量,作用域只在函数体内
    print('{}'.format(pro))
    pass

def TestMethod():
    name ='刘德华'
    print(name)
    print('{}'.format(pro))
    pass

def changeGlobal():
    '''
    要修改全局变量
    :return:
    '''
    global pro #修改了全局变量
    pro='市场营销'
    pass

changeGlobal()
print(pro)
printInfo()
TestMethod()

引用

1在python中,万物皆对象,在函数调用的时候,实参传递的就是对象的引用

2.了解了原理之后,就可以更好的去把控,在函数的处理是否会影响到函数外部的数据变化

3.参数传递是通过对象的引用来完成的

不可变类型:

def func(x):
    print('x的地址{}'.format(id(x)))
    x=2
    print('x修改后的地址{}'.format(id(x)))
    print(x)
    pass
print('a的地址:{}'.format(id(a)))
func(a) #传过去a的地址 ?
print(a)

可变类型:

li=[]
def testRenc(parms):
    print(id(parms))
    li.append([1,2,3,4])
    print(id(parms))
    print('内部的变量对象{}'.format(parms))
    pass

print(id(li))
testRenc(li)
print('外部的变量对象{}'.format(li))

匿名函数 

匿名函数

语法: lambda 参数1、参数2、参数3:表达式

特点 1.使用lambda关键字去创建函数

2.没用函数名字

3.匿名函数冒号后面的表达式有且只有一个,注意:是表达式,不是语句

4.匿名函数自带return,而return的结果就是表达式计算后的结果 缺点 lambda只能是单个表达式,不是一个代码块,lamdba的设计就是为了满足简单函数的场景 仅仅能封装有限的逻辑,复杂的逻辑实现不来了,必须用def来处理

 举例:

M=lambda x,y:x+y
#通过变量调用匿名函数
print(M(23,19))

result=lambda a,b,c:a*b*c
print(result(1,2,3))


age=19
print('可以参军'if age>18 else '继续上学') #可以替换传统双分支的写法

N=lambda x,y:x if x>y else y
print(N(12,13))


N=(lambda x,y:x if x>y else y)(16,12) #直接调用
print(N)
rs=lambda x:x**2
print(rs(3))

 递归函数

 递归满足的条件

1.自己调用自己

2.必须有一个明确的结束条件

优点:逻辑简单、定义简单

缺点:容易导致栈溢出,内存资源紧张,甚至内存泄露

1.求阶乘

def diguiJc(n):
    if n==1:
        return 1
    else:
        return n*diguiJc(n-1)
    pass
print(diguiJc(5))

2.递归案例 模拟实现 树形结构的遍历

import os #引入文件操作模板
def findFile(file_path):
    listRs=os.listdir(file_path) #得到该路径下面所有的文件夹
    for item in listRs:
        full_path=os.path.join(file_path,item) #获取完整的文件路径
        if os.path.isdir(full_path): #判断是不是文件夹
            findFile(full_path) #如果是一个文件夹,再次去递归
        else:
            print(item)
            pass
        pass
    else:
        return
    pass
#调用函数
findFile('F:\\5V电源')

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值