1.函数的基本类型
- 1.无参数,无返回值
多用于提示信息打印
例:
def a():
print("20")
a()
- 2.无参数,有返回值
多用在数据采集,比如获取系统信息
例:
def a():
a=20
return a
print(a())
- 3.有参数,无返回值
多用于设置某些不需要返回值的参数设置
例:
def a(b):
c=[]
c.append(b)
print(c)
a(1)
- 4.有参数,有返回值
一般是计算型的,需要参数,也要返回结果
例:
def a(b):
c=0
c+=b
return c
print(a(2))
2.变量
一.局部变量
是指在一个函数体内中拥有的变量,出了函数体便无法再使用(作用域局限在函数内部)
因此局部变量在不同的函数中可以同名,也可以有不同的值,不会有任何影响.
例:
def a():
Test="test"
pass
print(Test)
# 结果为报错 NameError: name 'Test' is not defined ,因为Test是一个局部变量,只能在函数a中使用
二.全局变量
是指在整个程序下,每个函数皆可调用的变量,既可以在函数外部使用,也可以在函数内部使用(作用域在全局)
例:
Name="xiaoli"
def a():
print(Name)
pass
a()
# 结果为打印xiaoli,可以看到,在函数内部可以调用全局变量Name.
注意,如果局部变量和全局变量产生冲突,在函数体内优先使用局部变量
例:
Name="xiaoli"
def a():
Name="xiaonan"
print(Name)
a()
# 结果为打印xiaonan.因为局部变量在函数体内优先
利用关键字将局部变量修改为全局变量
使用方法:
全局变量=值
def 函数名(参数):
global 全局变量
全局变量=值
例:
Name="xiaoli"
def a():
global Name
Name="xiaonan"
a()
print(Name)
# 结果为打印xiaonan.因为局部变量修改为全局变量
# 注意:用关键字修改局部变量为全局变量,必须先调用函数,否则不会生效
3.引用
案例1:
a=1
def func(x):
print("x的id为:{}".format(id(x)))
pass
func(a)
print("a的id为:{}".format(id(a)))
发现结尾为两者内存地址一致
案例2:
a=1
def func(x):
print("x的id为:{}".format(id(x)))
x=2
print("x修改后的id为{}".format(id(x)))
pass
func(a)
# 结果为分行打印x的id为:3127229770032和x修改后的id为3127229770064
# 发现两者内存地址不一致
图例:
更改值后:
因此引入观点
在python中,值是靠引用来传递来的,可以用id()查看一个对象的引用是否相同,id是值保存在内存中那块内存地址的标识.(此句为摘抄)
4.函数
一.匿名函数
Python中使用lambda创建匿名函数,
匿名函数,即没有名字,也没有def关键字创建的函数
使用方法:
lambda 参数1,参数2 : ...(代码) -需为表达式
例:
c=lambda a,b:a+b
print(c(1,2))
# 结果为打印3.返回值为3
# 相当于普通函数
def c(a,b):
return a+b
print(c(1,2))
参数并不局限两个,还有参数3,参数4...
但要注意,参数之间需用 "," 隔开,参数和代码(表达式)需用 ":"隔开
且代码(表达式)有且只有一个
直接调用的方法:
a=(lambda x,y:x+y)(1,2)
print(a)
# 结果为打印3.注意:两边括号不能少
灵活运用(三元运算)
使用方法:
lambda 参数1,参数2:...(代码) if ...(条件)>...(条件) else ...(条件)
例:
a=lambda x,y:x+1 if x>y else x-1
print(a(2,4))
# 结果为打印1,因为不满足x>y的条件,所以执行x-1.返回值为1
缺点:
lambda只能是单个表达式,不是一个代码块,lambda的设计就是为了满足简单函数的场景.
只能封装有限的逻辑,复杂逻辑无法实现,必须使用def来处理
二.递归函数
递归函数:
指在函数内部再次调用自身
递归函数必须有一个结束条件,否则递归无法结束会一直递归下去,直到最大递归深度报错
例: -求阶乘5!
def a(b):
c=1
for d in range(1,b+1):
c*=d
return c
print(a(5))
# 结果为打印120
灵活运用: -遍历文件,列出文件夹下的所有文件
import os
def FindFile(FolderName):
ListFile=os.listdir(FolderName)
for FileName in ListFile:
fileName=os.path.join(FolderName,FileName)
if os.path.isdir(fileName):
FindFile(fileName)
else:
print(FileName)
FindFile("路径")
# 填入路径即可列出所有文件.