本文章最初发布在 XJHui’s Blog,未经允许,任何人禁止转载!
注意:最新修改版本已发布在 这里,点击前往查看!
变量
局部变量
-
简单使用:
def setName(): name = 'peter' #局部变量 print(name) setName() #调用函数
-
作用:临时保存数据,需要在函数中定义来进行存储。
-
特点:
-
在函数内部定义的变量,作用域仅局限在函数内部
def setName(): name = 'peter' #局部变量 print(name) #打印name
运行结果:
-
不同的函数可以定义相同名称的局部变量,不会产生影响
def setName1(): name = 'peter' print(name) def setName2(): name = 'Bob' print(name) setName1() setName2()
运行结果:
-
全局变量
-
使用:
age = 10 #全局变量 def setName1(): print(age) def setName2(): print(age) setName1() setName2()
运行结果:
-
区别局部变量:作用域的范围不同,全局变量在整个文件当中均可使用
-
易错:
-
冲突时:局部变量优先级高于全局变量
age = 10 def setName1(): age = 9 print(age) def setName2(): print(age) setName1() setName2()
运行结果:
-
函数中修改全局变量:
age = 10 def setAge(): age = 5 #错误做法,这样只是定义了一个局部变量 setAge() print(age)
运行结果:
age = 10 def setAge(): global age #一定要先定义后赋值,具体原因不知 age = 5 setAge() print(age)
运行结果:
注意:
- 若写成
global age = 5
是错误的,一定要先定义后赋值,具体原因不知 - 上面的代码把最开始的age=10去掉也能成功运行
- 若写成
-
引用传值
补充
- 不可变数据:整型、字符串、元组
- 可变数据:列表、字典
传不可变值
age = 5
def fonc(age): #传不可变数据类型的值
age = 4
fonc(age)
print(age)
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/d4b2177b63d9404347cee67dde0746c0.png)
传可变值
list = []
def fonc(list):
list.append(1)
fonc(list)
print(list)
运行结果:
![](https://i-blog.csdnimg.cn/blog_migrate/1e71c67d9bc710a3c12eac44b9481063.png)
匿名函数
基础
- 语法:
lambda 参数1,参数2:表达式
- 特点:
- 与标准函数相比,使用起来更加简洁
- 自带return,返回的就是表达式的结果
- 缺点:
- 复杂逻辑无法实现
使用
-
求和运算
匿名函数:
Sum = lambda x, y: x + y print(Sum(1, 2))
标准函数:
def Sum(x, y): return x + y print(Sum(1, 2))
运行结果:
注意:上面代码可以更简洁为
print((lambda x, y: x + y)(1, 2))
-
简单判断:
补充:
print('左边大' if 3 > 2 else '右边大')
运行结果:
Judge = lambda x, y: '左边大' if x > y else '右边大' print(Judge(1, 2))
运行结果:
同样可以简写为:
print((lambda x, y: '左边大' if x > y else '右边大')(1, 2))
递归函数
-
特点:
- 有递归结束判断
- 自己调用自己
-
使用:
-
普通求阶乘:
def diGui(x): res = 1 for i in range(1, x + 1): res *= i return res print(diGui(5))
运行结果:
-
递归求阶乘:
def diGui(x): if x == 1: return 1 else: return x * diGui(x - 1) print(diGui(5))
运行结果:
-
递归输出给定目录子文件名称:
def 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')
运行结果:
-