相关文章
01 - 课程介绍及概述(挖坑待填)
02 - 函数调用
03 - 定义函数
04 - 函数参数
05 - 函数返回值
06 - 练习:日历
07 - 变量作用域
08 - 参数扩展
09 - 可变参数
函数中的参数还有很多特殊的用法,比如默认值参数、关键词参数等。本节课我们就来了解一下这些知识,它们可以让函数调用更加方便,更加灵活,可以让我们编写出更加强大的代码。
由于简书在 Markdown 编辑模式下无法插入视频,所以放了视频链接:
《Python 函数》08 - 参数扩展(视频)
函数调用 - 课堂笔记
''' 默认值参数可以简化函数的调用 '''
# 普通的函数, 带有两个参数
def f1(a, b):
print(f"a = {a}, b = {b}")
# 调用函数时, 参数是按顺序传递并赋值的
f1(12, 8) # a = 12 b = 8
f1(8, 12) # a = 8 b = 12
# 可以在定义函数时, 常用的参数值设置为默认值
def f2(a, b=10):
print(f"a = {a}, b = {b}")
# 调用带有默认值的函数, 可以正常给参数按顺序赋值调用
f2(12, 8) # a = 12 b = 8
# 也可以不给默认参数传值, 会直接用我们设置的默认值赋值
f2(12) # a = 12 b = 10
''' 默认值参数只能从后往前设置 '''
# 设置参数默认值, 必须从最后一个参数开始设置
# 比如这个函数有三个参数, 只有一个参数设置了默认值, 那肯定是最后一个参数
def f3(a, b, c=3):
print(f"a = {a}, b = {b}, c = {c}")
# 比如这个函数有三个参数, 有两个参数设置了默认值, 肯定是最后两个参数
def f4(a, b=4, c=3):
print(f"a = {a}, b = {b}, c = {c}")
# 像这样没有从最后一个参数开始设置默认值, 会报错
# def f5(a, b=6, c):
# print(f"a = {a}, b = {b}, c = {c}")
''' 调用函数可以按照顺序传递参数, 也可以按照名称, 叫关键词参数 '''
def f6(a, b, c):
print(f"a = {a}, b = {b}, c = {c}")
# 按照顺序给定参数
f6(12, 8, 6) # a = 12, b = 8, c = 6
# 按照名称给定参数
f6(a=12, b=8, c=6) # a = 12, b = 8, c = 6
# 按照名称给定参数时可以打乱顺序
f6(b=8, c=6, a=12) # a = 12, b = 8, c = 6
# 也可以混合使用, 部分参数按照顺序, 部分参数按照名称
f6(12, c=6, b=8) # a = 12, b = 8, c = 6
# 在调用时, 如果使用了关键词参数, 那么后面的参数都必须使用关键词
# f6(12, c=6, 8) # 这样调用是错误的!
f6(12, c=6, b=8) # 因为参数 c 使用了关键词, 所以后边的参数 b 也必须使用关键词
''' 形式参数(形参, parameter)和实际(实参, argument)参数 '''
# 定义参数时, 参数 a 叫做形式参数
def f7(a):
print(f"a = {a}")
# 调用函数时, 实际传递的参数 15 叫做实际参数
f7(15) # 传递参数时会用实际参数给形式参数赋值 a = 15
# 在函数外定义一个变量 i
i = 14
# 定义一个函数, 在函数体内修改参数的值
def f8(a):
a = 10 # 注意此处是赋值操作
# 调用函数并将变量 i 传递给函数
f8(i) # 相当于执行了 a = i 之后, 对 a 进行修改, 不会影响 i
# 变量 i 的值并不会被改变
print(f"i = {i}")
''' 形参和实参的操作, 注意列表等特殊类型参数 '''
l = [1, 2, 3, 4]
def f9(a):
# 在函数体内使用列表的方法操作参数 a
a.append(5) # 注意此处没有赋值操作
a.remove(2) # 注意此处没有赋值操作
f9(l) # a = l 之后, 在函数体内没有给 a 重新赋值, 所以操作的是原列表 l
print(l) # l 列表发生了变化
# 对比例子
l = [1, 2, 3, 4]
def f10(a):
a = [1, 2, 3, 5, 87] # 注意此处是赋值操作
a.remove(87)
f10(l) # a = l 之后, 在函数体内重新给 a 赋值, 所以操作的列表与 l 无关
print(l) # l 列表没有变化
''' 小知识 '''
# 可以使用 id() 函数获取一个变量的唯一标识符
# id 相同的变量, 说明它们表示同一个 东西/值/对象
i = 5
print(f"i = {i}, i.id = {id(i)}")
def f(a):
print(f"a = {a}, a.id = {id(a)}") # 参数传递过来后, a 和 i 的 id 相同
a = 15
# 重新赋值后, a 的 id 发生了变化, 此时 a 和 i 已经不是同一个值
print(f"a = {a}, a.id = {id(a)}")
f(i)
print(f"i = {i}, i.id = {id(i)}") # 函数调用完毕, i 的值和 id 都没变
l = [1, 2, 3, 4]
print(f"l = {l}, l.id = {id(l)}")
def func(a):
print(f"a = {a}, a.id = {id(a)}") # 参数传递过来后, a 和 l 的 id 相同
a.append(16) # 此时往 a 中添加元素就是往 l 中添加元素 16
a = [5, 8, 4, 2]
# 重新赋值后, a 的 id 发生了变化, 此时 a 和 l 已经不是同一个列表
print(f"a = {a}, a.id = {id(a)}")
a.append(99) # 此时对 a 列表的所有操作都与 l 无关
func(l)
# 函数调用完毕, l 的 id 没变, 但是多了个元素 16
print(f"l = {l}, l.id = {id(l)}")
函数调用 - 随堂练习
函数调用 - 课件
蟹蟹童鞋们的支持哟~
(The End)
网友评论