更多精彩内容,请关注同名公众:一点 sir(alittle-sir)
当咱们在编写函数时,会定义一些占位符,这些占位符就是参数,参数是函数定义中用于接管内部传递值的占位符,这个会帮忙咱们在函数被调用时接管内部传递的值。在 Python 当中,有各种各样类型的参数,次要有地位参数、默认参数、关键字参数、可变地位参数、可变关键字参数以及强制关键字参数。
地位参数
地位参数(Positional Arguments)是最常见的参数类型,也是默认的参数类型,大家平时写的函数基本上都是地位参数,算是十分好了解的。它们依照在函数定义中的程序进行传递,并且在函数调用时必须依照程序提供。
def greet(name, message):
print(message, name)
greet("Alittle", "Hello") # 输入: Hello Alittle
````
## 默认参数
默认参数(Default arguments)就是这些参数在函数定义时就有默认值,当函数被调用时,如果没有为该参数提供特定的值,那么就会应用默认值作为参数的值。通过给参数设置默认值,能够让函数在某些状况下更加灵便和方便使用。如果调用函数时没有提供该参数的值,函数就会应用默认值,否则将应用传递给参数的值。
def greet(name, message=”Hello”):
print(message, name)
应用默认参数调用函数
greet(“Alittle”) # 输入: Hello Alittle
传递特定的参数值调用函数
greet(“Kobe”, “Hi”) # 输入: Hi Kobe
须要留神的是,在 Python 中,默认参数是依照从左到右的程序顺次设置的,如果你想给第一个参数设置默认值,必须确保它位于前面的参数之前。也就是说给倒数第二个参数设置默认值,必须先给倒数第一个参数设置默认值。
def greet(name=”Iverson”, message):
print(message, name)
因为第一个参数设置了默认值,能够仅传递第二个参数
greet(“Kobe”)
以上例子运行的时候会报错:
File “D:\Program Files\JetBrains\PycharmProjects\hello.py”, line 33
def greet(name="Iverson", message):
^^^^^^^
SyntaxError: non-default argument follows default argument
尝试给第一个参数设置默认值时会呈现语法错误。这是因为在定义函数时,默认参数只能放在非默认参数的前面。所以如果咱们想给第一个参数设置默认值,能够思考应用关键字参数的形式传递参数值,或者两者参数换一下地位就能够了。## 关键字参数
关键字参数(Keyword Arguments)是一种在函数调用时应用参数名称来指定参数值的形式。应用关键字参数能够使函数调用更加清晰和易读,特地是当函数有多个参数且它们具备雷同的数据类型或默认值时。就比方下面默认参数的那个例子:
def greet(name, message):
print(message, name)
应用关键字参数调用函数
greet(name=”Iverson”, message=”Hello”) # 输入: Hello Iverson
greet(message=”Hi”, name=”Kobe”) # 输入: Hi Kobe
在上述示例中,咱们在函数调用时通过参数名称指定了参数值。这样一来,不仅能够精确传递参数,还能够使函数调用的用意更加清晰和易懂。即便函数定义中第一个参数设置了默认值,运行也不会报错。所以应用关键字参数能够显式地指定参数名称,能够防止因参数程序谬误而导致的谬误。并且只给关怀的参数传递值,而疏忽其余参数。在函数调用时提供了更好的可读性和可维护性。## 可变地位参数
可变地位参数(Variable Length Positional Arguments)是一种容许函数承受任意数量的地位参数的个性。在函数定义时,应用星号(\*)作为前缀来示意可变地位参数。它会将所有传入的地位参数打包成一个元组 (tuple)。在函数定义时,咱们能够在参数列表中应用 \*args 来接管这些参数。
def calculate_sum(*numbers):
total = 0
for num in numbers:
total += num
return total
print(calculate_sum(1, 2, 3)) # 输入: 6
print(calculate_sum(4, 5, 6, 7, 8)) # 输入: 30
另外须要留神的是,可变地位参数要放在其余参数的前面。也就是说,函数定义中先定义的参数,会依照地位程序读取实参的数值,而可变地位参数将会读取剩下的所有实参。比方你要像这样子写就会报错:
def calculate_sum(*numbers, message):
total = 0
for num in numbers:
total += num
return message, total
result = calculate_sum(1, 2, 3, “Sum=”)
print(result)
运行的话会报以下谬误
Traceback (most recent call last):
File “D:\Program Files\JetBrains\PycharmProjects\hello.py”, line 40, in <module>
result = calculate_sum(1, 2, 3, "Sum=")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: calculate_sum() missing 1 required keyword-only argument: ‘message’
## 可变关键字参数
可变关键字参数(Variable Keyword Arguments)是指在函数定义时,应用 \*\* 前缀来接管任意数量的关键字参数。有点相似 key,value 的格局,它会将所有传入的关键字参数打包成一个字典 (dict),在函数外部能够应用键值对的形式进行拜访。
def calculate_sum(args, *kwargs):
total = sum(args)
for key, value in kwargs.items():
total += value
return total
result = calculate_sum(1, 2, 3, num1=4, num2=5)
print(result) # 输入: 15
在这个示例中,`calculate_sum` 函数承受可变地位参数 `args` 和可变关键字参数 `kwargs`。可变地位参数 `args` 用于接管任意数量的地位参数,而可变关键字参数 `kwargs` 用于接管任意数量的关键字参数。在函数外部,咱们首先应用 `calculate_sum` 函数对可变地位参数 `args` 进行求和。而后,咱们遍历可变关键字参数 `kwargs`,将关键字参数的值累加到总和中。可变关键字参数提供了一种灵便的形式来解决不确定数量的关键字参数,并为函数提供更大的扩展性和适应性。## 强制关键字参数
强制关键字参数(Keyword-only arguments)是在 3.1 版本之后引入的,指在函数定义时,应用 \* 后缀来限度函数调用时必须应用关键字参数进行传递,而不容许应用地位参数。
def greet(, name, message): # 应用分隔符“”,示意前面的参数必须应用关键字传递
print(message, name)
greet(name=”Alittle”, message=”Hi”) # 关键字参数传递形式
greet(“Kobe”, “Hi”)
第一处调用 `greet` 没有问题,然而第二处调用 `greet` 就会抛出异样,报错
Traceback (most recent call last):
File “D:\Program Files\JetBrains\PycharmProjects\hello.py”, line 39, in <module>
message = greet("Kobe", "Hi")
^^^^^^^^^^^^^^^^^^^
TypeError: greet() takes 0 positional arguments but 2 were given
通过应用强制关键字参数,咱们能够明确传递参数的意义,防止参数地位的凌乱,并进步代码的可读性和健壮性。> ** 更多精彩内容,请关注同名公众:一点 sir(alittle-sir)**