5.0 Python 函数简介

1.函数

1.1 基本定义
定义: 将一组语句的集合通过函数进行封装, 简单来说是具有一定功能的代码容器,
想要执行这些语句, 只需要调用函数的名称即可.
特性:
* 1. 可重复使用, 减少代码冗余.
* 2. 组织结构清晰, 可读性增强.
* 3. 可扩展性提高, 便于维护.    
1.2 使用规则
函数必须先定义后使用, 将一段代码封装成函数, 在需时直接调用函数名.
定义阶段: 申请内存空间将函数体放进去, 将内存地址绑定给函数名.
调用阶段: 通过函数名得到函数体的地址, 加上括号执行函数体代码.
定义阶段时只检测语法不执行代码, 调用阶段才会执行函数体, 逻辑错误才会被检查到.
1.3 语法定义
需要关键字def声明函数, 函数后面紧跟一个括号, 括号后面紧跟':'冒号.
括号内可以写上参数, 参数是对象的标识符, 参数可以用多个, 参数之间使用逗号隔开.
:冒号下一行跟函数的代码块, 也称为函数体.
缩进, 表示代码块开始, 写代码块... 缩进结束表示代码块结束.
# 函数的定义
def 函数名(参数1, ···):  
    """
    函数的说明文档, 可以通过doc函数获取函数的信息.
    :param : 参数的说明
    :return: 返回值的说明
    """
    
    代码1...
    代码2...
    
    # 返回值
    return# 函数的调用
函数名(参数1, ...)  

定义函数和类后面需要空两行, 否则会提示PEP8规范:
: PEP8: E305 expected 2 blank lines after class or function definition, ...
: PEP8: E305类或函数定义后应有2个空行
1.4 语法检测
# 定义阶段只检测语法
def func():
	qwe  # 语法上没有错误
	# 运行程序, 程序不会报错. 
    

2022-12-09_01659

# 定义函数
def func():  
	qwe  

    
# 调用函数, 函数名加括号调用.
func()   

2022-12-09_01660

1.5 演变过程
* 1. 需要重复执行某一段代码.
print(1)
print(2)
print(3)


print(1)
print(2)
print(3)


print(1)
print(2)
print(3)

* 2. 将需要重新执行的代码进行缩进, 在代码块上面使用def关键字声明一个函数来存储代码块.
# 定义函数
def func():
    # 将需要重复执行的代码缩进
    print(1)
    print(2)
    print(3)


# 第一次调用函数
func()
# 第一次调用函数
func()
# 第一次调用函数
func()

使用pythontutor查看程序的执行过程.
* 1. 先检测函数体的语法
* 2. 调用函数, 进行参数传递, 这个没有设置参数.
* 3. 执行函数体,.

GIF 2022-12-11 7-58-49

2. 函数体地址

2.1 函数名与变量名
变量名指向变量值的内存地址, 值是一个字面常量.
函数名指向函数体的内存地址, 函数体体一段代码.
打印变量名, 引用对象本身, 打印的就是值.
print(变量名)------>  被处理  ----->   显示内存地址存放的值, 不能在加().
print(函数名) ------>  没处理 ------>   显示函数体所在内存的地址, ()执行立刻函数体.

函数可以加括号是语法定义的.
函数名 + ()---> 内存地址 +()----> 找到内存地址执行代码块.
def func():
    print(1)


print(func)  # <function func at 0x000001FC245CE0D0>
print(type(func))  # <class 'function'>   
2.2 引用函数体地址
将函数的内存地址引用绑定给其它变量.
其它的变量加上括号可以执行函数体代码.
def func1():
    print(1)  # 1


# 将 func1 的内存地址绑定给 func2.
func2 = func1
print(func1)
print(func2)

# 函数体加上括号-->找到函数体内存地址执行代码块.
func1()
func2()

2022-12-09_01661

3. 函数的类型

3.1 分类
函数的三种类型:
* 1.无参函数 函数在定义阶段括号内没有参数.
* 2.有参函数 函数在定义阶段括号内有参数, 提供参数后, 参数可以在函数体中使用.
* 3.空函数   函数在定义阶段括号内没有参数, 函数体为空(pass  ···).

函数的'参数''返回值'取决于是否需要对函数传入值与需要返回值.
'pass''···', 表示空语句, 本身没有含义, 使用它是为了符合编码的规则.
3.2 无参函数
# 定义函数, 括号内不设置参数.
def aa():
    x = 10
    y = 10
    print(x + y)  
    

# 调用函数, 括号内不需要传入参数.
aa()

3.3 有参函数
# 定义函数, 括号内设置参数. 参数是对象的标识符.
def bb(x, y):
    print(x + y)  # 提供参数后, 参数可以在函数体中使用.


# 调用参数, 括号内提供参数, 参数是一个对象, 设置几个参数就需要提供几个对象.
bb(10, 10)

2022-12-09_01662

3.4 空函数
# 空函数: 函数体是一个空语句.
def cc():
    pass  # 第一种, 兼容 Python2


# 调用空函数看不见变化的.
cc()


def dd():
	...  # 第二种, Python3 新增
    
    
dd()

4. 函数返回值

4.1 返回值
返回值是函数执行结束时返回的结果, 需要使用关键字return, 
格式: 
return 1, ...
返回值的情况:
* 1. 没有return语句, 默认为的放回值为None.
* 2. 只有return关键字, 后面没有跟参数等同return None.
* 3. 返回单个值: return 1
* 4. 返回多个值: return 1, 2, ... (多个以元组类型放回)
* 返回的值可以赋值给一个变量.
一个函数中可以没有return也可以有多个return, 只要执行一次return语句, 
立刻将return后的值返回, 并结束函数的运行.
4.2 执行return
def aa():
    return  # 运行到这一行, 直接返回None, 并结束函数的运行.
    print(666)  # 这行不会执行


# 先执行执行print(), 遇到aa()执行aa的代码块, 最后得到返回值. print再打印返回值.
print(aa())
# 使用变量接收返回值
res = aa()
print(res)

2022-12-09_01666

# 正常运行情况
def bb():
    print(123)  # 123
    # 需要代码块的某个语句执行, 它的前面不要出现retrun.
    return  


print(bb())

2022-12-09_01665

4.3 不写return
def aa():
	pass    

print(aa())  # None
4.4 只写return
def aa():
    return


# 返回值: None.
print(aa())

4.5 返回单个值
def aa():
    return 1


res = aa()
print(res, type(res))  # 1 <class 'int'>

4.6 返回多个值
def aa():
    # 返回多个值被看成是一个元组的省略写法.
    return 1, 2, 3


res = aa()
print(res, type(res))  # (1, 2, 3) <class 'tuple'>

# 元组的省略写法
num = 1, 2, 3
print(num, type(num))  # (1, 2, 3) <class 'tuple'>

4.7 返回表达式
return后面可以是一个表达式, 先执行表达式得到结果, 再将结果返回.
def aa():
    return 1 + 1


res = aa()
print(res)  # 2

4.8 解包赋值
将序列类型的返回值解包赋值给多个变量.
def ee():
    return 1, 2, 3


# 解包赋值
num1, num2, num3 = ee()  
print(num1, num2, num3)

5. 函数说明文档

help()函数: 能够打印出指定方法, 函数, 变量, 类的说明信息.
dir()函数: 能够列出对象的所有成员, 帮助你快速查找方法和变量.
.__doc__方法: 能够查看对象可以使用的方法.
def func(x, y):
    """

    :param x: 加数
    :param y: 被加数
    :return: 返回 x+y
    """
    return x + y


res = func(1, 2)
print(res)

help(func)
print(func.__doc__)

print(dir(func))

运行工具窗口显示:
3
Help on function func in module __main__:

func(x, y)
    :param x: 加数
    :param y: 被加数
    :return: 返回 x+y



    :param x: 加数
    :param y: 被加数
    :return: 返回 x+y
    
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']

2022-12-10_01667

6. 函数提示信息

函数的参数可以是任意类型但是, 但传入的值不符合要求, 就会报错.

2022-12-10_01670

为了防止传参出错, 可以设置参数提示.:
使用方法:
def 函数名(参数1: 参数1的类型, 参数2: 参数2的类型) -> 返回值的类型:
	pass
	
* 将数据类型的字面常量写上即可, 其中any表示所有类型.
def aa(x: int, y: int) -> int:
    z = x + y
    return z


aa(1, 2)

当提供的参数, 类型不符的时候会高亮提示.

2022-12-10_01671

查看参数类型方式:
* 1. 输入函数名后, 光闭第一次进入括号后, 会显示参数类型提示.
* 2. 按住Ctrl将鼠标移动到函数名下面, 会显示参数类型提示和返回值类型.

GIF 2022-12-10 1-17-56

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值