二十、Python的函数-参数

一、参数简介

参数:

argement 或parameter,对象作为输入值传递给函数的方式。

参数传递时的简要关键点:

• 参数的传递是通过自动将对象赋值给本地变量名来实现。

• 在函数内部的参数名的赋值不会影响调用着。

• 改变函数的可变对象参数的值也许会对调用者有影响。

传递参数为可变对象与不可变对象时:

不可变对象“通过值”进行传递 - 数值、字符串等

可变对象是通过“指针”进行传递 - 列表、字典等

二、参数传递

避免可变参数的修改

在这里,b[:]方式会新生成一个列表对象,因此函数里的y与setlist(b[:]) 是两个不同的对象。

输出对象方法

可以使用return来进行参数的输出。

三、特定的参数匹配模型

1、基础知识

参数传递是有特定匹配规则的:

• 位置:从左到右

• 关键字参数:通过参数名进行匹配

• 默认参数:为没有传入值的参数定义参数值

• 可变参数:收集任意多基于位置或关键字的参数 - 参数以或**开头

• 可变参数解包:传递任意多的基于位置或关键字的参数 - 传递值以或**开头

• Keyword-only参数:参数必须按照名称传递(Python3.x)

注:传递参数时,请注意顺序: 非关键字参数->关键字参数->字典参数

2、匹配语法

func(value) - 调用着常规参数:通过位置进行匹配

func(name=value) - 调用着关键字参数:通过变量名匹配

func(sequence) - 调用着迭代传递所有元素

func(**dict) - 调用着以’键’为关键字,’值‘为相应值的方式传递字典里所有元素

def func(name) - 函数常规参数:通过位置或变量名进行匹配

def func(name=value) - 函数默认参数值:如果没有在调用中传递的话

def func(name) - 函数匹配并收集(在元祖中)所有包含位置的参数

def func(*name) - 函数匹配并收集(在字典中)所有包含关键字的参数

def func(arg, name) - 函数参数必须在调用中按照关键字传递

def func(*,name=value) - 函数参数必须在调用中按照关键字传递

3、常规参数函数

常规参数,就是最简单用法。函数:

当我们调用常规参数函数时,可以使用常规参数调用、关键字参数调用、迭代调用与字典调用。

4、默认参数值函数

默认参数值,就是当我们调用函数时,没有传递相应参数值的时候,避免报错。

5、可变参数函数

可变参数,可以传递任意个参数(包含0个)*args方式是把所有常规参数调用与迭代调用放进一个元组里:

**args 方式是把任意个关键字参数与字典调用方式存放在变量名为args的字典里。

6、必须使用关键字传递

在Python3.0 开始支持必须使用关键字传递的参数设定。函数里的参数:

常规 - 有/无默认值

args - 存放在列表

**args - 存放在字典。

在Python2.x里,参数顺序必须是 0个或多个常规参数 + 0个或1个args +0个或1个args。

在Python3.0开始,在*args与args中间可以加入一个“必须使用关键字传递的参数”。

使用方法为是 0个或多个常规参数 + 或args + “必须使用关键字传递的参数”+ 0个或1个**args。

在不使用“必须使用关键字传递的参数”时,顺序与Python2.x相同。

四、特殊参数的传递

在Python里,因为函数也是对象,函数名也是变量名,因此函数本身也可以传递。写计算最大、最小值的函数时,一般用法:

之前方法要是需要计算最大值,需要再写一个函数。我们有没有特殊方法呢?

五、模拟Python3.x的print函数

我们尝试模仿Python3.x里的print函数。Python3.x的document里可以看到print函数的参数:

print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False),在这里,我们忽略flush,这个与写入到文件时有用,以下是在Python2中进行Python3.x中的print函数模拟。

下面进行测试

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190211B0J2ZN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励