目录
全局变量和局部变量
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电源')