一、什么是函数?
1.函数的概念
函数是盛放功能(一系列代码)的容器,定义函数就是制造了一个工具
事先准备工具的过程叫做函数的定义
遇到应用场景拿来就用叫做函数的调用
2.为什么要用函数
不用函数写出代码存在的问题:
1)程序的组织结构不清晰,可读性差,维护性差
2)可扩展性差
因此灵活运用函数可以解决写出代码出现的上述问题,能够简化设计,扩展程序,方便快捷
3.运用函数的原则:先定义,再调用
二、函数的定义与调用
函数的使用必须遵循“先定义,后调用”的原则,函数的定义就相当于事先将函数整体代码保存,然后将内存地址赋予给函数名,函数名就是对这段代码的引用,这和变量的定义是相似的。没有事先定义函数而直接调用,就相当于引用一个不存在的变量名
定义函数的语法
def 函数名(参数1,参数2,..):
'''文档描述'''
函数体
return 值
- def:定义函数的关键字
- 函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名反映出函数的功能
- 括号:括号内定义参数,参数是可有可无的,无需指定参数的类型
- 冒号:括号后加冒号,然后在下一行开始缩进编写函数体的代码
- ‘’‘文档描述’‘’:描述函数的功能,参数介绍等信息的文档,非必要,但建议加上,从而增强函数的可读性;
- 函数体:由语句和表达式组成
- return值:定义函数的返回值,return是可有可无的
def func() # 函数名的命名规则和变量名一样,函数是工具,应该定义成一个动词
print("哈哈哈")
func() # 调用
因为没有语法错误,所以在定义函数阶段 并不报错,在调用时,就会报错
定义函数发生的事
1.申请内存空间保存函数整体代码
2.将上述内存地址绑定函数名
3.定义函数不会执行函数体代码,但会检测函数体语法
函数的调用:
# 函数名加括号即函数调用
res = 函数名(值1,值2,值3...)
# 调用函数发生的事
# 函数调用阶段发生的事情: 执行函数体代码
def bar():
print('from bar')
def foo():
print('from foo')
bar() #
foo() # 调用函数foo out>>> from foo from bar
def foo():
print('from foo')
bar()
def bar():
print('from bar')
foo() # 不报错,定义阶段函数foo与bar均无语法错误,而在调用阶段调用foo()时,函数foo与bar都早已经存在于内存中了,所以不会有任何问 # 题。, out>>> from foo from bar
# 总结:函数定义阶段只检测语法不执行代码,只有在调用函数时才会执行函数体代码
三、函数的参数
函数的参数分为形式参数和实际参数,简称形参和实参
形参是指定义函数时,括号内声明的函数。形参的本质是一个变量名,用来接受传来的值
实参是指调用函数时,括号内传入的值,值可以是变量,常量,表达式或者三者组合
#无形参函数
def func():
x = 10
y = 20
res = x + y
print(res)
# 无形参函数,函数体已经将函数功能写死,将功能写活化,可以改为有形参函数
# 有形参函数
def func(x,y)
res = x + y
print(res)
func(1,2)
四、函数的返回值
'''函数完成一个加工处理,若需要将函数体代码执行的结果返回给调用者进一步处理,则需要用到return'''
def max(int1,int2):
if int1>int2:
return int1
else:
return int2
res = max(1000,2000)
print(res*2) # 打印 4000 对2000进行了进一步的处理
# return返回值的语法:
"""函数内可以有多个return,但只要执行一次,整个函数立即结束,并且将return后的值当做本次调用的产品返回"""
def fun():
print('aaa')
return 111
print('bbb')
return 222
print('ccc')
return 333
res = func()
print(res) # out>>> aaa 111 return,执行一次,整个函数成立即结束,返回第一个值111
函数的返回值有三种形式
1.return 值: 返回的就是该值本身
2.return 值1,值2,值3...:返回的是元组
def func():
return 111, "aaa", [222,333]
res = func()
print(res) # out>>> (111, "aaa", [222,333])
x, y ,z = func()
print(x, y, z) # out>>> 111, "aaa", [222,333] 相当于解压赋值
3.没有return或者return无值或者return None:返回值的都是None
def func():
res = 1 + 2
return
res = func()
print(res) # out>>> None