python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)
默认参数:定义函数的时候给定变量一个默认值。 def num(age=1):
位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用。
关键字参数:如果定义的函数中含有关键字参数,调用函数时必须要传如该关键字对应的实参。
不定长参数:在定义函数的时候不确定传入的参数的数量(可能是0个或多个) def num(*args,**args): (不定长参数的标志符号是*和**,args和kwargs只是变量的名字,可以改为任意的变量如(*num,**kwnum))
*+变量名1,可以接受被其他参数接受后剩下的任意的形参(不包括赋值语句),放进一个元组里,这个元组的名字是前面的变量名1(所以位置参数必须在此参数之前)
**+变量名2,可以接受被其他参数接受后剩下的任意赋值语句,放进一个字典中,这个字典的名字是前面的变量名2(所以关键字参数和默认参数必须在此参数之前,*+变量名也要在此参数之前)
测试上面的总结是否正确
def num_0(a,b,c,*args,city='beijing',name,**kwnum):
print(a,b,c,name,city,args,kwnum) # 输出的时候直接用*或者** 的变量名
num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian')
#结果
D:\pycharm_project\装饰器\venv\Scripts\python.exe D:/pycharm_project/装饰器/venv/text.py
1 2 3 jack hangzhou (4, 5, 6, 7) {'age': 18, 'country': 'haidian'} Process finished with exit code 0
最后总结
调用函数传递实参的时候,先传变量/定量,再传赋值语句(num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian'))
定义函数的时候直接按此顺序定义形参(def num_0(a,b,c,*args,city='beijing',name,**kwnum):)(位置参数,*变量名,默认参数,关键字参数,**变量名)
接下来讨论一下不定长参数中的 * 和 ** 还有什么用处
1,当在函数的形参中使用时(和上面的例子相同)
*t:将所有的其他位置的实参(变量/定量)获取,并将它们打包到元祖中,并赋值给此形参
def foo(*t):
print(t)
foo(1,2,3)
(1,2,3)
**t:将所有的其他位置的实参(赋值语句)获取,并将它们打包到字典中,并赋值给此参数
def foo(**t):
print(t)
foo(a=1,b=2)
{'x': 1, 'y': 2}
2,当在调用函数的时候使用(实参中)
*tuple_a:将此元祖的元素,当做函数调用的位置参数
def foo(a,b):
print(a,b)
tuple_a = (1,2)
foo(*tuple_a)
1,2
**dict_a:将字典中的键值对,当做函数调用的关键字参数
def foo(x, y):
print(x, y)
dict_a = {'x':1, 'y':2}
foo(**dict_a)
1,2
3,在匹配和for循环中
*x意味着‘匹配多余的元素’,x是一个列表
>>>x, *xs = (1, 2, 3, 4)
>>>xs
[2, 3, 4]
>>>x, *xs = [1, 2, 3, 4]
>>>xs
[2, 3, 4] >>> *xs, x = (, , , )
>>> xs
[, , ]
>>> x >>> x, *xs, y = (, , , )
>>> x
1
>>> xs
[, ]
>>> y
for (x, *y, z) in [ (1, 2, 3, 4) ]: print(x, y, z)
1 [2, 3] 4
4,可以用于合并字典
dict_a = {'a':1,'b':2}
dict_b = {'b':3,'c':4}
dict_c = {**dict_a,**dict_b}
print(dict_c)
{'a': 1, 'b': 3, 'c': 4}
*t 表示“获取此函数的所有其他位置参数,并将它们作为元组打包到此参数中
python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)的更多相关文章
- 详解Python函数参数定义及传参(必备参数、关键字参数、默认可省略参数、可变不定长参数、*args、**kwargs)
详解Python函数参数定义及传参(必备参数.关键字参数.默认可省略参数.可变不定长参数.*args.**kwargs) Python函数参数传参的种类 Python中函数参数定义及调用函数时传参 ...
- Python函数中参数类型
在学习Python函数的时候,函数本身的定义和调用并不是很复杂,但是函数的参数类型和用法的确有些复杂.在此做一个小结,加深理解. Python参数的定义 负责给函数提供一些必要的数据或信息,以保证函数 ...
- Python 函数中,参数是传值,还是传引用?
在 C/C++ 中,传值和传引用是函数参数传递的两种方式,在Python中参数是如何传递的?回答这个问题前,不如先来看两段代码. 代码段1: def foo(arg): arg = 2 print(a ...
- python函数中把列表(list)当参数时的"入坑"与"出坑"
在Python函数中,传递的参数如果默认有一个为 列表(list),那么就要注意了,此处有坑!! 入坑 def f(x,li=[]): for i in range(x): li.append(i*i ...
- Python函数中的可变参数
在Python函数中,还可以定义可变参数. 如:给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……. 要定义出这个函数,我们必须确定输入的参数.由于参数个数不确定,我们首先想到可以把 ...
- python函数中的不定长参数
python自定义函数中有两中不定长参数,第一种是*name,第二种是**name.加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数.加了两个星号 ** 的参数会以字典的 ...
- python函数中的参数类型
python函数中的参数 动态获取函数的参数 python的函数类型详解
- python中函数的不定长参数
例1: #定义一个含有不定长参数的函数,本例第三个参数*args def sum_nums(a,b,*args): print('_'*30) print(a) print(b) print(args ...
- python不定长参数 *argc,**kargcs(19)
在 python函数的声明和调用 中我们简单的了解了函数的相关使用,然而在函数传递参数的时候,我们埋下了一个坑,关于不定长参数的传递我们还没有讲,今天这篇文章主要就是讲解这个问题. 一.函数不定长参数 ...
随机推荐
- 3.2Adding custom methods to mappers(在映射器中添加自定义方法)
3.2Adding custom methods to mappers(在映射器中添加自定义方法) 有些情况下,我们需要实现一些MapStruct无法直接自动生成的复杂类型间映射.一种方式是复用其他已 ...
- ES6 之 Object 的方法总结
阅读:Object 1.obj的"." 或 "[]"方法 读取对象的属性或方法 对象属性的读取:ES6中被Proxy的get(target, propKey, ...
- Elasticsearch 使用集群 - 删除索引
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...
- 找《飘》 中最常用的N个单词。
找<飘> 中最常用的N个单词. 1,题目:输出单个文件(<飘> 英文版)中的前 N 个最常出现的英语单词,并将结果输入到文本文件中. 2,设计思路: 1),按行依次读取文件并按 ...
- UVA - 1213 Sum of Different Primes (不同素数之和)(dp)
题意:选择k个质数,使它们的和等于n,问有多少种方案. 分析:dp[i][j],选择j个质数,使它们的和等于i的方法数. #pragma comment(linker, "/STACK:10 ...
- POJ 1004:Financial Management
Financial Management Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 165062 Accepted: ...
- 全面介绍Windows内存管理机制及C++内存分配实例
转自:http://blog.csdn.net/yeming81/article/details/2046193 本文基本上是windows via c/c++上的内容,笔记做得不错.. 本文背景: ...
- 11 ~ express ~ 解决 cookie 中文报错的问题
使用cookies包需要注意:1,cookie中是不能有中文的,一旦有中文,就会报错2,cookie是通过 中间件的形式直接挂载到 req对象上的,那么cookies有的方法,req.cookies就 ...
- Vulkan SDK 之 Depth Buffer
深度缓冲是可选的,比如渲染一个3D的立方体的时候,就需要用到深度缓冲.Swapchain就算有多个images,此时深度缓冲区也只需要一个.vkCreateSwapchainKHR 会创建所有需要的i ...
- C#类、对象、方法和属性详解
C#类.对象.方法和属性详解 一.相关概念: 1.对象:现实世界中的实体(世间万物皆对象) 2.类:具有相似属性和方法的对象的集合 3.面向对象程序设计的特点:封装 继承 多态 4.对象的三要素:属性 ...