函数/return
什么是函数
- 相当于具备某一功能的工具
- 函数的使用必须遵循一个原则:先定义后使用
为什么要用函数
- 代码冗余,程序组织结构不清晰,可读性差
- 可维护性,可扩展性差
如何用函数
要使用函数必须遵循先定义后调用的原则
定义函数发生的事情:
- 申请内存空间,保存函数体代码
- 将上输内存地址绑定给函数名
- 定义函数不会执行函数体代码,但会检测其语法
调用函数发生的事情:print(函数名),得到函数体的内存地址
- 通过函数名找到函数的内存地址
- 通过加括号就是在触发函数体代码的执行
def foo(): bar() # 此时只检测语法,不管有没有定义 print('from foo') def bar(): # bar=函数的内存地址 print('from bar') foo() #此时才进行调用
函数语法的格式
def 函数名(参数1,参数2,...): '''文档描述''' 函数体 函数体 函数体 return 值
- 必须要有:def,函数名,括号,冒号,函数体
- 可以没有:参数,返回,文档描述
- 函数名的命名规则与变量名一样,更多地应该命名成动词
定义函数的三种格式
def func(): pass # 定义无参函数 # 调用 func()
def func(x,y): res = x+y return res # 定义有参函数 # 调用的时候,也要传入参数 func()
函数——工厂
参数——原材料
返回值——产品
空的函数体,用于开发程序时候的大纲
定义空函数通常是有用的,因为在程序设计的开始,往往是先想好程序都需要完成什么功能, 然后把所有功能都列举出来用pass充当函数体“占位符”,这将使得程序的体系结构立见,清晰且可读性强。 之后我们便可以统筹安排编程任务,有选择性的去实现函数体功能来替换掉pass,从而提高开发效率。
三种定义
函数相当于一个工厂,函数体相当于加工的模板流程,参数相当于加工的原材料,返回值相当于工厂的产品
各个工厂干的活不一样,有些工厂必须要原材料才能运行,有些工厂不需要原材料,有工厂不产生产品
- 无参 / 有参 数函数的应用场景:写死 / 不写死功能
- 空函数的应用场景:构思代码的时候,编程写框架的时候
调用函数
语句的形式,只加括号调用,不做其他操作 func(x,y) 表达式 res = func(x,y) # 赋值表达式 func(x,y) * 10 # 数学表达式 函数调用 func(func(1,2),y) # 实际上传入的参数是func(1,2)的返回值和y
return
若需要将函数体代码执行的结果返回给调用者,则需要用到return。
- return的返回值无类型限制,且可以将多个返回值放到一个元组内。
- return是函数结束的标志,即函数体代码一旦运行到 return,会立刻终止函数的运行;
- 函数内可以有多个return,但只执行一次函数就结束了,并且会将 return后的值当做本次运行的结果返回。
#PS:
结束程序的执行的力度:
exit > return > break > 条件为假
def func(): return (777) res=func() print(res) # 返回值为777
def func(): pass res=func() print(res) # 返回值None
def func(): return (77,'aaa',[1,2]) res=func() print(res,type(res)) # 返回值为元祖(77, 'aaa', [1, 2])