Python函数中的参数(二)

news/2024/7/8 6:39:53

当使用混合特定的参数匹配模型时,Python将会遵循以下有关顺序的法则:

1、在函数调用中,参数必须以这样的顺序出现:任何位置参数(Value)、任何关键字参数(name = Value)和*sequence形式的组合,最后是**dict形式

2、在函数头部,参数必须以如下的顺序出现:任何一般参数、任何默认参数、如果有的话,是*name(在Python3.0中是*)的形式,然后是任何name或name=value keyword-only参数,最后是**name形式

 

Python内部是使用以下的步骤来在赋值前进行参数匹配的:

1、通过位置分配非关键字参数

2、通过匹配变量名分配关键字参数

3、其他额外的非关键字参数分配到*name元组中

4、其他额外的关键字参数分配到**name字典中

5、用默认值分配给在头部未得到分配的参数

例子:

1、不含有特殊匹配法的函数,会按照位置从左至右的匹配变量名

1 def f(a, b, c):
2     print(a, b, c)
3 f(1,2,3)
4 
5 #输出结果
6 1 2 3

2、关键字参数的匹配

1 def f(a, b, c):
2     print(a, b, c)
3 
4 f(c = 3, b = 2, a = 1)
5 
6 #输出结果
7 1 2 3

3、默认参数

1 def f(a, b = 2, c = 3):
2     print(a, b, c)
3 
4 f(1)
5 
6 #输出结果
7 1 2 3
 1 def f(a, b = 2, c = 3):
 2     print(a, b, c)
 3 
 4 f(1,4)
 5 输出结果:
 6 1 4 3
 7 
 8 f(1,c = 6)
 9 
10 输出结果:
11 1 2 6

4、关键字参数和默认参数的混合

 1 def func(spam, eggs, toast = 0, ham = 0):
 2     print((spam,eggs,toast,ham))
 3 
 4 func(1,2)
 5 #输出结果
 6 (1, 2, 0, 0)
 7 
 8 func(1, ham = 1, eggs = 0)
 9 #输出结果
10 (1, 0, 0, 1)
11 
12 func(spam = 1, eggs = 0)
13 #输出结果
14 (1, 0, 0, 0)
15 
16 func(1,2,3,4)
17 #输出结果
18 (1, 2, 3, 4)

5、任意参数的实例

def func(*args):
    print("#输出结果")
    print(args)

func()
#输出结果
()

func(1)
#输出结果
(1,)

func(1,2,3,4)
#输出结果
(1, 2, 3, 4)
 1 def f(**args):
 2     print("#输出结果")
 3     print(args)
 4 
 5 f()
 6 #输出结果
 7 {}
 8 
 9 f(a = 1, b = 2)
10 #输出结果
11 {'a': 1, 'b': 2}

6、混合参数实例

1 def f(a, *pargs, **kargs):
2     print("#输出结果:")
3     print(a, pargs, kargs)
4 
5 f(1, 2, 3, x = 1, y = 2)
6 #输出结果:
7 1 (2, 3) {'y': 2, 'x': 1}

 

转载于:https://www.cnblogs.com/dgq-blog/p/6231145.html


http://www.niftyadmin.cn/n/4308590.html

相关文章

.NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全。所以一直非常喜欢,才写了几篇文章推荐给大家。最近在计算…

nfs 搭建

nfs 搭建yum install nfs-utils rpcbind 修改配置文件 /etc/exports格式 每个共享的文件系统需要独立一行目录客户端主机列表需要使用空格隔开配置文件中支持通配符 语法结构 共享路径 客户端主机(选项) 默认设置 ro,sync,wdelay,root_squash 对应表ro 只…

Android AudioManager 音频管理

<?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-auto"xmlns:tools"http://schemas.android.com/too…

.NET平台开源项目速览(12)哈希算法集合类库HashLib

.NET的System.Security.Cryptography命名空间本身是提供加密服务&#xff0c;散列函数&#xff0c;对称与非对称加密算法等功能。实际上&#xff0c;大部分情况下已经满足了需求&#xff0c;而且.NET实现的都是目前国际上比较权威的&#xff0c;标准化的算法&#xff0c;所以还…

BZOJ 1004 【HNOI2008】 Cards

题目链接&#xff1a;Cards 听说这道题是染色问题的入门题&#xff0c;于是就去学了一下\(Burnside\)引理和\(P\acute{o}lya\)定理(其实还是没有懂)&#xff0c;回来写这道题。 由于题目中保证"任意多次洗牌都可用这\(m\)种洗牌法中的一种代替"&#xff0c;于是有了封…

.NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来。因为AForge.NET更注重与一些底层和广度&#xff0c;而Accord.NET Framework更注重与机器学习算法以及提供计算机视频、音频、信号处理以及统计应用相关的解决方案。该项目使用C#语言编写&#xff0c;项目…

Node.js 自学之旅(初稿篇)

学习基础,JQuery 原生JS有一定基础,有自己一定技术认知(ps:原型链依然迷糊中.闭包6不起来!哎!) 当然最好有语言基础,C#,java,PHP等等.. 最初学习这个东西的原因很简单,在园子里面看到一篇关于node编写的小爬虫 的文章,没想到这个可以做一些服务自己的东西而不是公司那些服务用户…

C语言 · 回文数 · 基础练习

问题描述1221是一个非常特殊的数&#xff0c;它从左边读和从右边读是一样的&#xff0c;编程求所有这样的四位十进制数。输出格式按从小到大的顺序输出满足条件的四位十进制数。代码如下&#xff1a;注意&#xff1a;这里要提醒一下读者&#xff1a;蓝桥杯都是在线提交&#xf…