1、定义一个函数
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表):
函数体
2、无返回值函数案例
- 定义一个无返回值的函数showResult
def showResult(s):
print("显示:", s)
- 调用函数showResult
showResult("测试")
- 输出结果
显示: 数据
3、有返回值函数案例
- 定义一个有返回值的函数getResult
# 获取结果函数
def getResult(num1, num2):
return num1 + num2
- 调用函数getResult
#其中str(int)是python自带的转换成字符串函数
print("返回结果:"+ str(getResult(10, 21)))
- 输出结果
返回结果:31
4、引用类型与基本数据类型传参的函数的案例
- 定义一个传入不可变对象实例参数的函数changeBool
def changeBool(a):
a = True
print("changeBool函数内值:", a)
- 调用函数changeBool
b = False
changeBool(b)
print("changeBool函数外值:", b)
- 输出结果
changeBool函数内值: True
changeBool函数外值: False
可以看到b的值并不会发生改变。
在看下面一个案例:
- 定义一个# 传入可变对象实例参数的函数changeList
def changeList(val):
val.append(["1", "2", "3", "4"])
print("changeList函数内值:", val)
return
- 调用函数changeList
myList = ["5", "6"]
changeList(myList)
print("changeList函数外值:", myList)
- 输出结果
changeList函数内值: ['5', '6', ['1', '2', '3', '4']]
changeList函数外值: ['5', '6', ['1', '2', '3', '4']]
可以看到myList 的值已经发生改变。
原因就在于基本类型和引用类型存储区别
5、匿名函数
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。python 使用 lambda 来创建匿名函数。
- 定义一个有返回值的匿名函数sum
#求和
sum = lambda arg1, arg2: arg1 + arg2
- 调用函数getResult
#其中str(int)是python自带的转换成字符串函数
print("匿名函数求和计算结果:"+str(sum(15,12)))
- 输出结果
匿名函数求和计算结果:27
6、灵活传参方式的函数
调用函数时参数位置可以调换,只要调用时的参数命名与函数参数名一致即可自动对应,如showUserInfo;
可在方法的参数位置设置参数默认值如showUserInfo2,其中的age不传时默认值为18,传参数age时,则为age实际传递的值;
调用函数时,可以设置可设置不定长参数,如showAction。
# 不设置默认值函数
def showUserInfo(age, name):
print("年龄:" + str(age))
print("姓名:" + name)
return
# 设置默认值函数
def showUserInfo2(name, age=18):
print("年龄:" + str(age))
print("姓名:" + name)
return
# 不定长参数
def showAction(arg1,*vartuple):
print(arg1,end=",")
for var in vartuple:
print(var,end=",")
return
- 调用函数showUserInfo、showUserInfo2、showAction
print(" ")
showUserInfo(age=30, name="小明")
print(" ")
showUserInfo(name="小红", age=40)
print(" ")
showUserInfo2(name="小黑");
print(" ")
showUserInfo2(name="小黑", age=2);
print("")
showAction("参数1","不定长参数1","不定长参数2","不定长参数3")
print("")
- 输出结果
年龄:30
姓名:小明
年龄:40
姓名:小红
年龄:18
姓名:小黑
年龄:2
姓名:小黑
参数1,不定长参数1,不定长参数2,不定长参数3,
7、完整代码
# 显示结果函数
def showResult(s):
print("显示:", s)
# 获取结果函数
def getResult(num1, num2):
return num1 + num2
# 传入不可变对象实例参数
def changeBool(a):
a = True
print("changeBool函数内值:", a)
# 传入可变对象实例参数
def changeList(val):
val.append(["1", "2", "3", "4"])
print("changeList函数内值:", val)
return
# 不设置默认值函数
def showUserInfo(age, name):
print("年龄:" + str(age))
print("姓名:" + name)
return
# 设置默认值函数
def showUserInfo2(name, age=18):
print("年龄:" + str(age))
print("姓名:" + name)
return
# 不定长参数
def showAction(arg1,*vartuple):
print(arg1,end=",")
for var in vartuple:
print(var,end=",")
return
#匿名函数 求和
sum = lambda arg1, arg2: arg1 + arg2
print("====开始执行====")
showResult("数据")
print("返回结果:"+ str(getResult(10, 21)))
b = False
changeBool(b)
print("changeBool函数外值:", b)
myList = ["5", "6"]
changeList(myList)
print("changeList函数外值:", myList)
# 这种方式传参,参数名必须和方法参数名相同,否则不会输出
changeList(val=["7", "8"])
print(" ")
# 变量名位置可以切换,只要保证与函数的变量名称相同即可
showUserInfo(age=30, name="小明")
print(" ")
showUserInfo(name="小红", age=40)
print(" ")
# 缺少参数时,会自动使用默认的参数
showUserInfo2(name="小黑");
print(" ")
# 有参数时,会自动使用传递的参数
showUserInfo2(name="小黑", age=2);
print("")
showAction("参数1","不定长参数1","不定长参数2","不定长参数3")
print("")
print("匿名函数求和计算结果:"+str(sum(15,12)))
print("====执行结束====")
8、总结
与Java相比函数的调用非常灵活,使用也并不复杂。
缺点是,可能出BUG的机率会比较大,所以要特别细心。