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 插图1

二.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类型;

五.猜你喜欢

  1. Python 配置环境
  2. Python 变量
  3. Python 运算符
  4. Python 条件判断 if/else
  5. Python while循环
  6. Python break
  7. Python continue
  8. Python for循环
  9. Python 字符串
  10. Python 列表list
  11. Python 元组tuple
  12. Python 字典 dict
  13. Python 条件推导式
  14. Python 列表推导式
  15. Python 字典推导式


文章版权声明 1、本网站名称:猿说编程
2、本站永久网址:https://www.codersrc.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

© 版权声明
THE END
喜欢就支持一下吧
点赞3 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容