ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python中函数的参数详解

2022-06-28 22:34:59  阅读:178  来源: 互联网

标签:函数 传入 Python args 关键字 demo01 详解 参数 kwargs


Python中函数的参数详解

1、Python的函数参数的类型

  • 必传参数:调用函数时必须传入的参数,函数定义时只定义参数名
  • 关键字参数:传入时以函数的参数名值对的方式传入
  • 默认参数:函数定义时为参数默认设置一个值,调用时不传输参数即以默认值处理
  • 不定长参数:以*修饰或者**修饰的参数;*修饰的参数是一个元组(tuple),**修饰的参数必须是字典(dict),通常写作*args或者**args

2、Python的必传参数

  • 传入的参数个数必须与形参的数量一致
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


def demo01(a,b):
    print(a, type(a))
    print(b, type(b))


# demo01(1) #TypeError missing 1 required positional argument: 'b' 缺少一个未知的参数,demo01必须传2个参数
# demo01(1, 2, 3) #TypeError demo01() takes 2 positional arguments but 3 were given, demo01函数有2个位置参数,但是接收到了3个;
# 必传参数 : 调用函数时必须传入的参数,函数定义时只定义参数名
# 传入的参数个数必须与形参的数量一致
demo01(1, 2)      # yes
demo01(1, [1, 2])      # yes
demo01([2, 3], (1, 2))      # yes
demo01(1, {2, 3, 4})      # yes
demo01(2, {"code":'1001', "name":"zhang", "age":18})      # yes


在这里插入图片描述

3、关键字参数

  • 以参数名和参数值的关联在一起的方式进行传参,键值对的模式,参数名为键。
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


def demo01(a,b):
    print(a, type(a), end="__")
    print(b, type(b))

# 第一个关键字出入的参数位置之前的参数比逊选择关键字传参;如下面的示例中,第一个关键字传参的变量是a,a在函数定义的第二个位置,那么第二个位置之前的参数都必须以关键字传参的形式传参。
# demo01(1, a=2) # demo01() got multiple values for argument 'a'


demo01(a=1, b=2)        # yes
demo01(1, b=2)          # yes
demo01(b=1, a=2)        # yes
demo01(b=1, a=[1, 2])           # yes
demo01(b=[2, 3], a=(1, 2))      # yes
demo01(b=1, a={2, 3, 4})        # yes
demo01(b=2, a={"code":'1001', "name":"zhang", "age":18})      # yes

在这里插入图片描述

4、默认参数

  • 调用函数时不传入参数an默认值处理,传入时按传入的参数值处理
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


## 默认参数
def demo02(City = "LongNan"):
    print("City是默认参数,默认值是:中国,当前值是:", City)

# 不传入参数
demo02()
# 传入参数
demo02("Beijing")

在这里插入图片描述

5、不定长参数

  • 传入的参数会生成一个元组类型的变量供函数内部使用
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


## 不定长参数
def demo03(*args):
    print(args,type(args))

# 传入的参数会生成一个元组类型的变量供函数内部使用
demo03(1)
demo03("code")
demo03(1,"code")

在这里插入图片描述

  • 传入的参数不能少于必传参数的个数
  • *args 后面的形参,必须以关键字参数进行传参
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


# *args 后面的形参,必须以关键字参数进行传参,
def demo04(a, b, *args,c):
    print("a传入的参数值是:{},b传入的参数值是:{}, args传入的参数是:{}, c出入的参数是:{}".format(a, b, args,c))
# 传入的参数不能少于必传参数的个数,a,b,c三个为必传参数
# demo04(1, 2)      # TypeError
# demo04(1, 2, 3)   # TypeError
demo04(1, 2, c=3)

在这里插入图片描述

  • *args 之前的参数只能按位置传参,不可以关键字传参
  • 传入的参数个数比必传参数多时,首先给必传参数按位置赋值,然后将剩余的参数生成一个元组传递给args

在这里插入图片描述

  • **修饰的参数必须以关键字的参数方式传参,Python解释器会将传入的关键字和关键字的值生成一个字典供函数内部使用
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


def demo05(**kwargs):
    print("kwargs传入的参数是:{}".format(kwargs),type(kwargs))


kwargs = {"code":'1002', "name":"zhang"}

#  demo05(kwargs)   # TypeError
# **修饰的参数必须以关键字的参数方式传参,Python解释器会将传入的关键字和关键字的值生成一个字典供函数内部使用
demo05(**kwargs)                    # kwargs传入的参数是:{'code': '1002', 'name': 'zhang'} <class 'dict'>
demo05(code='1002',name="zhang")    # kwargs传入的参数是:{'code': '1002', 'name': 'zhang'} <class 'dict'>

在这里插入图片描述

  • **修饰的参数必须是最后一个
# coding:utf-8
# Time:2022/6/27 20:04
# Author:YangXiaoPeng


# **修饰的参数必须是最后一个
"""
# SyntaxError: invalid syntax
def demo06(a, b, *args, c, **kwargs, d):
    pass
"""


def demo06(a, b, *args, c, **kwargs):
    print("a传入的参数值是:{},b传入的参数值是:{}, args传入的参数是:{}".format(a, b, args),end='')
    print(",c传入的参数是:{},kwargs传入的参数是:{}".format(c,kwargs))


demo06(1, 2, 3, 4, 5, c=3, code='1002', name="zhang", d=3)

在这里插入图片描述

标签:函数,传入,Python,args,关键字,demo01,详解,参数,kwargs
来源: https://www.cnblogs.com/yyxp/p/16421433.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有