跳转至

简介

本文主要介绍python中不同类型的函数参数。

  • 位置参数
  • 可变参数
  • 默认参数
  • 命名参数(关键字参数)
  • 位置参数+命名参数(限制参数名称)

位置参数

位置参数是最直接也最简单的,需要做的就是根据自己的需求定义所需要的参数。

需求: 我们需要一个函数来对两个数字就行求和,则需要定义两个参数。

def my_sum(x,y):
    return x+y

可变参数

突然有一天,需求发生了变更,我们不仅需要支持两个数的求和,还需要支持任意个数的求和,此时我们需要使用可变参数来实现。

需求二: 定义一个函数,对任意参数个数进行求和。

def my_sum(*args):
    _sum = 0
    for num in args:
        _sum = _sum + num
    return _sum

在定义可变参数的时候,我们将*符号放在参数名之前,此时参数变为可变参数。 我们对以上函数做一些小改动,在函数内部打印出args值看一下:

def my_sum(*args):
    print(args)
    _sum = 0
    for num in args:
        _sum = _sum + num
    return _sum

通过打印出来的args可以看出,可变参数在函数内部是以tuple类型的数据存在的,所以我们可以通过for num in args的形式来访问内部的各个参数。

默认参数

默认参数是指为某些参数指定默认值,在函数调用的时候如果没有为该参数传入相应的值,则使用默认的参数值。

需求: 定义一个函数求某个数据的n次方,当未指定次方的时候,则求平方和。

def power(num, n = 2):
    res = 1
    while n > 0:
        res = res * num
        n = n - 1
    return res
# 函数调用
power(3) # 求3的平方和
power(3,3) # 求3的立方和

命名参数

命名参数是指在传入参数的时候要同时指定参数名称参数值

可变参数章节中,我们可以看到可变参数在函数内部被组织为tuple类型,命名参数在函数内部则被组织为dictionary类型。

在定义可变参数的时候,我们使用*args语法来定义,在定义命名参数的时候,我们需要使用**kwargs语法来定义。

  • 命名参数使用**符号
  • 可变参数使用*符号
def person_info(**kwargs):
    print(kwargs)
    for key,value in kwargs.items():
        print(key, ":", value)
# 调用该函数,输出名称,年龄
person_info(name="spider man", age=23)

从以上打印的结果可以看出命名参数在函数内部是以dictionary形式存在的。

位置参数+命名参数(限制参数名称)

在定义该类型函数的时候,需要使用*作为分隔符,例程如下:

def person(name,age,*,city):
    print("name:",name)
    print("age:",age)
    print("city:",city)

# 函数调用
# name,age为位置参数
# city为命名关键字参数
person("spider", 23, city="world")

python提供的subprocess.run函数原型如下:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)

subprocess.run函数原型中可以看到:

  • args为位置参数
  • *符号后面的命名关键字参数,其中参数名称已经被指定