1、函数介绍
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()
。但你也可以自己创建函数,这被叫做用户自定义函数。
2、函数使用优缺点:
公司随随便便几百上千行。可读性,重用性,函数,面向过程编程
优点:
缺点:
面向过程,可以将可重复性的代码做成一个函数,用参数代替变化的量,实现具有重复性操作的功能。
当事物需要做这个操作的时候,调用函数即可实现功能。#自己理解
#发邮件:设置里面开启pop3,smtp服务器 ,往smtp服务器发邮件
比如发邮件,很多对象都使用的一个动作,写成函数,调用函数。避免代码冗余。
什么情况写函数,就是为了能重复使用某个功能,就写成函数,一个功能一个函数。
函数式编程是做什么的?避免重复性代码。代码拆分,增强可移植性,可读性
本质:将N行代码拿到别处并给他起个名字,以后通过名字就可以找到这段代码并执行。
场景:代码重复执行。
代码量特别多超过一屏,可以选择通过函数进行代码的分割。
3、函数定义:
你可以定义一个由自己想要功能的函数,以下是简单的规则:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None
。
语法:
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表):
函数体
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
函数执行: def xiaoma(): print("魔降风云变") xiaoma() ---------结果: 魔降风云变
4、函数调用
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执
行。
函数不调用,内部代码不执行。调用后用不用变量接收返回值,函数都会执行。
def xiaoma(): print("魔降风云变") xiaoma() ---------结果: 魔降风云变 def xiaoma(): print("魔降风云变") a=xiaoma() ----------结果: 魔降风云变
5、函数传参
不同的对象做相同的操作,可以定义函数。如果每个对象还有些区别,那么有区别的地方使用函数传参
。
定义带参数的函数的时候
函数式编程。通过传参,返回不同的值,返回不同的参数。同一个功能不同的地方就使用传参
形式参数(形参):形参就是形式上的参数,可以理解为数学的X,没有实际的值,通过别人赋值后才有
意义。相当于变量。
实际参数(实参):实参就是实际意义上的参数,是一个实际存在的参数,可以是字符串或是数字等
函数里面使用字符串格式化
函数可以定死了,也可以传递变量。写函数不一定需要参数。如果有变的,使用参数,没有变的就定死
了就可以,看实际情况了。
5.1没有函数传参 案例1: 使用函数只计算某一个列表内元素的和: def list_sum(): li = [1, 2, 3] sum=0 for i in li: sum+=i print(sum) list_sum() -----------结果 6 5.2一个函数传参: 案例2: 使用函数计算指定列表内元素的和: def list_sum(li): sum=0 for i in li: sum+=i print(sum) info=[1,2,3] list_sum(info) -------------结果: 6 报错问题1: 报错:函数没有形参,调用函数时带着参数的报错: def list_sum(): sum=0 for i in li: sum+=i print(sum) info=[1,2,3] list_sum(info) #调用时,可以直接做参数,也可以用变量做实参 -------------------结果: list_sum(info) TypeError: list_sum() takes 0 positional arguments but 1 was given 5.3多个函数传参: def xiaoma(arg1,arg2): print(arg1+arg2) xiaoma(2,3) -----------结果: 5 报错问题2:传参传少了 def xiaoma(arg1,arg2): print(arg1+arg2) xiaoma(2) -----------结果: xiaoma(2) TypeError: xiaoma() missing 1 required positional argument: ‘arg2‘ 报错问题3:传参传多了 def xiaoma(arg1,arg2): print(arg1+arg2) xiaoma(2,3,4) ------------结果: xiaoma(2,3,4) TypeError: xiaoma() takes 2 positional arguments but 3 were given
函数:增加代码重用性,可读性。
比如去楼下拿快递,是个函数,告诉他拿**的快递,他就拿到**的快递
6、函数返回值return
1) print 和 return 的区别,print 仅仅是打印在控制台,而 return 则是将 return 后面的部分作
为返回值作为函数的输出,可以用变量接走,继续使用该返回值做其它事。
2)函数需要先定义后调用,函数体中 return 语句的结果就是返回值。如果一个函数没有 reutrn 语句
,其实它有一个隐含的 return 语句,返回值是 None,类型也是 ‘NoneType‘。
3)return作用:结束函数调用、返回值
4)终止函数的方法:满足某个条件 return False
成功与不成功返回一个结果。如果不需要打印,用户只需要某个结果,那么让函数返回一个值,让用户
根据返回值做对应的操作。return实现函数返回值。
调用函数,并用变量接收函数的返回值。
6.1使用变量接收返回值:
def xiaoma(): a=1 return a mcw=xiaoma() print(mcw) ------------结果 1
6.2用户根据函数返回值做别的操作。(根据返回值进行通信)
#当小明吃完饭,给我返回1。小明吃完后小马过河找他玩
def xiaoming(arg): a=0 if arg=="吃完": a=1 return a status=xiaoming("吃完") if status==1: print("小马过河去找小明玩") --------------结果: 小马过河去找小明玩
6.3返回多个值的方法:
如果程序需要有多个返回值,则既可将多个值包装成列表之后返回,也可直接返回多个值。如果 Python
函数直接返回多个值,Python 会自动将多个返回值封装成元组。
def list_sum(li): sum=0 e_str="" for i in li: e_str+=str(i) sum+=i return sum,e_str li=[1,2,3] mcw=list_sum(li) # 获取list_sum函数返回的多个值,多个返回值被封装成元组 v1,v2=list_sum(li) #此外,也可使用 Python 提供的序列解包功能,直接使用多个变量接收函数返回的多个值。 print(mcw) print(v1,v2) ---------------结果: (6, ‘123‘) 6 123
6.4return终止循环
def mcw(): #没有return的时候,返回值默认是None,循环正常结束。 for i in range(1,4): print(i) m=mcw() print(m) -------------结果: 1 2 3 None def mcw(): #有return的时候,返回指定的值,并终止函数向后继续执行了。 for i in range(1,4): if i==3: return "终止函数了" print(i) m=mcw() print(m) -------------结果: 1 2 终止函数了
7、上述总结
没传参的函数,有传参的函数,没返回值的函数,有返回值的函数。既有传参又有返回值的函数。需要
什么样的根据具体需求。
#自我总结
参考链接:
http://www.runoob.com/python3/python3-function.html
https://www.cnblogs.com/i-honey/p/7679897.html
http://c.biancheng.net/view/2248.html
参考续集
http://c.biancheng.net/view/2247.html
原文地址:https://www.cnblogs.com/machangwei-8/p/10678630.html