python函数定义错误_[转载]python之函数的使用及异常处理2021.1.30

2.1 定义函数

def 函数名(参数):

代码1

代码2

......

2.2 调⽤函数

函数名(参数)

注意:

1. 不同的需求,参数可有可⽆。

2. 在Python中,函数必须先定义后使⽤。

2.3 快速体验

需求:复现ATM取钱功能。

1. 搭建整体框架(复现需求)

print('密码正确登录成功')

# 显示"选择功能"界⾯

print('查询余额完毕')

# 显示"选择功能"界⾯

print('取了2000元钱')

# 显示"选择功能"界⾯

2. 确定“选择功能”界⾯内容

print('查询余额')

print('存款')

print('取款')

3. 封装"选择功能"

注意:⼀定是先定义函数,后调⽤函数。

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 封装ATM机功能选项 -- 定义函数

def select_func():

print('-----请选择功能-----')

print('查询余额')

print('存款')

print('取款')

print('-----请选择功能-----')

48304ba5e6f9fe08f3fa1abda7d326ab.png

4. 调⽤函数

在需要显示“选择功能”函数的位置调⽤函数。

48304ba5e6f9fe08f3fa1abda7d326ab.png

print('密码正确登录成功')

# 显示"选择功能"界⾯ -- 调⽤函数

select_func()

print('查询余额完毕')

# 显示"选择功能"界⾯ -- 调⽤函数

select_func()

print('取了2000元钱')

# 显示"选择功能"界⾯ -- 调⽤函数

select_func()

48304ba5e6f9fe08f3fa1abda7d326ab.png

三.函数的参数作⽤

思考:完成需求如下:⼀个函数完成两个数1和2的加法运算,如何书写程序?

# 定义函数

def add_num1():

result = 1 + 2

print(result)

# 调⽤函数

add_num1()

思考:上述add_num1函数只能完成数字1和2的加法运算,如果想要这个函数变得更灵活,可以计算任何⽤户指定的两个数字的和,如何书写程序?

分析:⽤户要在调⽤函数的时候指定具体数字,那么在定义函数的时候就需要接收⽤户指定的数字。函数调⽤时候指定的数字和定义函数时候接收的数字即是函数的参数。

# 定义函数时同时定义了接收⽤户数据的参数a和b,a和b是形参

def add_num2(a, b):

result = a + b

print(result)

# 调⽤函数时传⼊了真实的数据10 和 20,真实数据为实参

add_num2(10, 20)

四.函数的返回值作⽤

例如:我们去超市购物,⽐如买烟,给钱之后,是不是售货员会返回给我们烟这个商品,在函数中,如果需要返回结果给⽤户需要使⽤函数返回值。

def buy():

return '烟'

# 使⽤变量保存函数返回值

goods = buy()

print(goods)

4.1 应⽤

需求:制作⼀个计算器,计算任意两数字之和,并保存结果。

def sum_num(a, b):

return a + b

# ⽤result变量保存函数返回值

result = sum_num(1, 2)

print(result)

五.函数的说明⽂档

思考:定义⼀个函数后,程序员如何书写程序能够快速提示这个函数的作⽤?

答:注释

思考:如果代码多,我们是不是需要在很多代码中找到这个函数定义的位置才能看到注释?如果想更⽅便的查看函数的作⽤怎么办?

答:函数的说明⽂档

函数的说明⽂档也叫函数的⽂档说明。

5.1 语法

定义函数的说明⽂档

def 函数名(参数):

""" 说明⽂档的位置 """

代码

......

查看函数的说明⽂档

help(函数名)

5.2 快速体验

def sum_num(a, b):

""" 求和函数 """

return a + b

help(sum_num)

六.函数嵌套调⽤

所谓函数嵌套调⽤指的是⼀个函数⾥⾯⼜调⽤了另外⼀个函数。

示例

48304ba5e6f9fe08f3fa1abda7d326ab.png

def testB():

print('---- testB start----')

print('这⾥是testB函数执⾏的代码...(省略)...')

print('---- testB end----')

def testA():

print('---- testA start----')

testB()

print('---- testA end----')

testA()

48304ba5e6f9fe08f3fa1abda7d326ab.png

执⾏流程

7de88c2978278f37df32a2f63c8984f3.png

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

七. 变量作⽤域

变量作⽤域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量。

局部变量

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

def testA():

a = 100

print(a)

testA() # 100

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

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

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

全局变量

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

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

答:将这个数据存储在⼀个全局变量⾥⾯。

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 定义全局变量a

a = 100

def testA():

print(a) # 访问全局变量a,并打印变量a存储的数据

def testB():

print(a) # 访问全局变量a,并打印变量a存储的数据

testA() # 100

testB() # 100

48304ba5e6f9fe08f3fa1abda7d326ab.png

思考: testB 函数需求修改变量a的值为200,如何修改程序?

48304ba5e6f9fe08f3fa1abda7d326ab.png

a = 100

def testA():

print(a)

def testB():

a = 200

print(a)

testA() # 100

testB() # 200

print(f'全局变量a = {a}') # 全局变量a = 100

48304ba5e6f9fe08f3fa1abda7d326ab.png

思考:在 testB 函数内部的 a = 200 中的变量a是在修改全局变量 a 吗?

答:不是。观察上述代码发现,15⾏得到a的数据是100,仍然是定义全局变量a时候的值,⽽没有返回testB 函数内部的200。综上: testB 函数内部的 a = 200 是定义了⼀个局部变量。

思考:如何在函数体内部修改全局变量?

48304ba5e6f9fe08f3fa1abda7d326ab.png

a = 100

def testA():

print(a)

def testB():

# global 关键字声明a是全局变量

global a

a = 200

print(a)

testA() # 100

testB() # 200

print(f'全局变量a = {a}') # 全局变量a = 200

48304ba5e6f9fe08f3fa1abda7d326ab.png

八. 多函数程序执⾏流程

⼀般在实际开发过程中,⼀个程序往往由多个函数(后⾯知识中会讲解类)组成,并且多个函数共享某些数据,如下所示:

共⽤全局变量

48304ba5e6f9fe08f3fa1abda7d326ab.png

# 1. 定义全局变量

glo_num = 0

def test1():

global glo_num

# 修改全局变量

glo_num = 100

def test2():

# 调⽤test1函数中修改后的全局变量

print(glo_num)

# 2. 调⽤test1函数,执⾏函数内部代码:声明和修改全局变量

test1()

# 3. 调⽤test2函数,执⾏函数内部代码:打印

test2() # 100

48304ba5e6f9fe08f3fa1abda7d326ab.png

返回值作为参数传递

48304ba5e6f9fe08f3fa1abda7d326ab.png

def test1():

return 50

def test2(num):

print(num)

# 1. 保存函数test1的返回值

result = test1()

# 2.将函数返回值所在变量作为参数传递到test2函数

test2(result) # 50

48304ba5e6f9fe08f3fa1abda7d326ab.png

九. 函数的返回值

思考:如果⼀个函数如些两个return (如下所示),程序如何执⾏?

48304ba5e6f9fe08f3fa1abda7d326ab.png

def return_num():

return 1

return 2

result = return_num()

print(result) # 1

48304ba5e6f9fe08f3fa1abda7d326ab.png

答:只执⾏了第⼀个return,原因是因为return可以退出当前函数,导致return下⽅的代码不执⾏。

思考:如果⼀个函数要有多个返回值,该如何书写代码?

def return_num():

return 1, 2

result = return_num()

print(result) # (1, 2)

注意:

1. return a, b 写法,返回多个数据的时候,默认是元组类型。

2. return后⾯可以连接列表、元组或字典,以返回多个值。

十. 函数的参数

10.1 位置参数

位置参数:调⽤函数时根据函数定义的参数位置来传递参数。

def user_info(name, age, gender):

print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')

user_info('TOM', 20, '男')

注意:传递和定义参数的顺序及个数必须⼀致。

10.2 关键字参数

函数调⽤,通过“键=值”形式加以指定。可以让函数更加清晰、容易使⽤,同时也清除了参数的顺序需求。

def user_info(name, age, gender):

print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')

user_info('Rose', age=20, gender='⼥')

user_info('⼩明', gender='男', age=16)

注意:函数调⽤时,如果有位置参数时,位置参数必须在关键字参数的前⾯,但关键字参数之间不存在

先后顺序。

10.3 缺省参数

缺省参数也叫默认参数,⽤于定义函数,为参数提供默认值,调⽤函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调⽤)。

def user_info(name, age, gender='男'):

print(f'您的名字是{name}, 年龄是{age}, 性别是{gender}')

user_info('TOM', 20)

user_info('Rose', 18, '⼥')】

注意:函数调⽤时,如果为缺省参数传值则修改默认参数值;否则使⽤这个默认值。

十一. 函数应⽤

11.1 打印图形

1. 打印⼀条横线

def print_line():

print('-' * 20)

print_line()

2. 打印多条横线

48304ba5e6f9fe08f3fa1abda7d326ab.png

def print_line():

print('-' * 20)

def print_lines(num):

i = 0

while i < num:

print_line()

i += 1

print_lines(5)

48304ba5e6f9fe08f3fa1abda7d326ab.png

11.2 函数计算

1. 求三个数之和

def sum_num(a, b, c):

return a + b + c

result = sum_num(1, 2, 3)

print(result) # 6

2. 求三个数平均值

def average_num(a, b, c):

sumResult = sum_num(a, b, c)

return sumResult / 3

result = average_num(1, 2, 3)

print(result) # 2.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值