python从0到1--9函数
1.函数的创建和调⽤
1.1创建⼀个函数
创建函数也称为定义函数,可以理解为创建⼀个具有某种⽤途的⼯具。使⽤def关键字实现。格式如下:
def functionname([parameterlist]):
['''comments''']
[functionbody]
参数说明:
functionname:函数名称,在调⽤函数时使⽤
parameterlist:可选参数,⽤于指定向函数中传递的参数。如果有多个参数,各参数间使⽤逗号分隔。如果不指定,则表⽰该函数没有参数。在调⽤时,也不指定参数
comments:可选参数,表⽰为函数指定注释,注释内容通常是说明该函数的功能,要传递的参数的作⽤等,可以为⽤户提供友好和帮助的内容functionbody:可选参数,⽤于指定函数体,即该函数被调⽤后,要执⾏的功能代码。如果函数有返回值,可以使⽤return语句返回
例如:定义⼀个根据⾝⾼,体重计算BMI指数的函数fun_bmi(),该函数包括3个参数,分别⽤于指定姓名/⾝⾼/体重,在根据公式:BMI=体重/(⾝⾼*⾝⾼)计算BMI指数,并输出结果。
def fun_bmi(person,height,weight):
'''功能:根据⾝⾼体重计算BMI指数
person:姓名
height:⾝⾼,单位:⽶
weight:体重,单位:千克
'''
print(person + "的⾝⾼:" + str(height) +"⽶ \t体重:"+ str(weight)+"千克")
bmi = weight/(height*height)
print(person+"的BMI指数为:"+str(bmi))
if bmi < 18.5:
print("您的体重过轻")
if bmi >=18.5 and bmi < 24.9:
print("正常范围")
if bmi > 24.9:
print("您的体重超重")
if bmi >= 29.9:
print("肥胖")
1.2 调⽤函数
调⽤函数其实也就是执⾏函数。语法格式:
functionname([parametersvalue])
参数说明:
functionname:函数名称,要调⽤的函数名称,必须是已经创建好的
parametersvalue:可选参数,⽤于指定各个参数的值,如果需要传递过个参数值,⽤逗号分隔;如果没有函数则直接写⼀对⼩括号。
例如:上⾯的代码,实现调⽤函数,计算rain的BMI指数;python货币转换
def fun_bmi(person,height,weight):
'''功能:根据⾝⾼体重计算BMI指数
person:姓名
height:⾝⾼,单位:⽶
weight:体重,单位:千克
'''
print(person + "的⾝⾼:" + str(height) +"⽶ \t体重:"+ str(weight)+"千克")
bmi = weight/(height*height)
print(person+"的BMI指数为:"+str(bmi))
if bmi < 18.5:
print("您的体重过轻")
if bmi >=18.5 and bmi < 24.9:
print("正常范围")
if bmi > 24.9:
print("您的体重超重")
if bmi >= 29.9:
print("肥胖")
fun_bmi("rain",1.65,70)
运⾏结果:
rain的⾝⾼:1.65⽶体重:70千克
rain的BMI指数为:25.71166207529844
您的体重超重
1.3 pass语句
在python中有个pass语句,表⽰空语句,它不做任何事情,⼀般起到占位作⽤,例如,创建⼀个函数,但我们暂时不知道这个函数⼲嘛的。这是⽤pass语句填充函数主体。
def func():
pass
2.参数传递
2.1形式参数和实际参数
形式参数:在定义函数时,函数名后⾯括号中的参数为“形式参数”,也称⾏参。
实际参数:在调⽤⼀个函数时,函数名后⽶娜括号中的参数为“实际参数”。也就是将参数的调⽤者提供给函数的参数称为实际参数,也称实参
举个例⼦:假如说,我们要在⼀张纸上⽤笔画画。那么笔就是“形式参数”;如果我选择⽤铅笔来实现画画,那么铅笔就是“实际参数”。
其中:当实参为不可变对象时,进⾏的值传递;当实参为可变对象时,进⾏的时引⽤对象。
例如:
#定义函数
def demo(obj): #obj形式参数
print("原值:",obj)
obj += obj
#调⽤函数
print("="*10 + "值传递" + "="*10)
mot = "我爱洗澡,⽪肤好好"#采⽤不可变对象--字符串(实参)
print("调⽤函数前:",mot)
demo(mot)
print("调⽤函数后:",mot)
print("="*10 + "引⽤传递" + "="*10)
list1 = ["Kobe","James","Lrving","Harden"] #采⽤可变对象--列表(实参)
print("调⽤函数前:",list1)
demo(list1)
print("调⽤函数后:",list1)
运⾏结果:
==========值传递==========
调⽤函数前:我爱洗澡,⽪肤好好
原值:我爱洗澡,⽪肤好好
调⽤函数后:我爱洗澡,⽪肤好好
==========引⽤传递==========
调⽤函数前: ['Kobe', 'James', 'Lrving', 'Harden']
原值: ['Kobe', 'James', 'Lrving', 'Harden']
调⽤函数后: ['Kobe', 'James', 'Lrving', 'Harden', 'Kobe', 'James', 'Lrving', 'Harden']
2.2 位置参数
位置参数也称为必备参数,必须按照正确的顺序传到函数中。即调⽤的函数数量和位置必须和定义的是⼀样的。
例如:
def fun_hello(name, sex):
sex_dict = {1: '先⽣', 2: '⼥⼠'}
print('hello %s %s, welcome to python world!' %(name, (sex)))
# 两个参数的顺序必须⼀⼀对应,且少⼀个参数都不可以
fun_hello('张建宇',1)
运⾏结果:
hello 张建宇先⽣, welcome to python world!
2.3 关键字参数
关键字参数是指使⽤⾏参的名字来确定输⼊的参数值。通过该⽅式指定的实参时,不再需要与⾏参的位置完全⼀致,只要将参数名写正确即可
同样上⾯的例⼦:
def fun_hello(name, sex):
sex_dict = {1: '先⽣', 2: '⼥⼠'}
print('hello %s %s, welcome to python world!' %(name, (sex)))
# 在利⽤关键字参数时,可以不按顺序位置
fun_hello(sex = 2,name= "赛⾦花")
2.4为参数设置默认值
在调⽤函数时,如果没有指定某个参数将抛出异常,那么我们可以在定义函数时,直接指定形式参数的默认值。这样,当没有传⼊参数时,直接使⽤定义函数时的这个默认值
例如:
def fun_bmi(height,weight,person = "wind"):
'''功能:根据⾝⾼体重计算BMI指数
person:姓名
height:⾝⾼,单位:⽶
weight:体重,单位:千克
'''
print(person + "的⾝⾼:" + str(height) +"⽶ \t体重:"+ str(weight)+"千克")
bmi = weight/(height*height)
print(person+"的BMI指数为:"+str(bmi))
if bmi < 18.5:
print("您的体重过轻")
if bmi >=18.5 and bmi < 24.9:
print("正常范围")
if bmi > 24.9:
print("您的体重超重")
if bmi >= 29.9:
print("肥胖")
fun_bmi(1.65,70,"cloud")
fun_bmi(1.90,80)
注意:在定义函数时,指定默认的⾏参必须在所有参数最后.
在定义函数时,为形式参数设置默认值要牢记⼀点:默认参数必须指向不可变对象。
2.5可变参数
可变参数也称为不定长参数,即传⼊函数中的实际参数可以是0个,1个,2个。。。。。n个。
定义可变参数主要是两种形式,⼀种是*parameter,另⼀种是**parameter。
2.5.1 *parameter
这种形式表⽰接收任意多个实际参数并将其放到⼀个元组中。
例如:
def player(*name):
print("\n我喜欢的NBA球员有: ")
for i in name:
print(i)
player("Kobe")
player("Kobe","Yaoming","Harden")
player("Kobe","Park","Bob","James")
如果想要使⽤⼀个已经存在的列表作为函数的可变参数,可以在列表的名称前加*。例如
listname = ["Kobe","Park","Bob","James"]
player(*listname)
2.5.2 **parameter
这种形式表⽰接收任意多个显式赋值的实际参数,并将其放到⼀个字典中。
例如:
def printsign(**sign):
print()
for key,value in sign.items():
print(key + "的绰号是: " + value)
printsign(邓肯 = "⽯佛",罗宾逊="海军上将")
printsign(吉诺⽐利 = "妖⼑",帕克 = "法国跑车",科⽐ = "⿊曼巴")
如果想要使⽤⼀个已经存在的字典作为函数的可变参数,可以在字典名称前加“**”
例如:
dict1 = {"邓肯":"⽯佛","罗宾逊":"海军上将","科⽐":"⿊曼巴"}
printsign(**dict1)
3.返回值
我们在定义函数的时候,其实是告诉他实现什么功能或运算。但是函数并不知道你想要的成品是什么。那么return就是来实现这⼀⽬标。(⽼板--⼯⼈--材料--成品)
例如:
#商城促销活动,满500打9折。满1000打8折。满2000打7折。满3000打6折
def fun_chekout(money):
money_old = sum(money)
money_new = money_old
if 500 <= money_old <1000:
money_new = '{:.2f}'.format(money_old*0.9)
elif 1000<= money_old <2000:
money_new = '{:.2f}'.format(money_old * 0.8)
elif 2000<=money_old<3000:
money_new = '{:.2f}'.format(money_old * 0.7)
elif money_old>3000:
money_new = '{:.2f}'.format(money_old * 0.6)
else:
money_new == money_old
return money_old,money_new
list_money = []
while True:
inmoney = float(input("请输⼊商品⾦额(输⼊0表⽰输⼊完毕):"))
if int(inmoney) == 0:
break
else:
list_money.append(inmoney)
money = fun_chekout(list_money)
print("合计⾦额:",money[0],"应付⾦额:",money[1])
4.变量
变量的作⽤域是指程序代码能够访问该变量的区域,如果超出该区域,再访问就会出现错误。
4.1局部变量
局部变量是指函数内部定义并使⽤的变量,它只在函数内部有效。
例如:
def fun_demo():
message = "hello python"
print("局部变量在函数体内",message)
fun_demo()
print("局部变量在函数体外",message)
上⾯这段代码,执⾏完成后,之后在函数内部的变量会成功,外部的变量会抛出异常
4.2全局变量
如果⼀变量,在函数外定义,那么不仅可以在函数外可以访问到,在该函数内也可以访问到。这个就称为全局变量
例如:
message = "hello python"
def fun_demo():
print("函数体内",message)
fun_demo()
print("函数体外",message)
运⾏结果:
局部变量在函数体内 hello python
局部变量在函数体外 hello python
当局部变量与全局变量重命名时,对函数体对变量进⾏赋值后,不影响函数体外对变量。
例如:
message = "hello python"
print("函数体外:",message)
def fun_demo():
message = "hello china"
print("函数体内: ",message)
fun_demo()
print("函数体外: ",message)
函数体外: hello python
函数体内: hello china
函数体外: hello python
在函数体内定义,并且使⽤global关键字修饰后,该变量也可以成为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以对其进⾏修改。例如
message = "hello python"
print("函数体外:",message)
def fun_demo():
global message
message = "hello china"
print("函数体内: ",message)
fun_demo()
print("函数体外: ",message)
运⾏结果:
函数体外: hello python
函数体内: hello china
函数体外: hello china
5 匿名函数
匿名函数:指没有名字的函数,它主要应⽤在需要⼀个函数,但是⼜不想费神去命名这个函数。在python中使⽤lambda表达式创建匿名函数
例如:要定义⼀个计算圆⾯积的函数。常规代码如下:
import math
def circlearea(r):
result = math.pi*r*r
return result
r = 10
print("半径为",r,"的圆⾯积为:",circlearea(r))
使⽤lambda表达式的代码如下:
import math
r = 10
result = lambda r:math.pi*r*r
print("半径为",r,"的圆⾯积为:",result(r))
6.常⽤的python中内置函数
⼩测验:编写⼀个函数,实现中俄双⽅货币间的转换。(1⼈民币=9.912卢布;1卢布=0.1009⼈民币)。程序可以接受输⼊⼈民币或者卢布,转换成卢布或者⼈民币。⼈民币⽤RMB表⽰。卢布⽤RUB表⽰。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论