Python进阶(2):函数
函数
函数Function,也叫方法Method,如线性函数 f(x)=a*x+b,用于实现某种逻辑的方法.
Python中创建函数,使用def关键字
def functionName([parameterList]):
[fucntionBody]
functionName:函数名称,在调用函数时使用。
parameterList:可选参数,用于指定向函数中传递的参数。如果有多个参数,各参数间使用逗号“,”分隔。如果不指定,则表示该函数没有参数。在调用时,也不指定参数。
functionBody:用于指定函数体,即该函数被调用后,要执行的功能代码。如果函数有返回值,可以使用 retumm 语句返回。如果想定义一个什么也不做的空函数,可以使用 pass 语句作为占位符。
因Python的弱类型语言,在函数在创建时,不指定返回类型
调用函数
functionName([parameterList])
functionName:函数名称,在调用函数时使用。
parameterList:可选参数,用于指定各个参数对应的值。如果有多个参数,各参数值间使用逗号“,”分隔。如果该函数没有参数,直接输入小括号()
参数传递
形式参数(形参):在定义函数时,函数名后面括号中的参数为“形式参数”
实际参数(实参):在调用一个函数时,函数名后面括号中的参数为“实际参数”。也就是将函数的调用者提供给函数的参数称为实际参数。
实际参数有两种:值传递与引用传递
数字,字符串等为值传递,函数调用后,不篡改原来的参数值.
列表,字典等为引用传递,函数调用后,将篡改原来的参数值.
这个与C#的值传递[值类型]和引用传递[引用类型]一样
位置参数
位置参数也称必备参数,是必须按照正确的顺序传到函数中,即调用时的数量和位置必须和定义时是一样的。
数量必须与定义时一致:
在调用函数时,指定的实际参数的数量必须与形式参数的数量一致,否则将抛出 TypeError 异常,提示缺少必要的位置参数。
位置必须与定义时一致:
在调用函数时,指定的实际参数的位置必须与形式参数的位置一致,否则将产生以下两种结果。
①抛出 TypeError 异常
抛出异常的情况主要是因为实际参数的类型与形式参数的类型不一致,并且在函数中,这两种类型不能正常转换。
②产生的结果与预期不符
在调用函数时,如果指定的实际参数与形式参数的位置不一致,但是它们的数据类型一致,那么就不会抛出异常,而是产生结果与预期不符的问题。这反而更容易产生严重的逻辑问题
测试程序:
FunctionSnake.py
def Hello(strName):
'''
打招呼
:param strName: 姓名
:return: 无返回值
'''
print("Hello:",strName)
def phrase():
'''
成语
:return:
'''
import datetime
phraseList=["鼠目寸光","牛鬼蛇神","虎啸龙吟","兔起鹘落","龙飞凤舞","蛇食鲸吞",
"马革裹尸","羊质虎皮","猴年马月","鸡犬不宁","狗急跳墙","猪狗不如"]
month=datetime.date.today().month
print("当前月份:",month,",对应成语:",phraseList[month-1])
Hello(("Snake"))
phrase()
print("---------------值传递---------------")
def passByValue(num):
'''
值传递:打印当前数以及平方数
:param num: 一个数字
:return:
'''
import math
print("当前数为:",num)
num=math.pow(num,2)
print("平方数为:", num)
number=2.5
passByValue(number)
print("重新读取值传递的数据:",number)
print("---------------引用传递---------------")
def passByReference(lst):
'''
引用传递:列表的末尾增加一个元素
:param lst: 一个列表
:return:
'''
lst.append("方兰生")
print("当前列表为:", lst)
listRole=["百里屠苏","风晴雪","红玉"]
print("原列表为:",listRole)
passByReference(listRole)
print("刷新引用传递列表为:",listRole)
def getBMI(person,height,weight):
'''
获取身高体重比值BMI=体重/身高的平方
:param person: 人员姓名
:param height: 身高,单位 米
:param weight: 体重,单位 千克
'''
print("姓名:{:s},身高:{:.4f}体重:{:.4f}".format(person,height,weight))
BMI=weight/(height*height)
if BMI < 18.5:
print("{:s}过瘦,BMI为{:.4f}".format(person,BMI))
elif BMI >= 18.5 and BMI <= 25:
print("{:s}正常,BMI为{:.4f}".format(person, BMI))
else:
print("{:s}过胖,BMI为{:.4f}".format(person, BMI))
print("---------------测试调用多参数函数---------------")
getBMI("张三",1.70,70)
getBMI("李四",1.80,57)
getBMI("王五",1.76,80.3)