目录
- 一.前言
- 二.Python 不定长参数 argc/*kargcs 简介
- 三.Python 不定长参数 argc/*kargcs 实战
- 四.Python 不定长参数 argc/*kargcs 总结
- 五.猜你喜欢
零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门
一.前言
在 Python 函数的声明和调用 中我们简单的了解了函数的相关使用,然而在函数传递参数的时候,我们埋下了一个坑,关于不定长参数的传递我们还没有讲,今天这篇文章主要就是讲解这个问题。
Python 内置函数 print,这个函数想大家都会用,观察如下代码:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 不定长参数 *argc/**kargcs.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
a = 1.0
b = False
c = "python教程 - 猿说编程"
print("a = %g" % (a))
print("a = %g b = %d" % (a,b))
print("a = %g b = %d c = %s" % (a,b,c))
'''
输出结果:
a = 1
a = 1 b = 0
a = 1 b = 0 c = python教程 - 猿说编程
'''
问题来了,内置 Python 内置函数 print 到底需要传递几个参数??
二.Python 不定长参数 argc/*kargcs 简介
Python 函数的不定长参数包含 *args 和 **kwargs ,完整实例如下:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 不定长参数 *argc/**kargcs.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
def function_print(*args,**kwargs): # 传递不定长参数,即参数个数不固定
print(args)
print(kwargs)
function_print()
'''
输出结果:
()
{}
'''
代码分析:由输出结果可以看出来,第一个形参 args 是元组 tuple 类型,第二个形参 *kwargs 是字典 dict 类型.
1.函数不定长参数**** ***args 使用**
a.形参 *args 类型是元组 tuple,外部调用函数时传递的参数不论是整数还是 BOOL 值或者是字符串 string ,实际上传递的都是元组数据;
b.如果函数形参是不定长参数,外部调用函数传递多个参数时,默认按顺序实参匹配形参,剩余的参数全部作为(元组)不定长参数传递;
c.如果没有为函数的不定长参数传递参数,默认为空元组();
示例代码如下:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 不定长参数 *argc/**kargcs.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
#普通形参
def function_print1(arg):
print("普通形参 : arg=",arg)
#不定长形参
def function_print2(*args):
print("不定长形参 : args=",args)
#普通形参 + 不定长形参
def function_print3(arg,*args):
print("普通形参 + 不定长形参 : arg=",arg)
print("普通形参 + 不定长形参 : args=",args)
function_print1(False)
function_print1("hello world")
print("***"*20)
function_print2(False)
function_print2("hello world")
print("***"*20)
function_print3(False) # 只为函数传递了一个形参,不定长参数的形参默认为空元组()
function_print3("hello world")
print("***"*20)
# 如果函数的形参是不定长参数,当外部调用函数传递多个参数时,默认按顺序匹配形参,剩余的参数全部作为不定长参数传递
function_print3(False,1,23,4,5)
function_print3("hello world",False,0,True,"python教程")
'''
输出结果:
普通形参 : arg= False
普通形参 : arg= hello world
************************************************************
不定长形参 : args= (False,)
不定长形参 : args= ('hello world',)
************************************************************
普通形参 + 不定长形参 : arg= False
普通形参 + 不定长形参 : args= ()
普通形参 + 不定长形参 : arg= hello world
普通形参 + 不定长形参 : args= ()
************************************************************
普通形参 + 不定长形参 : arg= False
普通形参 + 不定长形参 : args= (1, 23, 4, 5)
普通形参 + 不定长形参 : arg= hello world
普通形参 + 不定长形参 : args= (False, 0, True, 'python教程')
'''
2.函数不定长参数**** ****kwargs 使用**
**a.形参 **kwargs 类型是字典 dict,函数外部调用函数传递参数时需要使用关键字参数,实参写法:a=1,b=2,c=False,d=”hello”;**
b.如果函数形参是不定长参数,外部调用函数传递多个参数时,默认按顺序实参匹配形参,关键字参数全部作为(字典)不定长参数传递;
c.如果没有为函数的不定长参数传递参数,默认为空字典 {} ;
示例代码如下:
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 不定长参数 *argc/**kargcs.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
#普通函数
def function_print1(arg):
print("普通函数形参 : arg=",arg)
#普通函数不定长形参
def function_print2(**kwargs):
print("不定长形参 : args=",kwargs)
#普通函数形参 + 不定长形参
def function_print3(arg,**kwargs):
print("普通函数形参 + 不定长形参 : arg=",arg)
print("普通函数形参 + 不定长形参 : args=",kwargs)
function_print1(False)
function_print1("hello world")
print("***"*20)
function_print2(a=False)
function_print2(c="hello world")
print("***"*20)
function_print3(False)
function_print3("hello world")
print("***"*20)
function_print3(False,a=1,b=23,h=4,v=5)
function_print3("hello world",y=False,i=0,a=True,j="python教程")
'''
输出结果:
普通函数形参 : arg= False
普通函数形参 : arg= hello world
************************************************************
不定长形参 : args= {'a': False}
不定长形参 : args= {'c': 'hello world'}
************************************************************
普通函数形参 + 不定长形参 : arg= False
普通函数形参 + 不定长形参 : args= {}
普通函数形参 + 不定长形参 : arg= hello world
普通函数形参 + 不定长形参 : args= {}
************************************************************
普通函数形参 + 不定长形参 : arg= False
普通函数形参 + 不定长形参 : args= {'a': 1, 'b': 23, 'h': 4, 'v': 5}
普通函数形参 + 不定长形参 : arg= hello world
普通函数形参 + 不定长形参 : args= {'y': False, 'i': 0, 'a': True, 'j': 'python教程'}
'''
3.函数不定长参数*args 和**kwargs 只能放在形参的末尾,顺序不能错.
def function_print(arg1,*args,**kwargs): # *args,**kwargs 必须在形参的末尾,顺序不能乱
pass
三.Python 不定长参数 argc/*kargcs 实战
# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:猿说编程
@Blog(个人博客地址): www.codersrc.com
@File:Python 不定长参数 *argc/**kargcs.py
@Time:2021/3/29 07:37
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
'''
普通函数形参 + 不定长形参:
arg1:普通形参
arg1:普通形参
args:不定长参数-元组
kwargs:不定长参数-字典
'''
def function_print(arg1,arg2,*args,**kwargs):
print(arg1,arg2,args,kwargs)
function_print(False,1,b=23,h=4,v=5)
function_print("hello world",False,0,True,j="python教程",a=True)
'''
输出结果:
False 1 () {'b': 23, 'h': 4, 'v': 5}
hello world False (0, True) {'j': 'python教程', 'a': True}
'''
注意:注意参数的顺序匹配
四.Python 不定长参数 argc/*kargcs 总结
注意函数传参的三种形式:
- 1.普通传参;
- 2.缺省参数,如果外部没有为缺省参数传递实参,形参等于默认值;
- 3.注意不定长参数的拆包,普通实参打包为元组 tuple 类型,关键字参数打包为字典 dict 类型;
五.猜你喜欢
- Python 配置环境
- Python 变量
- Python 运算符
- Python 条件判断 if/else
- Python while 循环
- Python break
- Python continue
- Python for 循环
- Python 字符串
- Python 列表 list
- Python 元组 tuple
- Python 字典 dict
- Python 条件推导式
- Python 列表推导式
- Python 字典推导式
未经允许不得转载:猿说编程 » Python 不定长参数 *argc/**kargcs
本文由博客 - 猿说编程 猿说编程 发布!
2024-03-15 14:43:38【出处】:https://www.cnblogs.com/shuopython/p/14867063.html
=======================================================================================
python函数的不定长参数的详解
在Python中,函数不定长参数是指在定义函数时,能够接收任意数量的参数。这种参数可以是位置参数、关键字参数甚至是混合参数。使用不定长参数可以使函数更加灵活,能够适应不同的需求。本文将从多个角度分析如何使用Python函数的不定长参数。
一、使用*args
*args是Python中最常用的不定长参数。它用于接收任意数量的位置参数,用法如下:
```python
def func(*args):
print(args)
```
在这个例子中,我们定义了一个func函数,并使用*args接收任意数量的位置参数。函数体中使用print函数输出args,args是一个元组,其中包含了传入的所有位置参数。
我们可以传入任意数量的位置参数:
```python
func() # 输出 ()
func(1) # 输出 (1,)
func(1, 2) # 输出 (1, 2)
func(1, 2, 3) # 输出 (1, 2, 3)
```
二、使用**kwargs
**kwargs用于接收任意数量的关键字参数,用法如下:
```python
def func(**kwargs):
print(kwargs)
```
在这个例子中,我们定义了一个func函数,并使用**kwargs接收任意数量的关键字参数。函数体中使用print函数输出kwargs,kwargs是一个字典,其中包含了传入的所有关键字参数。
我们可以传入任意数量的关键字参数:
```python
func() # 输出 {}
func(a=1) # 输出 {'a': 1}
func(a=1, b=2) # 输出 {'a': 1, 'b': 2}
func(a=1, b=2, c=3) # 输出 {'a': 1, 'b': 2, 'c': 3}
```
三、使用*args和**kwargs
*args和**kwargs也可以一起使用,用法如下:
```python
def func(*args, **kwargs):
print(args)
print(kwargs)
```
在这个例子中,我们定义了一个func函数,并使用*args接收任意数量的位置参数,使用**kwargs接收任意数量的关键字参数。函数体中使用print函数分别输出args和kwargs,args是一个元组,其中包含了传入的所有位置参数,kwargs是一个字典,其中包含了传入的所有关键字参数。
我们可以传入任意数量的位置参数和关键字参数:
```python
func() # 输出 () {}
func(1) # 输出 (1,) {}
func(1, 2) # 输出 (1, 2) {}
func(a=1) # 输出 () {'a': 1}
func(a=1, b=2) # 输出 () {'a': 1, 'b': 2}
func(a=1, b=2, c=3) # 输出 () {'a': 1, 'b': 2, 'c': 3}
func(1, a=1) # 输出 (1,) {'a': 1}
func(1, 2, a=1, b=2) # 输出 (1, 2) {'a': 1, 'b': 2}
```
四、使用默认值
我们可以为不定长参数设置默认值,用法如下:
```python
def func(a, b=2, *args, **kwargs):
print(a)
print(b)
print(args)
print(kwargs)
```
在这个例子中,我们定义了一个func函数,其中a是位置参数,b是关键字参数,*args和**kwargs分别用于接收任意数量的位置参数和关键字参数。我们为b设置了默认值2。
我们可以传入任意数量的位置参数和关键字参数:
```python
func(1) # 输出 1 2 () {}
func(1, b=3) # 输出 1 3 () {}
func(1, 2) # 输出 1 2 () {}
func(1, 2, 3) # 输出 1 2 (3,) {}
func(1, 2, 3, a=1) # 输出 1 2 (3,) {'a': 1}
func(1, 2, 3, a=1, b=2) # 输出 1 2 (3,) {'a': 1, 'b': 2}
```
五、使用解包
我们可以使用解包来传递不定长参数,用法如下:
```python
def func(a, b, c):
print(a)
print(b)
print(c)
args = (1, 2, 3)
func(*args)
kwargs = {'a': 1, 'b': 2, 'c': 3}
func(**kwargs)
```
在这个例子中,我们定义了一个func函数,其中a、b、c是位置参数。我们将位置参数存储在一个元组args中,并通过解包将其传递给func函数。我们还将关键字参数存储在一个字典kwargs中,并通过解包将其传递给func函数。
我们还可以将不定长参数和其他参数一起使用解包,用法如下:
```python
def func(a, b, c, *args, **kwargs):
print(a)
print(b)
print(c)
print(args)
print(kwargs)
args = (1, 2, 3)
kwargs = {'d': 4, 'e': 5}
func(*args, **kwargs)
```
在这个例子中,我们定义了一个func函数,其中a、b、c是位置参数,*args和**kwargs分别用于接收任意数量的位置参数和关键字参数。我们将位置参数存储在一个元组args中,将关键字参数存储在一个字典kwargs中,并通过解包将它们一起传递给func函数。
出处:https://www.ycpai.cn/python/SHJGUGv3.html
标签:args,kargcs,形参,Python,argcs,参数,kwargs,print,不定 From: https://www.cnblogs.com/mq0036/p/18075391