1.函数的创建和调用

1.1创建一个函数

创建函数也称为定义函数,可以理解为创建一个具有某种用途的工具。使用def关键字实现。格式如下:

def functionname([parameterlist]):

['''comments''']

[functionbody]

参数说明:

functionname:函数名称,在调用函数时使用

parameterlist:可选参数,用于指定向函数中传递的参数。如果有多个参数,各参数间使用逗号分隔。如果不指定,则表示该函数没有参数。在调用时,也不指定参数

comments:可选参数,表示为函数指定注释,注释内容通常是说明该函数的功能,要传递的参数的作用等,可以为用户提供友好和帮助的内容

functionbody:可选参数,用于指定函数体,即该函数被调用后,要执行的功能代码。如果函数有返回值,可以使用return语句返回

例如:定义一个根据身高,体重计算BMI指数的函数fun_bmi(),该函数包括3个参数,分别用于指定姓名/身高/体重,在根据公式:BMI=体重/(身高*身高)计算BMI指数,并输出结果。

deffun_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指数;

deffun_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语句填充函数主体。

deffunc():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 位置参数

位置参数也称为必备参数,必须按照正确的顺序传到函数中。即调用的函数数量和位置必须和定义的是一样的。

例如:

deffun_hello(name, sex):

sex_dict= {1: '先生', 2: '女士'}print('hello %s %s, welcome to python world!' %(name, sex_dict.get(sex)))#两个参数的顺序必须一一对应,且少一个参数都不可以

fun_hello('张建宇',1)

运行结果:

hello 张建宇 先生, welcome to python world!

2.3 关键字参数

关键字参数是指使用行参的名字来确定输入的参数值。通过该方式指定的实参时,不再需要与行参的位置完全一致,只要将参数名写正确即可

同样上面的例子:

deffun_hello(name, sex):

sex_dict= {1: '先生', 2: '女士'}print('hello %s %s, welcome to python world!' %(name, sex_dict.get(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 inname: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 insign.items():print(key + "的绰号是:" +value)

printsign(邓肯= "石佛",罗宾逊="海军上将")

printsign(吉诺比利= "妖刀",帕克 = "法国跑车",科比 = "黑曼巴")

如果想要使用一个已经存在的字典作为函数的可变参数,可以在字典名称前加“**”

例如:

dict1 = {"邓肯":"石佛","罗宾逊":"海军上将","科比":"黑曼巴"}

printsign(**dict1)

3.返回值

我们在定义函数的时候,其实是告诉他实现什么功能或运算。但是函数并不知道你想要的成品是什么。那么return就是来实现这一目标。(老板--工人--材料--成品)

例如:

#商城促销活动,满500打9折。满1000打8折。满2000打7折。满3000打6折

deffun_chekout(money):

money_old=sum(money)

money_new=money_oldif 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_oldreturnmoney_old,money_new

list_money=[]whileTrue:

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局部变量

局部变量是指函数内部定义并使用的变量,它只在函数内部有效。

例如:

deffun_demo():

message= "hello python"

print("局部变量在函数体内",message)

fun_demo()print("局部变量在函数体外",message)

上面这段代码,执行完成后,之后在函数内部的变量会成功,外部的变量会抛出异常

4.2全局变量

如果一变量,在函数外定义,那么不仅可以在函数外可以访问到,在该函数内也可以访问到。这个就称为全局变量

例如:

message = "hello python"

deffun_demo():print("函数体内",message)

fun_demo()print("函数体外",message)

运行结果:

局部变量在函数体内 hello python

局部变量在函数体外 hello python

当局部变量与全局变量重命名时,对函数体对变量进行赋值后,不影响函数体外对变量。

例如:

message = "hello python"

print("函数体外:",message)deffun_demo():

message= "hello china"

print("函数体内:",message)

fun_demo()print("函数体外:",message)

函数体外: hello python

函数体内: hello china

函数体外: hello python

在函数体内定义,并且使用global关键字修饰后,该变量也可以成为全局变量。在函数体外也可以访问到该变量,并且在函数体内还可以对其进行修改。

例如

message = "hello python"

print("函数体外:",message)deffun_demo():globalmessage

message= "hello china"

print("函数体内:",message)

fun_demo()print("函数体外:",message)

运行结果:

函数体外: hello python

函数体内: hello china

函数体外: hello china

5 匿名函数

匿名函数:指没有名字的函数,它主要应用在需要一个函数,但是又不想费神去命名这个函数。在python中使用lambda表达式创建匿名函数

例如:要定义一个计算圆面积的函数。常规代码如下:

importmathdefcirclearea(r):

result= math.pi*r*rreturnresult

r= 10

print("半径为",r,"的圆面积为:",circlearea(r))

使用lambda表达式的代码如下:

importmath

r= 10result= lambda r:math.pi*r*rprint("半径为",r,"的圆面积为:",result(r))

6.常用的python中内置函数

小测验:编写一个函数,实现中俄双方货币间的转换。(1人民币=9.912卢布;1卢布=0.1009人民币)。程序可以接受输入人民币或者卢布,转换成卢布或者人民币。人民币用RMB表示。卢布用RUB表示。

python从0到1_python从0到1--9 函数相关推荐

  1. python中x y 1_Python的X[y==1, 0]

    最近研究逻辑回归,Iris花的经典示例,代码就不全粘贴了,具体代码参看"Iris花逻辑回归与实现" 1 plt.plot(X[y==0, 0], X[y==0,1], " ...

  2. Windows 10 下 Anaconda3 (Python 3.8) 配置 OpenCV-4.4.0

    Anaconda3 配置 OpenCV-4.4.0 我的小站.Github Anaconda指的是一个开源的Python发行版本,其包含了conda.Python等180多个科学包及其依赖项. Ope ...

  3. 强势回归!比 Python 快 20% 的 Pyston v2.0 来了!

    作者:Kevin Modzelewski 机器之心编译 比 Python 快 20% 的 Pyston v2.0 来了. 2014 年,Python 实现 Pyston 诞生.Pyston 的开发目标 ...

  4. 《Python数据科学实践指南》——0.2节如何成为数据科学家

    本节书摘来自华章社区<Python数据科学实践指南>一书中的第0章,第0.2节如何成为数据科学家,作者纪路,更多章节内容可以访问云栖社区"华章社区"公众号查看 0.2 ...

  5. python 在数字前面自动补0

    1. 为了排版方便或者是输出文件命名整洁,通常需要给数字前面补0来做统一. Python中有一个zfill函数用来给字符串前面补0,非常有用,这个zfill看起来也就是zero fill的缩写吧,看一 ...

  6. python填充_python 实现矩阵填充0的例子

    需求: 原矩阵 [[1 2 3] [4 5 6] [7 8 9]] 在原矩阵元素之间填充元素 0,得到 [[1. 0. 2. 0. 3.] [0. 0. 0. 0. 0.] [4. 0. 5. 0. ...

  7. 利用python安装opencv_科学网—Anaconda Python PyCharm PyQT5 OpenCV PyTorch TF2.0 安装指南 - 张重生的博文...

    Anaconda Python PyCharm PyQT5 OpenCV PyTorch TF2.0 安装指南与资料汇总 (用Anaconda配置Python集成开发环境,含Python3, PyQT ...

  8. python实战1.1——根据1.0做词云图

    python实战1.1--根据1.0做词云图 最基础的词云图制作 import jieba import wordcloud import matplotlib.pyplot as pltm=open ...

  9. 【Python+OpenCV】Windows+Python3.6.0(Anaconda3)+OpenCV3.2.0安装配置

    注:本次安装因为我要配的这个笔记本是win7(32bit)的,所以安装中软件版本的选择就是按32位走的,我之前在win10(64bit)也装过,实际中这个教程的方法对于win7还是win10,32位又 ...

最新文章

  1. python新手项目-Python 的练手项目有哪些值得推荐?
  2. QQ超市模拟排配2D版1.13 (XNA4.0) (修正双格货架移动的一个bug和3-5地图)
  3. easyui收派标准客户端表单校验
  4. asp.net MVC 应用程序的生命周期
  5. tab切换-自动、点击、内容变换
  6. 社交应用动态九宫格图片的规则
  7. 系统优化的方法有哪些
  8. 解压rootfs.img根文件系统
  9. paip.输入法编程---词库多意义条目分割 python实现.
  10. 使用openssl 来生成rsa pkcs1 2048格式的公私钥
  11. win10下ctfmon.exe系统程序误删的解决方案
  12. MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中的数据都是热点数据
  13. 计算机保存到桌面显示不出来,excel表格在电脑桌面显示不出来是什么原因?
  14. 树莓派(Raspberry )开机自动启动Python程序
  15. +initialize方法的调用时机
  16. Codeforces Round #687 (Div. 2) C. Bouncing Ball(枚举 思维)
  17. 静态函数与非静态函数的区别
  18. 房屋装修设计更显档次需要从几个方面入手
  19. Win10系统自定义开机启动项
  20. 三个变量存在一个协整方程_计量经济学31个简答参考答案

热门文章

  1. 请提前为你的眼泪找一个合适的借口
  2. Flink SQL CDC 13 条生产实践经验
  3. C语言uint8_t和char的区别,c – int8_t和uint8_t是char类型吗?
  4. flutter集成高德地图获取位置
  5. 15---TernaryOperator 三目运算符
  6. 计算机组成原理_选择
  7. java双层list扁平化,浅谈java8 stream flatMap流的扁平化操作
  8. 微服务架构的深入理解-总结的很好
  9. FIR内插滤波器的FPGA实现(一)-matlab实现
  10. 大学计算机学cad的,征文通知:第二十二届中国计算机辅助设计与图形学(CADCG 2019)学术会议...