📜  如何将可选参数传递给Python中的函数?

📅  最后修改于: 2022-05-13 01:54:21.050000             🧑  作者: Mango

如何将可选参数传递给Python中的函数?

在Python中,当我们为某些参数定义具有默认值的函数时,据说将其参数设置为用户的选项。用户可以传递他们的值,也可以假装函数使用他们指定的默认值。

通过这种方式,用户可以通过传递那些可选参数或仅传递所需参数来调用该函数。

Python中传递可选参数主要有两种方式

  • 不使用关键字参数。
  • 通过使用关键字参数。

不使用关键字参数传递

在不使用关键字参数的情况下传递时要注意的一些要点是:

  • 应该保持参数的顺序,即在调用函数时应该保持在函数中定义参数的顺序。
  • 应传递非可选参数的值,否则会引发错误。
  • 可以传递或忽略默认参数的值。

下面是一些解释这个概念的代码。

示例 1:

Python3
# Here b is predefined and hence is optional.
def func(a, b=1098):
    return a+b
 
 
print(func(2, 2))
 
# this 1 is represented as 'a' in the function and
# function uses the default value of b
print(func(1))


Python3
# Here string2 is the default string used
def fun2(string1, string2="Geeks"):
    print(string1 + string2)
 
 
# calling the function using default value
fun2('GeeksFor')
 
# calling without default value.
fun2('GeeksFor', "Geeks")


Python3
# Here string2 is the default string used
def fun2(string1, string2="Geeks"):
    print(string1 + string2)
 
 
# Thiscan be a way where no order is needed.
fun2(string2='GeeksFor', string1="Geeks")
 
# since we are not mentioning the non-default argument
# so it will give error.
fun2(string2='GeeksFor')


Python3
def func(a, b, c='geeks'):
    print(a, "type is", type(a))
    print(b, "type is", type(b))
    print(c, "type is", type(c))
 
 
# The optional parameters will not decide
# the type of parameter passed.
# also the order is maintained
print("first call")
func(2, 'z', 2.0)
 
# below call uses the default
# mentioned value of c
print("second call")
func(2, 1)
 
# The below call (in comments) will give an error
# since other required parameter is not passed.
# func('a')
print("third call")
func(c=2, b=3, a='geeks')


Python3
def comp(a, b=2):
    if(a < b):
        print("first parameter is smaller")
    if(a > b):
        print("second parameter is smaller")
    if(a == b):
        print("both are of equal value.")
 
 
print("first call")
comp(1)
print("second call")
comp(2, 1)
print("third call")
comp(b=1, a=-1)
print("fourth call")
comp(-1, b=0)


输出:

4
1099

示例 2:我们也可以传递字符串。

蟒蛇3

# Here string2 is the default string used
def fun2(string1, string2="Geeks"):
    print(string1 + string2)
 
 
# calling the function using default value
fun2('GeeksFor')
 
# calling without default value.
fun2('GeeksFor', "Geeks")

输出:

GeeksForGeeks
GeeksForGeeks

使用关键字参数传递

当定义函数时,参数以“datatype keyword-name”的形式写入。所以Python提供了一种机制来使用关键字名称来调用函数来传递值。这有助于程序员减轻他们不了解传递参数的顺序或顺序。

我们需要记住的一些要点如下:

  • 在这种情况下,我们不需要维护传递值的顺序。
  • 传递的和声明的关键字名称之间应该没有区别。

下面是它的实现代码。

蟒蛇3

# Here string2 is the default string used
def fun2(string1, string2="Geeks"):
    print(string1 + string2)
 
 
# Thiscan be a way where no order is needed.
fun2(string2='GeeksFor', string1="Geeks")
 
# since we are not mentioning the non-default argument
# so it will give error.
fun2(string2='GeeksFor')

输出:

正如我们所看到的,我们不需要在上面的例子中维护任何顺序。此外,我们可以看到,当我们尝试仅传递可选参数时,它会引发错误。发生这种情况是因为可选参数可以省略,因为它们有默认值,但我们不能省略必需参数(在上述情况下为 string1)。因此,它显示一个带有标志的错误:“缺少 1 个必需参数”。

这个例子将提供对上述主题的更深入的了解:

蟒蛇3

def func(a, b, c='geeks'):
    print(a, "type is", type(a))
    print(b, "type is", type(b))
    print(c, "type is", type(c))
 
 
# The optional parameters will not decide
# the type of parameter passed.
# also the order is maintained
print("first call")
func(2, 'z', 2.0)
 
# below call uses the default
# mentioned value of c
print("second call")
func(2, 1)
 
# The below call (in comments) will give an error
# since other required parameter is not passed.
# func('a')
print("third call")
func(c=2, b=3, a='geeks')

输出:

first call
2 type is 
z type is 
2.0 type is 
second call
2 type is 
1 type is 
geeks type is 
third call
geeks type is 
3 type is 
2 type is 

所以基本上Python函数调用只检查是否传递了所需数量的函数参数。

下面显示了用户尝试以上述两种方式传递参数以及给出的预防措施的情况:

蟒蛇3

def comp(a, b=2):
    if(a < b):
        print("first parameter is smaller")
    if(a > b):
        print("second parameter is smaller")
    if(a == b):
        print("both are of equal value.")
 
 
print("first call")
comp(1)
print("second call")
comp(2, 1)
print("third call")
comp(b=1, a=-1)
print("fourth call")
comp(-1, b=0)

输出:

first call
first parameter is smaller
second call
second parameter is smaller
third call
first parameter is smaller
fourth call
first parameter is smaller

所以有一件事我们应该记住,关键字参数应该在所有位置参数都传递之后使用。因此,在以两种方式将参数传递给同一个函数时,我们必须牢记这一点。