美文网首页
《Python 函数》08 - 参数扩展

《Python 函数》08 - 参数扩展

作者: 波波课堂 | 来源:发表于2019-01-22 12:17 被阅读0次

相关文章

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)

相关文章

  • 《Python 函数》08 - 参数扩展

    相关文章 01 - 课程介绍及概述(挖坑待填)02 - 函数调用03 - 定义函数04 - 函数参数05 - 函数...

  • Python装饰器

    在Python里面,函数可以作为参数传入一个函数,函数也可以复制给变量,通过变量调用函数。装饰器可以扩展一个函数的...

  • 了解女朋友的心还不如去了解Python之Python装饰器

    在Python里面,函数可以作为参数传入一个函数,函数也可以复制给变量,通过变量调用函数。装饰器可以扩展一个函数的...

  • es6--函数新增

    函数的扩展 函数参数设置默认值...rest参数箭头函数Promise函数Generator 函数async函数 ...

  • ES6——参数展开

    函数的参数1 参数扩展/展开2 默认参数 参数扩展1 收集剩余的参数function show(a,b,...ar...

  • python基础-07-函数

    python基础-函数 1.函数的定义 例子: 2.python中函数的参数详解 必备参数demo: 默认参数de...

  • 函数-参数扩展

  • python:函数说明

    Python: 函数参数魔法 2016-12-01 函数参数 在 Python 中,定义函数和调用函数都很简单,但...

  • Python的参数

    Python的参数函数的参数

  • python 函数参数类型

    本文主要学习内容: python函数参数类型 python 的函数参数类型分为4种:1.位置参数:调用函数时根据函...

网友评论

      本文标题:《Python 函数》08 - 参数扩展

      本文链接:https://www.haomeiwen.com/subject/kojljqtx.html