函数
函数的结构
def 函数名(参数):
“函数注释”
函数代码
return 返回值
介绍
def
定义函数的关键字
函数名
跟变量名一样
参数
可有可无,有参数的时候要传参才能调用没有的话就不用传参调用
函数注释
说明这个函数的作用(想要的就要)
函数体代码
是函数的核心需要程序员的编写
return
使用函数之后返回给使用者renturn后的数据后面的代码也不会执行
(可有可无)
函数的定义与调用
函数的定义
函数在定义阶段只检测语法不执行代码
def 函数名():
pass
函数的调用
函数在调用阶段才会执行函数体代码
调用方式
函数名()
注意事项
函数必须先定义后才能调用
调用的时候如果有参数需要按照括号内相应的规则传递参数
函数的分类
空函数
函数体代码为空或者使用pass补全
空函数主要用于项目前期的功能框架搭建
使用方法
def 函数名():
pass
无参函数
定义函数的时候括号内没有参数
使用方法
def 函数名():
print(‘你好’)
有参函数
定义函数的时候括号内写了参数 调用函数的时候括号里需要传参
使用方法
def 函数名(参数):
pringt(参数)
函数的返回值
返回值
调用函数之后返回给调用者的结果
变量名 赋值符号 函数调用
变量名 = 函数名()
注意先执行函数然后将返回值赋值给变量名
函数返回值的多种情况
函数体代码里面没有return关键字默认返回none
函数体代码里面有return后面没有写数据也是返回none,后面写什么就返回什么
如果return后面有多个数据值则自动组织返回元组的形式
函数体代码遇到return会立刻介绍后面的代码不会执行
函数的参数
形式参数
在函数定义阶段括号内填写的参数介绍形参
实际形参
在函数调用阶段括号内填写的参数介绍实参
形参和实参的关系
形参
形参类似于变量名在函数定义阶段可以随便写最好见名知意要传什么数据进去
使用方法
def 函数名(name,age)
pass
实参
在函数调用阶段与形参临时绑定函数运行结束后立刻断开
调用方法
函数名(‘名字’,年龄)name与名字绑定 age与年龄绑定
函数参数之位置参数
当子代码只要一行并且简单的情况下可以直接在冒号后编写不用换行
位置形参
函数定义阶段括号内从左往右依次填写的变量名
方法
def 函数名(a,b,c):pass
位置实参
函数调用阶段括号内从左往右依次填写的数据值
使用方法
函数名(数据1,数据2,数据3)
a对应数据1
b对应数据2
c对应数据3
注意事项
传值不能多也不能少,关键字传参就是
函数名(a=数据,b=数据参数)可以不用按位置
但是关键字传参一定要在位置传参后面不能在前面
函数名(b=数据,数据,数据)这样是错的
同一个形参在调用的时候不能多次赋值
实参没有固定的定义可以传数据也可以绑定数据值的变量名
默认参数
就是这个参数可以不传(就是在定义的数据)传的话就是自己传数据
使用方法
def 函数名(name,age,gender=‘male’):
print(name,age,gender)
调用方法
函数名(名字,年龄)
函数名 (名字,年龄,性别)
可变长形参
加形参用来接收多个参数组织成元组赋值给号后面的形参
加形参用来接收多余的关键字参数,接收组成字典的形式赋值给号后面的形参
一般用*args和**kwargs来使用
可变长实参
*类似于for循环将整个循环取值的整体结果一次性传给参数
**将字典的键值对打散成关键字参数的形式传给函数
命名关键字参数(了解)
形参必须按照关键字参数传值:命名关键字参数
def 函数名(name,*args,gender=‘male’,**kwargs):
print(name,args,gender,kwargs)
调用方法
名称空间
变量名 = 数据
申请内存空间存储数据
给数据绑定变量名
后续通过变量名就可以访问数据
名称空间就是用来存储变量名与数据值绑定关系的地方
内置名称空间
解释器运行自动产生里面包含了很多变量名
比如:len,print,input
全局名称空间
在py文件中贴着边框的独立的就是全局名称的数据
name和age就是全局名称空间的数据
局部名称空间
函数体代码运行或者类体代码运行产生的空间
名称空间存活周期及作用范围(域)
什么时候消失
内置名称空间
python解释器启动就存在,关闭就消失
全局名称空间
py文件执行就创建,运行结束就消失
局部名称空间
函数代码运行就创建,函数代码运行结束就消失
作用域
内置名称空间
解释器里自带的空间
全局名称空间
py文件里的空间
局部名称空间
函数体代码里面的空间
名字的查找顺序
先搞明白自己在那个空间
在局部名称空间的时候
先找局部名称空间》全局名称空间》内置名称空间。这样的一个循序
在全局名称空间的时候
全局名称空间》内置名称空间
注意不能从大到小
相互独立的局部名称空间默认是不能互相访问的
局部名称空间嵌套
先从自己的局部名称空间查找,在去由内到外依次的查找
函数体代码的名字查找顺序在函数定义阶段就已经固定好了
global和nonlocal
global将局部名称空间直接修改全局名称空间中的数据
nonlocal将内部局部空间修改成外部局部名称空间的数据
函数名的多种用法
函数名其实绑定的也是一块内存地址只不过该地址里面存放的不是数据值而是一段代码,函数名加括号就会找到该代码并且执行函数
可以当做变量名赋值
def 函数名():pass
变量名 = 函数名
变量名()
可以当函数的参数
def 函数名():
print('数据')
def 函数名1(参数):
print (参数)
参数()
函数名1(函数名)
函数可以当做函数的返回值
def 函数名():
print(‘数据’)
def 函数名1():
print (‘数据1’)
return 函数名
变量名 = 函数名1()
print(变量名)
变量名()
函数也可以当做容器类型(可以存放多个数据的数据类型)的数据
def register():
print(‘注册功能’)
def login():
print(‘登录功能’)
def withdraw():
print(‘提现功能’)
def transfer():
print ('转账功能')
func_dict = {
'1': register
'2': login
'3': withdraw
'4': transfer
}
while Ture:
print("
1.注册功能
2.登录功能
3.提现功能
4.转账功能
")
choice = input(‘》:’).strip()
if choice = func_dict:
func_name = func_dict.get(choice)
func_name()
else:
print('功能编号不存在')
闭包函数
就是定义在函数内部的函数并且用外部函数名称空间的名字
定义在函数中,用外部函数名称空间的名字
闭包函数的使用方法
def 函数名(参数,参数):
def 函数名1():
print(参数,参数)
return 函数名1
变量名 = 函数名(参数,参数)
变量名()
装饰器简介
装饰器的概念
就是在不改变被装饰对象原代码和调用方法的情况下给被装饰的对象添加新的功能
装饰器的原理
就是由函数参数,名称空间,函数名多种用法,闭包函数组合到一起的结果
装饰器的模版
def 函数名(参数):
def 函数名1(args,**kwargs):
这里执行被装饰对象之前可以做的额外操作
变量名 = 参数(args,**kwargs)
这里执行被装饰对象之后的操作
return 变量名
return 函数名1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~