函数:函数的基本使用、函数参数的使用
一、函数的基本使用
1、什么是函数
函数就类似于具备某一功能的工具,提前定义好之后可以反复使用(即:函数就是盛放代码和功能的容器)

1.1函数的使用原则:
先定义 ,后调用
为何要用函数==>解决下述问题:
-
1.代码组织结构不清晰、过于冗余、可读性差
-
2.代码没有返回值(无法使用之后的返回结果)
-
3.兼容性、可维护性、可扩展性差、修改繁杂等等
如何用函数
-
先定义------> 三种定义方式
-
后调用------> 三种调用方式
-
返回值------> 三种返回值的形式
2、函数定义语法
def 函数名(参数1,参数2,参数3,...): '''函数的注释''' 函数体代码 return 返回值 ''' 1.def: (必须) 定义函数的关键字; 2.函数名:(必须) 函数名指向函数内存地址,是对函数体代码的引用。函数的命名应该反映出函数的功能; 3.括号冒号:(必须) 括号后要加冒号,然后在下一行开始缩进编写函数体的代码; 4.参数:(可选) 括号内定义参数,参数是可有可无的,且无需指定参数的类型; 5.函数注释: (可选) 描述函数功能,参数介绍,非必要,但是建议加上,从而增强函数的可读性; 6.函数体:(必须) 由语句和表达式组成; 7.return值:(可选) 定义函数的返回值,return是可有可无的。 '''
3、函数的定义与调用
定义函数
定义函数发生的事情
-
1、在内存空间中申请一块内存空间存储函数体代码
-
2、将函数体代码所在的内存空间地址绑定给函数名
强调:定义函数只检测语法,不执行代码
def login(): # login = 函数的内存地址 print(111) # 函数体代码 print(222) x = 10 # x = 10的内存地址 print(x) # 10 ''' 原则上打印应该返回内存地址,但是返回的是值。 变量名受到python解释器特殊照顾由内存地址直接找到返回值打印。 ''' print(login) # <function login at 0x7fa136db91f0> ''' 但函数名不同,打印显示的是内存地址。定义函数的目的是为了把代码丢到容器, 只需要运行不需查看。则无需被照顾。 '''
调用函数
调用函数发生的事情:
-
1、先通过函数名定位到函数的内存地址
-
2、函数名加括号会触发函数体代码的运行
强调:调用函数才会执行函数体代码
# 示例: def login(): print('hello') login() # hello 触发函数体代码的运行 # 语法错误 def func(): print(111 # 无效语法,定义阶段都无法通过 # 逻辑错误 def func(): print(111) x # x 没有定义,变量名也需要先定义后引用 func() # 调用肯定出错 # 示例: def bar(): print('from bar') def foo(): print('from foo') bar() foo() ''' from foo from bar ''' # 语法错误 def foo(): print('from foo') bar() foo() # bar没有定义,调用肯定出错 def bar(): print('from bar')
4、定义函数的三种形式
1.无参函数
- 函数在定义阶段括号内没有参数
# 函数体不需要外部传参数进行,它本身代码就是固定的,所以就是无参函数 def say(): print('welcome to here') say() # 参数是函数的调用者向函数体传值的媒介,有参无参是根据函数体代码去走的,看函数体代码是否需要外部传参数 def login(): inp_name = input("请输入用户名>>>: ").strip() inp_pwd = input("请输入密码>>>: ").strip() if inp_name == "jack" and inp_pwd == "123": print('登录成功!') else: print("用户名或密码错误") login() # 直接调用无需传参数,input功能已经实现与用户交互
2.有参函数
- 函数在定义阶段括号内有参数
# 函数体代码需要外部传参数进行,这种函数就需要定义为有参函数 def max2(x, y): # 参数---》原材料 if x > y: print(x) else: print(y) max2(10,20)
3.空函数
- 函数在定义阶段括号内没有参数,并且函数体代码为空(pass)
# 函数体为pass代表什么都不做,称之为空函数。定义空函数通常是有用的,因为在程序设计的开始,往往是先想好程序都需要完成什么功能,然后把所有功能都列举出来用pass充当函数体“占位符”,这将使得程序的体系结构清晰且可读性强。例如要编写一个程序,我们可能想到的功能有用户认证,下载,上传,等功能,可以先做出如下定义: def auth_user(): """用户认证""" pass # 代表占位符 def download_file(): """下载文件""" pass def upload_file(): """上传文件""" pass
调用函数的三种形式
# 1.语句 len("hello") # 单纯的调用,例如len统计hello的长度 # 2.表达式 res = len("hello") # 将调用函数的返回值赋值给res res = len("hello") * 10 # 将调用函数的返回值乘以10的结果赋值给res print(res) # 3 .可以当做参数传给另外一个函数 len("hello") # 从形式上看就是将函数调用,从本质讲是跟2同理 print(len("hello")) # 先调len的返回值然后再赋值给print
函数的返回值
return 详解
def max(x, y): if x > y: return x else: return y res = max(10, 20) print(res)
1、return是一个函数结束的标志,函数可以有多个return,但只要执行一次return,整个函数就立即结束,并且将return后的值当做本次调用的结果返回
def func(): print("=====") # 只运行到了此行 return 111 # return后的值当做本次调用的结果返回 print("****") # ruturn 下面的值不会被执行 return 222 res = func() print(res) ''' ===== 111 '''
-
2、return后的返回值有三种情况
- 1)函数内可以没有return 或者 return None 或者 return:返回的都是None
- 2)return 值:返回的就是这一个值
- 3)return 值1,值2,值3:会自动组织成一个元组返回
# 示例1: def func(): print(111) return print(2222) res = func() print(res) ''' 111 None ''' # 示例2: def func(): return 111,"xxx",[22,33] res = func() print(res) # (111,"xxx",[22,33])返回的是元组

浙公网安备 33010602011771号