变量
局部变量
简单使用:
1
2
3
4
5def setName():
name = 'peter' #局部变量
print(name)
setName() #调用函数作用:临时保存数据,需要在函数中定义来进行存储。
特点:
在函数内部定义的变量,作用域仅局限在函数内部
1
2
3
4def setName():
name = 'peter' #局部变量
print(name) #打印name运行结果:
不同的函数可以定义相同名称的局部变量,不会产生影响
1
2
3
4
5
6
7
8
9
10def setName1():
name = 'peter'
print(name)
def setName2():
name = 'Bob'
print(name)
setName1()
setName2()运行结果:
全局变量
使用:
1
2
3
4
5
6
7
8
9
10age = 10 #全局变量
def setName1():
print(age)
def setName2():
print(age)
setName1()
setName2()运行结果:
区别局部变量:作用域的范围不同,全局变量在整个文件当中均可使用
易错:
冲突时:局部变量优先级高于全局变量
1
2
3
4
5
6
7
8
9
10
11age = 10
def setName1():
age = 9
print(age)
def setName2():
print(age)
setName1()
setName2()运行结果:
函数中修改全局变量:
1
2
3
4
5
6
7age = 10
def setAge():
age = 5 #错误做法,这样只是定义了一个局部变量
setAge()
print(age)运行结果:
1
2
3
4
5
6
7
8age = 10
def setAge():
global age #一定要先定义后赋值,具体原因不知
age = 5
setAge()
print(age)运行结果:
注意:
- 若写成
global age = 5
是错误的,一定要先定义后赋值,具体原因不知 - 上面的代码把最开始的age=10去掉也能成功运行
- 若写成
引用传值
补充
- 不可变数据:整型、字符串、元组
- 可变数据:列表、字典
传不可变值
1 | age = 5 |
运行结果:
传可变值
1 | list = [] |
运行结果:
匿名函数
基础
- 语法:
lambda 参数1,参数2:表达式
- 特点:
- 与标准函数相比,使用起来更加简洁
- 自带return,返回的就是表达式的结果
- 缺点:
- 复杂逻辑无法实现
使用
求和运算
匿名函数:
1
2Sum = lambda x, y: x + y
print(Sum(1, 2))标准函数:
1
2
3
4def Sum(x, y):
return x + y
print(Sum(1, 2))运行结果:
注意:上面代码可以更简洁为
print((lambda x, y: x + y)(1, 2))
简单判断:
补充:
print('左边大' if 3 > 2 else '右边大')
运行结果:
1
2Judge = lambda x, y: '左边大' if x > y else '右边大'
print(Judge(1, 2))运行结果:
同样可以简写为:
print((lambda x, y: '左边大' if x > y else '右边大')(1, 2))
递归函数
特点:
- 有递归结束判断
- 自己调用自己
使用:
普通求阶乘:
1
2
3
4
5
6
7def diGui(x):
res = 1
for i in range(1, x + 1):
res *= i
return res
print(diGui(5))运行结果:
递归求阶乘:
1
2
3
4
5
6
7def diGui(x):
if x == 1:
return 1
else:
return x * diGui(x - 1)
print(diGui(5))运行结果:
递归输出给定目录子文件名称:
1
2
3
4
5
6
7
8
9
10
11
12def findFile(file_path): # 输出给定路径下所有文件名称
lists = os.listdir(file_path) # 将所有文件(夹)名称存入列表
for item in lists:
full_path = os.path.join(file_path, item) # 获取完整路径名称
if os.path.isdir(full_path): # 判断
findFile(full_path)
else:
print(item)
else:
return
findFile('D:\\code')运行结果: