一、什么是函数?
- 函数就相当于具备某一个功能的工具
- 函数的使用必须遵循一个原则:先定义、后调用
二、为什么要用函数?
- 解决代码组织结构不清晰,可读性差
- 解决代码冗余
- 增加代码可维护性、可扩展性
三、理解函数先定义后调用时所发生的事情
"""
# 定义函数时发生的事情:
定义函数发生的事情:
1、申请内存空间保存函数体代码
2、将上述内存地址绑定给函数名,且函数名最好要使用动词。
3、定义函数不会执行函数体代码,但是会检测函数体语法(例:x只是没有变量值不是语法错误.print('aaa'没有右括号,语法错误。)
# 调用函数发送的事情:
调用函数体发生的事情:
1、通过函数名找到函数的内存地址
2、然后加括号就是在出触发函数体代码的执行。(函数的内存地址加括号就可以出发内部代码的执行。)
3、调用阶段才会正真的执行函数体代码。
"""
四、定义函数:定义函数的三种形式(无参函数、有参函数、空函数)
# 定义语法伪代码示例:
"""
def 函数名(参数1,参数2,...):
'''文档描述'''
函数体
return 值
"""
# 1、无参函数:函数体代码逻辑不依赖外部传来的参数时定义成无参函数。
def func1():
# x # 这里只是定义了变量名,但是没有绑定函数值,并不是语法的错误,定义时并不会报错。
# print('xxx' # 这里print功能没有加有右括号,属于语法的错误,会报错:SyntaxError: invalid syntax。
print('哈哈哈')
print('哈哈哈')
print('哈哈哈')
# 2、 有参函数:函数体代码逻辑依赖外部传来的参数时则需要定义为有参函数
def func2(x, y):
print(x, y)
# 3、空函数,函数体代码为pass:在程序的开始,往往事先想好程序都需要完成什么功能,然后把所有功能都列举出来用pass充当函数体代码的“占位符”,这使得程序的体系结构清晰,且可读性强。
def func3(x, y):
pass
func1()
'''
哈哈哈
哈哈哈
哈哈哈
'''
func2(1, 2) # 1 2
func3(1, 1)
# 1、无参函数的应用场景
# 需求:接受用户的输入,把用户输入的内容做一个格式化的打印
def format_print():
username = input("username>>:").strip()
age = input("age>>:").strip()
gender = input("gender>>:").strip()
msg = f'名字:{username} 年龄:{age} 性别:{gender}'
print(msg)
# 2、有参函数的应用场景
# 需求:打印,2个数的加法计算
def add(x, y):
print(x + y)
add(1, 99) # 100
add(299, 1) # 300
# 需求:拿到,2个数的加法计算
def add(x, y):
res = x + y
return res
my_calc(1, 99)
# 3、空函数的应用场景
# 需求:构思程序的体系结构,用来理清程序的思路架构。
def auth_user():
"""user authentication function"""
pass
def download_file():
"""download file function"""
pass
def upload_file():
"""upload file function"""
pass
def ls():
"""list contents function"""
pass
def cd():
"""change directory"""
pass
五、调用函数:调用函数三种形式(语句形式、表达式形式、函数调用返回值作为参数)
# 1、语句形式:只调用函数,不做任何其他操作
interactive()
add(1, 3)
# 2、表达式形式
def add(x, y):
res = x + y
return res
# 2.1 赋值表达式形式
res = add(1, 2)
print(res)
# 2.2 数学表达式
res = add(1, 2) * 10
print(res)
# 3、函数调用返回值当作参数
add(add(1, 2), 20)
六、函数的返回值:返回值的三种形式(返回None,返回值一个值,返回多个值)
# 什么时候用到返回值?
"""
若需要将函数体代码执行的结果返回给调用则,则需要用到return.return后无值或者直接省略默认返回None。return返回值没有无类线限制,且可以将多个返回值放到一个元组中。
"""
# 类比:函数的参数类似于工厂的原材料,返回值是产品
# return:函数体代码执行到return,函数体代码就会立刻终止。并且会将return后的值当作本次运行的结果返回。
# 1、返回None:函数体内没有return、return、return None
def func1():
pass
def func2():
return
def func3():
return None
print(func1()) # None
print(func2()) # None
print(func3()) # None
# 2、返回一个值:return 值
def func4():
return 10
res = func4()
print(res) # 10
# 3、返回多个值:用逗号隔开多个值,会被return返回成元组
def func5():
return 10, 20, [1, 2]
print(func5()) # (10, 20, [1, 2])