Python学习笔记03

第五章、Python函数

函数介绍

函数

函数:是组织好的,可重复使用的,用来实现特定功能的代码段

name = "itheima"

length = len(name)

print(length)

**输出结果:**7

为什么随时都可以使用len()统计长度?

因为,len()是Python内置的函数:

  • 是提前写好的
  • 可以重复使用
  • 实现统计长度这一特定功能的代码段

我们使用过的:input()、print()、str()、int()等都是Python的内置函数

函数的快速体验

接下来,让我们实际的体验一下函数的使用。不使用内置函数len(),完成字符串长度的计算。

str1 = "itheima"

str2 = "itcast"

str3 = "python"

count = 0

for i in str1:

count += 1

print(f"字符串{str1}的长度是:{count}")

count = 0

for j in str2:

count += 1

print(f"字符串{str2}的长度是:{count}")

count = 0

for k in str3:

count += 1

print(f"字符串{str3}的长度是:{count}")

为什么要学习、使用函数呢?

为了得到一个针对特定需求、可供重复利用的代码段,提高程序的复用性减少重复性代码,提高开发效率

str1 = "itheima"

str2 = "itcast"

str3 = "python"

def my_len(data):

count = 0

for i in data:

count += 1

print(f"字符串{data}的长度是{count}")

my_len(str1)

my_len(str2)

my_len(str3)

总结

1.函数是:

组织好的、可重复使用的、用来实现特定功能的代码段

2.使用函数的好处是:

  • 将功能封装在函数内,可供随时随地重复利用
  • 提高代码的复用性,减少重复代码,提高开发效率

函数的定义

函数的定义

函数的定义:

def 函数名(传入参数):

函数体

return 返回值

函数的调用:

函数名(参数)

注意事项:

  1. 参数如不需要,可以省略
  2. 返回值如不需要,可以省略
  3. 函数必须先定义后使用

例:

def say_hi():

print("Hi 我是黑马程序员,学Python来黑马")

say_hi()

总结
  1. 函数的定义语法

def 函数名(传入参数):

函数体

return 返回值

  1. 函数使用步骤:
  • 先定义函数
  • 后调用函数
  1. 注意事项:
  • 参数不需要,可以省略
  • 返回值不需要,可以省略

练习

练习案例:自动查核酸

定义一个函数,函数名任意,要求调用函数后可以输出如下欢迎语:

欢迎来到黑马程序员!

请出示您的健康码以及72小时核酸证明!

参考代码:

def check():

print("欢迎来到黑马程序员!\n请出示您的健康码以及72小时核酸证明!")

check()

函数的参数

函数的传入参数

传入参数的功能是:在函数进行计算的时候,接受外部(调用时)提供的数据

有如下代码,完成了2个数字相加的功能:

def add():

result = 1 + 2

print(f"1 + 2的结果是:{result}")

函数的功能非常局限,只能计算1+2。

有没有可能实现:每一次使用函数,去计算用户指定的2个数字,而非每次都是1+2呢?

可以的,使用函数的传入参数功能,即可实现。

传入参数的数量是不受限制的。

  • 可以不使用参数
  • 也可以仅使用任意N个参数

函数的传入参数-传参定义

基于函数的定义语法:

def 函数名(传入参数):

函数体

return 返回值

可以有如下函数定义:

def add(x, y):

result = x + y

print(f"{x} + {y} 的结果是:{result}")

实现了,每次计算的是x+y,而非固定的1+2

x+y的值,可以在调用函数的时候指定。

函数的传入参数-语法解析

定义函数

def add(x, y):

result = x + y

print(f"{x} + {y}的计算结果是:{result}")

调用函数

add(4, 5)

语法解析:

函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数

参数之间使用逗号进行分隔

函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值

传入的时候,按照顺序传入数据,使用逗号分隔

总结

1.函数的传入参数的作用是?

在函数运行的时候,接受外部传入的数据

2.使用方式

def add(x, y):

result = x + y

print(f"{x} + {y} 的结果是:{result}")

3.注意事项

  • 函数定义中的参数,称之为形式参数
  • 函数调用中的参数,称之为实际参数
  • 函数的参数数量不限,使用逗号分隔开
  • 传入参数的时候,要和形式参数一一对应,逗号隔开

练习

练习案例:升级版自动查核酸

定义一个函数,名称任意,并接受一个参数传入(数字类型,表示体温)

在函数内进行体温判断(正常范围:小于等于37.5度),并输出如下内容:

欢迎来到黑马程序员!请出示您的健康码以及72小时核酸证明,并配合测量体温!

体温测量中,您的体温是:37.3度,体温正常请进!

欢迎来到黑马程序员!请出示您的健康码以及72小时核酸证明,并配合测量体温!

体温测量中,您的体温是:39.3度,需要隔离!

参考代码:

def check(num):

print("欢迎来到黑马程序员!请出示您的健康码证明,并配合测量体温!")

if num <= 37.5:

print(f"体温测量中,您的体温是:{num}度,体温正常请进!")

else:

print(f"体温测量中,您的体温是:{num}度,需要隔离!")

check(37.4)

函数的返回值

函数返回值的定义

什么是返回值

程序中的返回值:

def add(a,b):

result=a+b

return result

r = add(1,2)

print(r)

**输出结果:**3

如图代码

定义两数相加的函数功能。完成功能后,会将相加的结果返回给函数调用者所以,变量r接收到了函数的执行结果。

综上所述:

所谓"返回值" 就是程序中函数完成事情后,最后给调用者的结果

返回值的语法

语法格式:

def 函数(参数...):

函数体

return 返回值

变量 = 函数(参数)

如上述语法所示,变量就能接收到函数的返回值

语法就是:通过return关键字,就能向调用者返回数据

去实践一下吧:定义一个函数 完成两数相加的功能 并返回结果

例:

def add(a, b):

result = a + b

return result

r = add(5, 6)

print(r)

总结

1.什么是函数返回值?

函数在执行完成后,返回给调用者的结果

2.返回值的应用语法:

def 函数(参数...):

函数体

return 返回值

变量 = 函数(参数)

使用关键字:return来返回结果

3.注意:

函数体在遇到return后就结束了,所以写在return后的代码不会执行。

None类型
None类型

思考:如果函数没有使用return语句返回数据,那么函数有返回值吗?

实际上是:有的。

Python中有一个特殊的字面量:None,其类型是:

无返回值的函数,实际上就是返回了:None这个字面量

None表示:空的、无实际意义的意思

函数返回的None,就表示,这个函数没有返回什么有意义的内容。

也就是返回了空的意思。

演示:

def say_hi():

print("你好呀")

使用变量接收say_hi函数的返回值

result = say_hi()

打印返回值

print(f"无返回值函数,返回的内容是:{result}") # 结果None

打印返回值类型

print(f"无返回值,返回的内容类型是:{type(result)}") # 结果<class'NoneType'>

++None可以主动使用return返回,效果等同于不写return语句:++

def say_hi2():

print("你好呀")

return None

使用变量接收say_hi2函数的返回值

result = say_hi2()

打印返回值

print(f"无返回值函数,返回的内容是:{result}") # 结果None

打印返回值类型

print(f"无返回值,返回的内容类型是:{type(result)}") # 结果<class'NoneType'>

None类型的应用场景

None作为一个特殊的字面量,用于表示:空、无意义,其有非常多的应用场景。

1.用在函数无返回值上

2.用在if判断上

  • 在if判断中,None等同于False
  • 一般用于在函数中主动返回None,配合if判断做相关处理

例:

def check_age(age):

if age > 18:

return "SUCCESS"

else:

return None

result = check_age(16)

if not result:

print("未成年,不可以进入")

3.用于声明无内容的变量上

  • 定义变量,但暂时不需要变量有具体值,可以用None来代替

暂不赋予变量具体值

name = None

总结

1.什么是None

None是类型'NoneType'的字面量,用于表示:空的、无意义的

2.函数如何返回None

  • 不使用return语句即返回None
  • 主动return None

3.使用场景

  • 函数返回值
  • if判断
  • 变量定义

函数说明文档

函数说明文档

函数是纯代码语言,想要理解其含义,就需要一行行的去阅读理解代码,效率比较低。

我们可以给函数添加说明文档,辅助理解函数的作用。

语法如下:

def func(x, y):

" " "

函数说明

:param x:形参x的说明

:param y:形参y的说明

:return:返回值的说明

" " "

函数体

return 返回值

通过多行注释的形式,对函数进行说明解释

  • 内容应写在函数体之前

例:

def add (x, y):

"""

add函数可以接收两个参数,进行两数相加的功能

:param x:形参x表示相加的其中一个数字

:param y:形参y表示相加的另一个数字

:return:返回值是两数相加的结果

"""

result = x + y

print(f"两数相加的结果是:{result}")

return result

add(5, 6)

在PyCharm编写代码时,可以通过鼠标悬停,查看调用函数的使用说明文档

add(1,2) 鼠标悬停

总结

1.函数说明文档的作用是?

对函数进行说明解释,帮助更好理解函数的功能

2.定义语法

def func(x, y):

" " "

函数说明

:param x:形参x的说明

:param y:形参y的说明

:return:返回值的说明

" " "

函数体

return 返回值

  • :param用于解释参数
  • :return用于解释返回值

函数的嵌套调用

什么是函数的嵌套

所谓函数嵌套调用指的是一个函数里面又调用了另外一个函数

def func_b():

print("---2---")

def func_a():

print("---1---")

func_b()

print("---3---")

调用函数

func_a func_a()

执行结果:

---1---

---2---

---3---

执行过程:

如果函数A中,调用了另外一个函数B,那么先把函数B中的任务都执行完毕之后才会回到上次函数A执行的位置

总结

1.什么是嵌套调用

在一个函数中,调用另外一个函数

2. 执行流程

函数A中执行到调用函数B的语句,会将函数B全部执行

完成后,继续执行函数A的剩余内容

变量的作用域

局部变量

变量作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)

主要分为两类:局部变量和全局变量

所谓局部变量是定义在函数体内部的变量,即只在函数体内部生效

def test_a():

num = 100

print(num)

test_a() # 100

print(num) # 报错:name 'num' is not defined

变量a是定义在testA函数内部的变量,在函数外部访问则立即报错.

局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量

全局变量

所谓全局变量,指的是在函数体内、外都能生效的变量

思考:如果有一个数据,在函数A和函数B中都要使用,该怎么办?

答:将这个数据存储在一个全局变量里面

定义全局变量num

num = 200

def test_a():

print(f"test_a: {num}") # 访问全局变量num,并打印变量num存储的数据

def test_b():

print(f"test_b: {num}") # 访问全局变量num.并打印变量num存储的数据

test_a() # 200

test_b() # 200

print(num)

global关键字

思考: test_b函数需要修改变量num的值为200,如何修改程序?

num = 100

def test_a():

print(f"test_a: {num}")

def test_b():

num = 200

print(f"test_b: {num}")

test_a() # 100

test_b() # 200

print(f"全局变量num = {num}") # 结果全局变量num = 100

test_b函数内部的 num = 200是定义了一个局部变量

使用global关键字可以在函数内部声明变量为全局变量,如下所示

num = 100

def test_a():

print(f"test_a: {num}")

def test_b():

global 关键声明此处的num为全局变量

global num

num = 200

print(f"test_b: {num}")

test_a() # 100

test_b() # 200

print(f"全局变量num = {num}") # 结果全局变量num = 200

总结

1.什么是局部变量

作用范围在函数内部,在函数外部无法使用

2.什么是全局变量

在函数内部和外部均可使用

3.如何将函数内定义的变量声明为全局变量

  • 使用global关键字,global变量

综合案例

综合案例: 黑马ATM

主菜单效果:

------------主菜单-------------

周杰轮,您好,欢迎来到黑马银行ATM。请选择操作。

查询余额 [输入1]

存款 [输入2]

取款 [输入3]

退出 [输入4]

请输入您的选择:

查询余额效果:

------------查询余额-------------

周杰轮,您好,您的余额剩余:5000000元

存、取款效果:

------------存款-------------

周杰轮,您好,您存款50000元成功

周杰轮,您好,您的余额剩余;5050000元

-------------取款-------------

周杰轮,您好,您取款50000元成功

周杰轮,您好,您的余额剩余:4950000元

1.定义一个全局变量:money,用来记录银行卡余额(默认5000000)

2.定义一个全局变量:name,用来记录客户姓名(启动程序时输入)

3.定义如下的函数:

  • 查询余额函数
  • 存款函数
  • 取款函数
  • 主菜单函数

4.要求:

  • 程序启动后要求输入客户姓名
  • 查询余额、存款、取款后都会返回主菜单
  • 存款、取款后,都应显示一下当前余额
  • 客户选择退出或输入错误,程序会退出,否则一直运行

参考代码:

定义全局变量money name

money = 5000000

name = None

要求客户输入姓名

name = input("请输入您的姓名:")

定义查询函数

def query (show_header):

if show_header:

print("------------查询余额------------")

print(f"{name},您好,您的余额剩余:{money}元")

定义存款函数

def saving(num):

global money

money += num

print("------------存款------------")

print(f"{name},您好,您存款{num}元成功。")

query(False)

定义取款函数

def get_money(num):

global money

money -= num

print("------------取款------------")

print(f"{name},您好,您取款{num}元成功。")

query(False)

定义主菜单函数

def main():

print("------------主菜单------------")

print(f"{name},您好,欢迎来到黑马银行ATM,请选择操作:")

print("查询余额\t[输入1]")

print("存款\t\t[输入2]")

print("取款\t\t[输入3]")

print("退出\t\t[输入4]")

return input("请输入您的选择:")

设置无限循环,确保程序不退出

while True:

keyboard_input = main()

if keyboard_input == "1":

query(True)

continue

elif keyboard_input == "2":

num = int(input("您想要存多少钱?请输入:"))

saving(num) continue

elif keyboard_input == "3":

num = int(input("您想要取多少钱?请输入:"))

get_money(num)

continue

else:

print("程序退出")

break

相关推荐
夏末蝉未鸣014 分钟前
python transformers笔记(TrainingArguments类)
python·自然语言处理·transformer
德育处主任Pro8 分钟前
「py数据分析」04如何将 Python 爬取的数据保存为 CSV 文件
数据库·python·数据分析
咸鱼鲸18 分钟前
【PyTorch】PyTorch中数据准备工作(AI生成)
人工智能·pytorch·python
许白掰28 分钟前
Linux入门篇学习——Linux 编写第一个自己的命令
linux·运维·数据库·嵌入式硬件·学习
程序员Xu29 分钟前
【OD机试题解法笔记】连续出牌数量
笔记·算法·深度优先
遇见你很高兴39 分钟前
Pycharm中体验通义灵码来AI辅助编程
python
生如夏花℡43 分钟前
HarmonyOS学习记录4
学习·华为·harmonyos
大虫小呓43 分钟前
50个Python处理Excel示例代码,覆盖95%日常使用场景-全网最全
python·excel
大模型真好玩1 小时前
做题王者,实战拉跨!是时候给马斯克的Grok4泼盆冷水了!(Grok 4模型详细测评报告)
人工智能·python·mcp
羊八井1 小时前
使用 Earth2Studio 和 AI 模型进行全球天气预测:太阳辐照
pytorch·python·nvidia