函数

函数的结构

def 函数名(参数):
“函数注释”
函数代码
return 返回值

介绍

def

定义函数的关键字

函数名

跟变量名一样

参数

可有可无,有参数的时候要传参才能调用没有的话就不用传参调用

函数注释

说明这个函数的作用(想要的就要)

函数体代码

是函数的核心需要程序员的编写

return

使用函数之后返回给使用者renturn后的数据后面的代码也不会执行
(可有可无)

函数的定义与调用

函数的定义

函数在定义阶段只检测语法不执行代码
def 函数名():
pass

函数的调用

函数在调用阶段才会执行函数体代码

调用方式

函数名()

注意事项

函数必须先定义后才能调用
调用的时候如果有参数需要按照括号内相应的规则传递参数

函数的分类

空函数

函数体代码为空或者使用pass补全
空函数主要用于项目前期的功能框架搭建

使用方法

def 函数名():
pass

无参函数

定义函数的时候括号内没有参数

使用方法

def 函数名():
print(‘你好’)
image

有参函数

定义函数的时候括号内写了参数 调用函数的时候括号里需要传参

使用方法

def 函数名(参数):
pringt(参数)
image

函数的返回值

返回值

调用函数之后返回给调用者的结果
变量名 赋值符号 函数调用
变量名 = 函数名()

注意先执行函数然后将返回值赋值给变量名

函数返回值的多种情况

函数体代码里面没有return关键字默认返回none
函数体代码里面有return后面没有写数据也是返回none,后面写什么就返回什么
如果return后面有多个数据值则自动组织返回元组的形式
函数体代码遇到return会立刻介绍后面的代码不会执行
image

函数的参数

形式参数

在函数定义阶段括号内填写的参数介绍形参

实际形参

在函数调用阶段括号内填写的参数介绍实参

形参和实参的关系

形参

形参类似于变量名在函数定义阶段可以随便写最好见名知意要传什么数据进去

使用方法

def 函数名(name,age)
pass

实参

在函数调用阶段与形参临时绑定函数运行结束后立刻断开

调用方法

函数名(‘名字’,年龄)name与名字绑定 age与年龄绑定
image

函数参数之位置参数

当子代码只要一行并且简单的情况下可以直接在冒号后编写不用换行

位置形参

函数定义阶段括号内从左往右依次填写的变量名

方法

def 函数名(a,b,c):pass

位置实参

函数调用阶段括号内从左往右依次填写的数据值

使用方法

函数名(数据1,数据2,数据3)
a对应数据1
b对应数据2
c对应数据3

注意事项

传值不能多也不能少,关键字传参就是
函数名(a=数据,b=数据参数)可以不用按位置
但是关键字传参一定要在位置传参后面不能在前面
函数名(b=数据,数据,数据)这样是错的
image
同一个形参在调用的时候不能多次赋值
实参没有固定的定义可以传数据也可以绑定数据值的变量名

默认参数

就是这个参数可以不传(就是在定义的数据)传的话就是自己传数据

使用方法

def 函数名(name,age,gender=‘male’):
print(name,age,gender)

调用方法

函数名(名字,年龄)
函数名 (名字,年龄,性别)
image

可变长形参

加形参用来接收多个参数组织成元组赋值给号后面的形参
加形参用来接收多余的关键字参数,接收组成字典的形式赋值给号后面的形参
一般用*args和**kwargs来使用
image

可变长实参

image
image
*类似于for循环将整个循环取值的整体结果一次性传给参数
**将字典的键值对打散成关键字参数的形式传给函数

命名关键字参数(了解)

形参必须按照关键字参数传值:命名关键字参数
def 函数名(name,*args,gender=‘male’,**kwargs):
print(name,args,gender,kwargs)

调用方法

image

名称空间

变量名 = 数据
申请内存空间存储数据
给数据绑定变量名
后续通过变量名就可以访问数据

名称空间就是用来存储变量名与数据值绑定关系的地方

内置名称空间

解释器运行自动产生里面包含了很多变量名
比如:len,print,input

全局名称空间

在py文件中贴着边框的独立的就是全局名称的数据
image
name和age就是全局名称空间的数据

局部名称空间

函数体代码运行或者类体代码运行产生的空间

名称空间存活周期及作用范围(域)

什么时候消失

内置名称空间

python解释器启动就存在,关闭就消失

全局名称空间

py文件执行就创建,运行结束就消失

局部名称空间

函数代码运行就创建,函数代码运行结束就消失

作用域

内置名称空间

解释器里自带的空间

全局名称空间

py文件里的空间

局部名称空间

函数体代码里面的空间

名字的查找顺序

先搞明白自己在那个空间

在局部名称空间的时候

先找局部名称空间》全局名称空间》内置名称空间。这样的一个循序

在全局名称空间的时候

全局名称空间》内置名称空间

注意不能从大到小

相互独立的局部名称空间默认是不能互相访问的

局部名称空间嵌套

先从自己的局部名称空间查找,在去由内到外依次的查找
函数体代码的名字查找顺序在函数定义阶段就已经固定好了

global和nonlocal

global将局部名称空间直接修改全局名称空间中的数据

image

nonlocal将内部局部空间修改成外部局部名称空间的数据

image

函数名的多种用法

函数名其实绑定的也是一块内存地址只不过该地址里面存放的不是数据值而是一段代码,函数名加括号就会找到该代码并且执行函数

可以当做变量名赋值

def 函数名():pass
变量名 = 函数名
变量名()

可以当函数的参数

def 函数名():
print('数据')
def 函数名1(参数):
print (参数)
参数()
函数名1(函数名)
image

函数可以当做函数的返回值

def 函数名():
print(‘数据’)
def 函数名1():
print (‘数据1’)
return 函数名
变量名 = 函数名1()
print(变量名)
变量名()
image
image

函数也可以当做容器类型(可以存放多个数据的数据类型)的数据

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('功能编号不存在')
image

闭包函数

就是定义在函数内部的函数并且用外部函数名称空间的名字
定义在函数中,用外部函数名称空间的名字

闭包函数的使用方法

def 函数名(参数,参数):
def 函数名1():
print(参数,参数)
return 函数名1
变量名 = 函数名(参数,参数)
变量名()
image

装饰器简介

装饰器的概念

就是在不改变被装饰对象原代码和调用方法的情况下给被装饰的对象添加新的功能

装饰器的原理

就是由函数参数,名称空间,函数名多种用法,闭包函数组合到一起的结果

装饰器的模版

def 函数名(参数):
def 函数名1(args,**kwargs):
这里执行被装饰对象之前可以做的额外操作
变量名 = 参数(
args,**kwargs)
这里执行被装饰对象之后的操作
return 变量名
return 函数名1

posted @ 2023-04-19 17:32  因近  阅读(55)  评论(0编辑  收藏  举报