python高级之函数的定义和调用
Python函数的定义和调用
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
语法
Python 定义函数使用 def 关键字,一般格式如下:
def 函数名(参数列表): 函数体
(0)空函数
def login_app(): pass
- 函数体为pass代表什么都不做,称之为空函数。
- 定义空函数通常是有用的,因为在程序设计的开始,往往是先想好程序都需要完成什么功能,然后把所有功能都列举出来用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
(1)无参无返回值
def common_user_pwd(): user=input('请输入用户名: ').strip() pwd=input('请输入密码: ').strip()
(2)有参无返回值
- 参数是函数的调用者向函数体传值的媒介
- 没有return,无返回值
def test(name): print(f"Hello, {name}!") test("xiao zhao") # Output: Hello, xiao zhao!
(3)有多个参数无返回值
def add(a, b): result = a + b print(f"The sum of {a} and {b} is {result}") add_numbers(6, 7) # Output: The sum of 6 and 7 is 13
(4)多个参数一个返回值
# 定义一个函数,函数有两个参数 def add_numbers(a, b): result = a + b print(f"The sum of {a} and {b} is {result}") return result # 使用 return 关键字将想要返回的结果返回出去 ## 调用上面设置的函数 res = add_numbers(3, 5) # Output: The sum of 3 and 5 is 8 print(res) # 8
(5)多个参数多个返回值
def rectangle_info(length, width): area = length * width perimeter = 2 * (length + width) return area, perimeter # 解压赋值 area, perimeter = rectangle_info(4, 5) print(f"Area: {area}, Perimeter: {perimeter}") # Area: 20, Perimeter: 18
调用函数与函数返回值
定义一个函数:给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。
如下实例调用了 printme()
函数:
# 定义函数 def printme( str ): # 打印任何传入的字符串 print (str) return # 调用函数 printme("我要调用用户自定义函数!") printme("再次调用同一函数")
以上实例输出结果:
我要调用用户自定义函数! 再次调用同一函数
函数的使用分为定义阶段与调用阶段,定义函数时只检测语法,不执行函数体代码,函数名加括号即函数调用,只有调用函数时才会执行函数体代码
#定义阶段 def foo(): print('in the foo') bar() def bar(): print('in the bar') #调用阶段 foo()
执行结果:
in the foo in the bar
定义阶段函数foo与bar均无语法错误,而在调用阶段调用foo()时,函数foo与bar都早已经存在于内存中了,所以不会有任何问题。
按照在程序出现的形式和位置,可将函数的调用形式分为三种:
#1、语句形式: foo() #2、表达式形式: m=my_min(1,2) #将调用函数的返回值赋值给x n=10*my_min(1,2) #将调用函数的返回值乘以10的结果赋值给n #3、函数调用作为参数的形式: # my_min(2,3)作为函数my_min的第二个参数,实现了取1,2,3中的较小者赋值给m m=my_min(1,my_min(2,3))
若需要将函数体代码执行的结果返回给调用者,则需要用到return。return后无值或直接省略return,则默认返回None,return的返回值无类型限制,且可以将多个返回值放到一个元组内。
def test(x,y,z): ... return x,y,z #等同于return (x,y,z) ... res=test(1,2,3) print(res) ## (1, 2, 3)
return是一个函数结束的标志,函数内可以有多个return,但只执行一次函数就结束了,并把return后定义的值作为本次调用的结果返回。
return是函数结束的标志,即函数体代码一旦运行到return会立刻终止函数的运行,并且会将return后的值当作本次运行的结果返回:
1.返回None:函数体内没有return。
2.返回一个值:return值。
3.返回多个值:用逗号隔开多个值,会被return返回成元组。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏