Python-函数初识(定义、调用、返回值)
一、概念引入
-
什么是函数?
函数就相当于具备某一功能的工具,函数的使用必须遵循一个原则:先定义,后使用。
-
为什么要用函数?
随着程序功能的增多,代码量随之增大,此时仍不加区分地把所有功能的实现代码放到一起,将会使得程序的组织结构不清晰,可读性变差,且程序中需要频繁使用同一功能时,只能重复编写该功能的实现代码,日积月累,程序将变得冗长,并且当某一功能需要修改时,又不得不找出所有定义及使用这段功能的地方修改之,管理维护的难度极大。
所以我们需要使用函数来解决这些问题。
-
如何使用函数?
函数分为两大类,一类是内置函数,一类是自定义函数。内置函数可以直接使用,比如input()、print()等;而自定义函数需要我们自己定义后使用。
- 先定义:三种定义方式
- 后调用:三种调用方式
- 返回值:三种返回值的形式
二、函数定义
函数的使用必须遵循’先定义,后调用’的原则。函数的定义就相当于事先将函数体代码保存起来,然后将内存地址赋值给函数名,函数名就是对这段代码的引用,这和变量的定义是相似的。没有事先定义函数而直接调用,就相当于在引用一个不存在的’变量名’。
定义函数的语法:
def 函数名(参数1,参数2,...):
"""文档描述"""
函数体
return 值
- def:定义函数的关键字;
- 函数名:函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能;
- 括号:括号内定义参数,参数是可有可无的,且无需指定参数的类型;
- 冒号:括号后要加冒号,然后在下一行开始缩进编写函数体的代码;
- “”“文档描述”"":描述函数功能,参数介绍等信息的文档,非必要,但是建议加上,从而增强函数的可读性;
- 函数体:由语句和表达式组成;
- return 值:定义函数的返回值,return是可有可无的。
定义函数发生的事情
1、申请内存空间保存函数体代码
2、将上述内存地址绑定给函数名
3、定义函数不会执行函数体代码,但是会检测函数体语法
调用函数发生的事情
1、通过函数名找到函数的内存地址
2、然后加括号就是在触发函数体代码的执行
定义形式一:无参函数
def func():
print("这是一个函数")
func() # 这是一个函数
# 示范1
def bar(): # bar=函数的内存地址
print('from bar')
def foo():
bar()
print('from foo')
foo()
# 运行结果:
# from bar
# from foo
# 示范2
def foo():
# print(bar)
bar()
print('from foo')
def bar(): # bar=函数的内存地址
print('from bar')
foo()
# 运行结果:
# from bar
# from foo
# 示范3
def foo():
bar()
print('from foo')
foo()
def bar():
print('from bar')
# 程序自上而下执行,到foo()处进入函数内,bar()找不到,故报错
# 为什么代码没有语法错误?因为函数定义时不执行函数体代码,只检测函数体语法
定义形式二:有参函数
def func(x, y): # x=1 y=2
print(x, y)
func(1, 2) # 1 2
定义形式三:空函数,函数体代码为pass
def func(x, y):
pass
三种定义方式的应用场景
-
无参函数的应用场景
def interactive(): name = input('username>>: ') age = input('age>>: ') gender = input('gender>>: ') msg = '名字:{} 年龄:{} 性别:{}'.format(name, age, gender) print(msg) interactive()
-
有参函数的应用场景
def add(x, y): res = x + y print(res) add(20, 30)
def add(x, y): # 参数-》原材料 res = x + y return res # 返回值-》产品 res = add(20, 30) print(res)
-
空函数的应用场景
在程序设计的开始,往往是先想好程序都需要完成什么功能,然后把所有功能都列举出来用pass充当函数体“占位符”,这将使得程序的体系结构立见,清晰且可读性强。
例如要编写一个ftp程序,我们可能想到的功能有用户认证,下载,上传,浏览,切换目录等功能,可以先做出如下定义:
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
三、函数调用
调用方式一:语句的形式(只加括号调用函数)
interactive()
add(1, 2)
调用方式二:表达式形式
def add(x, y):
res = x + y
return res
# 赋值表达式
res = add(1, 2)
print(res)
# 数学表达式
res = add(1, 2) * 10
print(res)
调用方式三:函数调用当做参数
res = add(add(1, 2), 10)
print(res)
四、函数返回值
return是函数结束的标志,即函数体代码一旦运行到return会立刻终止函数的运行,并且会将return后的值当做本次运行的结果返回。
-
返回None:函数体内没有return或者返回值设置为None
def func(): pass return None def func2(): pass res = func() res2 = func2() print(res, type(res)) # None <class 'NoneType'> print(res2, type(res2)) # None <class 'NoneType'>
-
返回一个值:return 值
def func(): return 10 res = func() print(res) # 10
-
返回多个值:用逗号分隔开多个值,会被return返回成元组
def func(): pass return 10, 'aa', [1, 2] res = func() print(res, type(res)) # (10, 'aa', [1, 2]) <class 'tuple'>