共计 2439 个字符,预计需要花费 7 分钟才能阅读完成。
引入
1. 什么是函数
- 具备某一个功能的工具就是程序中的函数
- 事先准备工具的过程称之为 函数的定义
- 拿来就用称之为 函数的调用
2. 为什么要用函数
为了解决以下问题
- 组织结构不清晰, 可读性差
- 代码冗余
- 管理维护难度大, 扩展性差
3. 如何使用函数
- 原則 : 先定义, 后调用
- 注意 : 没有先定义函数而直接调用,就相当于在引用一个不存在的变量名, 报错
一. 定义函数的完整语法
def 函数名(参数 1, 参数 2,...):
"""
文档描述
"""
代码 1
代码 2
代码 3
return 值
'''
👻def: 定义函数的关键字
👻函数名: 是用来调用函数的, 函数名的命名必须能反映出函数的功能(推荐使用动词)
👻文档描述: 推荐写上,来增强函数的可读性
👻代码块: 函数的功能实现代码
👻return: 函数的返回值
'''
二. 定义和调用阶段发生的事情
1. 函数定义阶段
- 只检测语法,不执行函数体代码
def foo():
xxx #这里执行才会报错
print('from foo')
"""
👻申请内存空间保存函数体代码
👻将上述内存地址绑定给函数名,且函数名最好要使用动词
👻定义函数不会执行函数体代码,但是会检测函数体语法, 逻辑错误无法检测
"""
2. 函数调用阶段
- 根据函数名找到函数的内存地址,然后执行函数体代码
foo()
"""
👻通过函数名找到函数的内存地址
👻然后加括号就是在出触发函数体代码的执行
👻调用阶段才会正真的执行函数体代码, 这时候有逻辑错误就会报错
"""
3. 示例
- 来回调用
👻示例 1
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo() # from foo from bar
👻示例 2
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo() #from foo from bar
👻先调用, 后定义: 报错
def foo():
print('from foo')
bar()
foo() #先调用了 "foo" 函数里面的 "bar", 在这之前没有先定义: 报错
def bar():
print('from bar')
三. 函数定义的三种形式
- 无参函数
- 有参函数
- 空函数
1. 无参函数
- 当函数体的代码逻辑不需要函数的调用者掺入值的情况下,就无参
def func():
print('----------------------')
print('---soft run-----------')
print('----------------------')
def interactive():
name=input('username>>:').strip()
pwd=input('password>>:').strip()
print(name,pwd)
interactive() #定义时无参,意味着调用时也无须传入参数
interactive() #定义时无参,意味着调用时也无须传入参数
interactive() #定义时无参,意味着调用时也无须传入参数
2. 有参函数
- 当函数体代码需要接收使用外部传入值时, 就是有参
👻判断传入的两个值的大小
def max2(x,y):
if x > y:
return x #返回值
else:
return y #返回值
res=max2(10,3) #把返回值 赋值给 res
print(res) #10
3. 空函数
- 函数体代码为pass,在程序的开始,往往事先想好程序都需要完成什么功能
- 然后把所有功能都列举出来用 pass 充当函数体代码的“占位符”
- 这使得程序的体系结构清晰,且可读性强
def auth():
"""
这是一个认证功能
:return:
"""
pass
def put():
"""
上传功能
:return:
"""
pass
def get():
"""
下载功能
:return:
"""
pass
def ls():
"""
list contents
:return:
"""
pass
四. 函数调用的三种形式
1. 语句形式
👻只调用函数, 不做任何的后续操作
def func():
print('from func')
func() # from func
2. 表达式形式
👻赋值表达式
def max2(x,y):
if x > y:
return x #返回值
else:
return y #返回值
res=max2(10,3) #把返回值 赋值给 res
print(res) #10
👻数学表达式
def max2(x,y):
if x > y:
return x
else:
return y
res=max2(10,3)*100 #加入计算
print(res) #1000
3. 函数调用可以当做一个参数传给另一个函数
def max2(x,y):
if x > y:
return x
else:
return y
res=max2(10,3)
print(res)
res=max2(max2(10,3),11) # 将函数作为参数传值
print(res)
五. 函数的返回值
函数体代码运行完毕后需要有一个返回结果给调用者(三种形式)
- 返回 None
- 返回一个值
- 返回多个值
1、没有 return,返回值 None
def func():
pass
res=func()
print(res) #None
2、return 后跟一个值,返回该值本身
def func1():
return 1
res=func1()
print(res) # 1
3、return 可以逗号分隔开,返回多个值,会返回一个元组给调用者
def func2():
return 1,2,[1,2,3]
res=func2()
print(res) #(1,2,[1,2,3])pritn(type(res)) # <class "tuple">
4.return 的作用
- 控制返回值, 返回值的值没有类型限制
- 是函数结束的标志,函数内可以写多个 return,但执行一次,函数就结束,并把 return 后面的值作为本次调用的返回值
def func3():
print('first')
return 1 #遇到第一个 return 函数体就结束了
print('second')
return 2
print('third')
return 3
res=func3()
print(res) # first 结束
正文完