◎知识点
函数的调用之位置实参
函数的调用之关键字实参
函数的调用之实参的传递
◎脚本练习
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ @FileName: function_arguments.py @Function: python function arguments @Author: Zhihe An @Site: https://chegva.com @Time: 2021/7/4 """ """一、函数的调用之位置实参""" """ 调用函数时,可以根据每个形参在所有形参中的位置传递对应位置的实参,从而用每个实参初始化 对应位置的形参,这样的实参称为位置实参 """ def f(a, b, c): print('a =', a, 'b =', b, 'c = ', c) f(2, 5, 8) # a = 2 b = 5 c = 8 f(5, 8, 2) # a = 5 b = 8 c = 2 f(8, 5, 2) # a = 8 b = 5 c = 2 """二、函数的调用之关键字实参""" """ 调用函数时,传递的实参的形式可以为:形参名 = 实参值,从而用指定的实参值初始化指定名称的形参, 这样的实参称为关键字实参 """ def f(a, b, c): print('a = ', a, 'b = ', b, 'c = ', c) f(a = 2, b = 5, c = 8) # a = 2 b = 5 c = 8 """ 由于关键字实参中指定了形参名,所有实参和形参的匹配关系更加清晰,而且每个关键字实参在所有 关键字实参中的位置可以是任意的 """ f(b = 5, c = 8, a = 2) # a = 2 b = 5 c = 8 f(c = 8, b = 5, a = 2) # a = 2 b = 5 c = 8 """ 调用函数时,可以组合使用位置实参和关键字实参。但是,位置实参必须位于关键字实参之前,否则, 无法根据位置来匹配实参和对应的形参 """ f(2, 5, c = 8) # a = 2 b = 5 c = 8 # f(2, c = 8, 5) # SyntaxError: positional argument follows keyword argument """三、函数的调用之实参的传递""" """ 前面学习过:"变量相当于标签。对于赋值语句:变量 = 对象,相当于给对象贴了一个标签, 标签名就是变量名" 调用函数时把实参传递给形参从而用实参初始化形参,本质上执行了赋值语句:形参 = 实参对象, 相当于给实参对象贴了一个标签,标签名就是形参名 如果实参对象是可变类型,在函数体内对形参对象的任何修改其实就是对实参对象的修改 """ def f(arg1, arg2): print('初始化形参后:arg1 =', arg1, 'arg2 =', arg2) arg1 = arg1 * 2 arg2.append(4) print('修改形参后:arg1 =', arg1, 'arg2 =', arg2) i = 10 L = [1, 2, 3] print('调用函数前: i =', i, 'L =', L) # 调用函数前: i = 10 L = [1, 2, 3] f(i, L) # 初始化形参后:arg1 = 10 arg2 = [1, 2, 3] # 修改形参后:arg1 = 20 arg2 = [1, 2, 3, 4] print('调用函数后:i =', i, 'L =', L) # 调用函数后:i = 10 L = [1, 2, 3, 4] i = 10 L = [1, 2, 3] print('调用函数前: i =', i, 'L =', L) # 调用函数前: i = 10 L = [1, 2, 3] f(i, L[:]) # 初始化形参后:arg1 = 10 arg2 = [1, 2, 3] # 修改形参后:arg1 = 20 arg2 = [1, 2, 3, 4] print('调用函数后:i =', i, 'L =', L) # 调用函数后:i = 10 L = [1, 2, 3]
▽ 可变类型的实参对象1
▽ 可变类型的实参对象2