函数传参

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数传参相关的知识,希望对你有一定的参考价值。

python函数参数传递的方式:

  1. 位置传参
  2. 序列传参
  3. 关键字传参
  4. 字典关键字传参

位置传参: position argument
实际调用传递参数(实参)的对应关系与形式参数(形参)的对应关系是按位置依次对应的
示意:
def myfun(a, b, c):
pass

^ ^ ^

| | |

myfun( 1, 2, 3)
myfun(100, 200, 300)

示例见:argument_give.py

序列传参
序列传参是指在函数调用过程中,用*将序列拆解后按位置进行传递的传参方式

示例:
def myfun1(a, b, c):
pass

s1 = [10, 20, 30]

关键字传参 keyword argument
关键字传参是指传参时,按着形参的名称给形参赋值
实参和形参按名称进行匹配

示例见: keyword_argument.py

字典关键字传参:
是指实参为字典,将字典用 拆解后进行关键字传参
示例:
def myfun1(a, b, c):
pass
d1 = {"c":33, "b":22, "a":11}
myfun1(
d1)

说明:

  1. 字典的键名和形参名必须一致
  2. 字典的键名必须为字符串,且键名附合标识符规则
  3. 字典的键名要在形参中存在

函数的综合传参
函数的传参方式在能确定形参能唯一匹配到相应实参的情况,可以任意组合

说明:
位置传参和序列传参要先于关键字传参和字典关键字传参
示例:
def myfun1(a, b, c):
pass

myfun1(100, (200,300))
myfun1(
[100, 200], 300)
myfun1([100], [200, 300])

myfun1(100, c=3, b=2)
myfun1(*[100], {‘c‘:3, ‘b‘:2})
myfun1(
{‘c‘:3, ‘b‘:2}, a=100)
其它组合同学们自己尝试

错误传参:

myfun1(c=3, b=2,100)

可变类型作为函数的实参
当一个可变类型作为函数的实参数传入时,此对象可以在函数内将其改变.通常用来函数返回多个类型的数据
示例:
见 variable_argument.py

练习:
写一个函数read_numbers, 在函数内部用 input读取一些整数
把所有的偶数放入到列表even中
把所有的奇数放入到列表odd中
函数原型 如下:
def read_numbers(o, e):
...

odd=[]
even=[]
read_numbers(odd, even)
print("第一次读取后", odd, even)
read_numbers(odd, even)
print("第二次读取后", odd, even)

函数的缺省参数
语法
def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):
语句

示例见 :
default_args.py
说明:
缺省参数必须自右至左依次存在,如果一个参数有缺省参数,则其右侧的所有参数都必须有缺省参数
如:
def test_fn(a, b=10, c): # 此函数是错的
pass

练习:
写一个类似于range() 的函数myrange,此函数返回生成整数的列表.
myrange函数可以用1个,2个或3个参数来调用
def myrange(.....):
.... # 此处不能用range函数

for x in myrange(10):
print(x)
for x in myrange(5, 10):
print(x)
for x in myrange(5, 10, 2):
print(x)

函数的文档字符串:
函数内,第一行没有赋值给任何变量的是文档字符串
此文档字符串可以用 >>> help(函数名) 查看

示例:
def myfun(a, b, c=0):
"""myfun函数用于测试文档字符串
此函数有三个参数a,b,c
狗年快乐!
"""
pass

函数的属性
name属性
用来记录函数名
说明:
以双下划线"__"开头, 以下划线结尾的的标识符通常代表python的特殊变量(属性)
示例:
def abc():
pass

fn = abc
print("fn绑定的函数名是", fn.name)
print("abc绑定的函数名是", abc.name)

doc属性:
doc属性用于记录文档字符串:
示例:
def cba():
"我是cba函数的文档字符串!!!"
pass

>> help(cba)
>> print("cba.doc")
>> cba.doc

以上是关于函数传参的主要内容,如果未能解决你的问题,请参考以下文章

mybatis动态sql片段与分页,排序,传参的使用

Python 函数声明和调用

springboot开启矩阵传参MatrixVariable

第五章 shell函数的定义执行传参和递归函数

javascript函数(声明,传参,返回值,递归)

shell程序传参和main函数传参的区别