function函数
大家好!今天跟大家分享一下Python当中的函数:function
首先我们来了解一下什么是函数。其实编程当中的函是源于数学这门学科的,那么在数学当中,函数是怎么定义的呢?查了一下资料,有这么两类定义:
传统定义1837年狄利克雷提出函数概念::“对于在某区间上的每一个确定的x值,y都有一个确定的值,那么y叫做x的函数。”这个定义避免了函数定义中对依赖关系的描述,以清晰的方式被所有数学家接受。
近代定义
设A,B是非空的数集,如果按照某种确定的对应关系f,使对于集合A中的任意一个数x,在集合B中都有唯一确定的数和它对应,那么就称映射 为从集合A到集合B的一个函数,记作: 或 。其中叫作自变量, 叫做的函数,集合叫做函数的定义域,与对应的叫做函数值,函数值的集合{ }叫做函数的值域, 叫做对应法则。其中,定义域、值域和对应法则被称为函数三要素。
编程语言中的函数其实就是可以完成某项任务的代码块。那么在编程中为什么我们要用到函数呢?我们先来看一个例子。
说有一天,你的小伙伴小明说他在网上看到了有关身体质量指数的信息,想让你写个程序评估一下他的身高体重指数( BMI )。然后你就找了一下BMI的计算公式:BMI = 体重 身高 ,其中体重的单位是:千克 / kg,身高的单位是:米 / m,还有BMI中国标准参照表:
然后你就跟小明有了下面的对话:
你:小明你的体重和身高告诉我一下
小明:体重75kg,身高1.8m
你说:马上给计算出来你的BMI
然后你就开始撸代码,结果发现两行代码搞定了,甚至一行:
# v1.0: 小明身体指数bmi = 75.0/(1.8*1.8)print(bmi)”’运行结果23.148148148148145”’
然后你就跟小明说,他的身体指数正常,没什么问题。但是输出结果你不是很满意,想着怎么优化一下输出结果,达到输出结果只保留一位小数的效果。这个时候,小马过来了,也来找你给他评估一下,并告诉你他的体重是:85kg, 身高是:1.66m。然后你就复制了一下上面的代码,并且优化了一下:
# v2.0: 小马身体指数bmi = 85/(1.66*1.66)print(“你的BMI指数是:{:.1f}”.format(bmi))
”’运行结果:你的BMI指数是:30.8”’
运行结果显示是没问题了,但是只给出一个数字,不看BMI参考表的话,还是不知道自己体重是否超标。于是你做了如下改进:
创建身高和体重两个变量
根据计算的bmi结果,参考BMI说明表格,自动输出当前同学体重是否超标
# v3.0: 小马身体指数weight = 85height = 1.66bmi = weight/(height*height)if bmi <= 18.4: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:偏瘦!平时多吃点肉!”)elif bmi >= 18.5 and bmi <= 23.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:正常!继续保持!”)elif bmi >= 24.0 and bmi <= 27.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:过重!平时少吃点吧!”)else: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:肥胖!肥胖!肥胖!”)
”’运行结果:你的BMI指数是:30.8身体指数评估结果:肥胖!肥胖!肥胖!”’
然后你用小明的身高体重数据验证了一下,输出结果符号预期!
”’你的BMI指数是:23.1身体指数评估结果:正常!继续保持!”’
现在看起来好多了,后来班里其他同学都过来找你帮他们测评身体质量指数,然后你就为每个同学复制上面的一段代码,帮他们计算身体指数:
# 同学001weight = 86height = 1.86bmi = weight/(height*height)if bmi <= 18.4: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:偏瘦!平时多吃点肉!”)elif bmi >= 18.5 and bmi <= 23.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:正常!继续保持!”)elif bmi >= 24.0 and bmi <= 27.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:过重!平时少吃点吧!”)else: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:肥胖!肥胖!肥胖!”)
# 同学小002weight = 51height = 1.6bmi = weight/(height*height)if bmi <= 18.4: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:偏瘦!平时多吃点肉!”)elif bmi >= 18.5 and bmi <= 23.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:正常!继续保持!”)elif bmi >= 24.0 and bmi <= 27.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:过重!平时少吃点吧!”)else: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:肥胖!肥胖!肥胖!”)
…
# 同学小00nweight = 70height = 1.72bmi = weight/(height*height)if bmi <= 18.4: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:偏瘦!平时多吃点肉!”)elif bmi >= 18.5 and bmi <= 23.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:正常!继续保持!”)elif bmi >= 24.0 and bmi <= 27.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:过重!平时少吃点吧!”)else: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:肥胖!肥胖!肥胖!”)
是不是觉得现在这个程序有很多重复的代码?那怎么来优化一下呢?接下来,我们就来引入函数,来帮助我们解决这个问题。
语法格式# 定义函数def fuc_name([var1][,var2…]): #功能代码 # 打印:欢迎上车 result = print(“欢迎上车”) return result
# 调用函数func_name([var1][,var2…])
”’运行结果:欢迎上车”’
说明使用def关键字来定义函数:def function_name()
定义函数时可以传入多个参数,也可以不传参数
参数分为:形参(形式参数)和实参(实际参数)
Python已经内置了很多函数,可以直接调用,详见Python官方文档:https://docs.python.org/3/library/functions.html
用法举例# 定义一个函数:greeting, 打印一句话:Hello, there, welcome back!# 无参数def greeting(): print(“Hello, there, welcome back!”)
greeting()
”’运行结果:Hello, there, welcome back!”’
# 定义一个函数: add,计算两数之和# 并且有两个参数def add(a, b): result = a + b return result
# 调用时直接传入实参print(add(100, 1))
”’运行结果:101”’
# 定义一个函数:userinfo, 用户输入姓名和年龄后,打印输入的用户名和年龄信息def userinfo(name, age): print(“用户姓名为:{}, 年龄为:{}岁”.format(name, age))
userinfo(“user001”, 18)
”’运行结果:用户姓名为:user001, 年龄为:18岁”’
如果我把传入的实参位置调换一个位置,会打印出什么呢?
def userinfo(name, age): print(“用户姓名为:{}, 年龄为:{}岁”.format(name, age))
userinfo(18, “user002”)
”’运行结果:用户姓名为:18, 年龄为:user002岁”’
所以,在调用函数需要传入参数时,推荐使用关键字传参,让程序更容易理解。改进后的代码如下:
def userinfo(name, age): print(“用户姓名为:{}, 年龄为:{}岁”.format(name, age))
userinfo(18, “user002″)userinfo(name=”user002”, age=28)
”’运行结果:用户姓名为:18, 年龄为:user002岁用户姓名为:user002, 年龄为:28岁”’
最后我们来把文章开头优化后的代码定义成一个函数:
def bmi_cal(weight, height): bmi = weight/(height*height) if bmi <= 18.4: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:偏瘦!平时多吃点肉!”) elif bmi >= 18.5 and bmi <= 23.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:正常!继续保持!”) elif bmi >= 24.0 and bmi <= 27.9: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:过重!平时少吃点吧!”) else: print(“你的BMI指数是:{:.1f}”.format(bmi)) print(“身体指数评估结果:肥胖!肥胖!肥胖!”) bmi_cal(weight=72, height=1.73)”’运行结果1:你的BMI指数是:24.1身体指数评估结果:过重!平时少吃点吧!”’
bmi_cal(weight=65, height=1.73)”’运行结果2:你的BMI指数是:21.7身体指数评估结果:正常!继续保持!”’
bmi_cal(weight=60, height=1.85)”’运行结果3:你的BMI指数是:17.5身体指数评估结果:偏瘦!平时多吃点肉!”’
bmi_cal(weight=88, height=1.75)”’运行结果4:你的BMI指数是:28.7身体指数评估结果:肥胖!肥胖!肥胖!”’
思考题
优化上面的代码,实现以下功能:
一次执行,无限次使用
输入q时,退出程序
本文对你有帮助?点击“喜欢作者”
助力作者染发