Python函数中的参数和返回值是怎样的?
Python中的函数是一段可重复使用的代码块,它可以接受一些输入参数,并在运行时计算出并返回一些输出结果。函数的参数和返回值是函数中至关重要的部分,对于实现编写高效的函数至关重要。下面我们来详细讨论一下Python函数中的参数和返回值。
1. 函数参数
函数参数是指函数定义时传入函数中的值。在Python中有四种类型的函数参数:位置参数、默认参数、可变长位置参数和可变长关键字参数,下面我们来一一介绍。
1.1 位置参数
位置参数是指函数定义时定义的参数列表中需要按照顺序进行传入的参数。例如下面的函数定义:
def greeting(name, age):
print("Hello, ", name, ". You are ", age, " years old.")
这个函数定义了两个位置参数:name和age。调用这个函数时,必须按照定义时函数参数列表的顺序给参数进行传递,例如:
greeting("Tom", 20)
这个函数调用会打印出:Hello, Tom. You are 20 years old.。我们可以看到,传递的 个参数"Tom"被赋给了函数定义中的 个参数name,第二个参数20被赋给了函数定义中的第二个参数age。
1.2 默认参数
默认参数是指在函数定义中,为某些参数指定了默认值。这些参数可以在调用函数时不进行传递,函数会使用定义时指定的默认值。例如下面的函数定义:
def greeting(name, age=18):
print("Hello, ", name, ". You are ", age, " years old.")
这个函数定义了一个默认参数age,当调用这个函数时,可以只给name传递值,age参数会使用默认值18。例如:
greeting("Tom")
这个函数调用会和前面的一样打印出:Hello, Tom. You are 18 years old.。
我们也可以修改默认参数的值。例如下面重新调用greeting函数:
greeting("Tom", 20)
这个函数调用会打印出:Hello, Tom. You are 20 years old.。在这个函数调用中,我们传递了两个参数, 个参数"Tom"被赋给了 个位置参数name,第二个参数20被赋给了第二个参数age,并覆盖了默认参数的值18。
当定义函数时,一定要把默认参数放在参数列表的最后面,例如下面这个例子会引起语法错误:
def greeting(age=18, name):
print("Hello, ", name, ". You are ", age, " years old.")
1.3 可变长位置参数
可变长位置参数是指可以接受任意数量的位置参数的函数参数,这些位置参数将以元组(tuple)形式传递进函数。可变长位置参数使用一个单个星号(*)表示。例如下面的函数定义:
def greeting(*names):
print("Hello, ", end="")
for name in names:
print(name, end=", ")
print("how are you?")
这个函数定义了一个可变长位置参数names,它可以接受任意数量的参数,并在函数体中使用一个for循环将这些参数打印到屏幕上。
例如调用这个函数:
greeting("Tom", "Jerry", "Spike")
这个函数调用会打印出:Hello, Tom, Jerry, Spike, how are you?。我们可以看到,这个函数接受了三个参数"Tom"、"Jerry"和"Spike",将它们打印到屏幕上。
需要注意的是,可变长位置参数必须放在所有参数的最后面,例如下面这个例子会引起语法错误:
def greeting(*names, age):
print("Hello, ", end="")
for name in names:
print(name, end=", ")
print("You are ", age, " years old.")
1.4 可变长关键字参数
可变长关键字参数是指可以接受任意数量的关键字参数(通过键值对的形式传入函数),这些关键字参数将以字典(dictionary)的形式传递进函数。可变长关键字参数使用两个星号(**)表示。
例如下面的函数定义:
def user_information(**kwargs):
for key, value in kwargs.items():
print(key, ": ", value)
这个函数定义了一个可变长关键字参数kwargs,它可以接受任意数量的键值对参数,并在函数体中使用for循环将这些参数打印到屏幕上。例如调用这个函数:
user_information(name="Tom", age=20, gender="male")
这个函数调用会输出:
name : Tom age : 20 gender : male
当然,这个函数还可以使用位置参数和默认参数进行定义。例如下面的函数定义:
def user_information(name, age=18, **kwargs):
print("Name: ", name)
print("Age: ", age)
for key, value in kwargs.items():
print(key, ": ", value)
这时调用这个函数的方式可以是:
user_information("Tom", age=20, gender="male")
这个函数调用会输出:
Name: Tom Age: 20 gender : male
我们可以看到,在这个函数调用中,把name参数赋值为"Tom",把age参数赋值为20,并使用可变长关键字参数gender将"male"传递给函数。
2. 函数返回值
函数返回值是指函数计算结果后返回给函数调用者的值。在Python中,函数可以返回任意类型的值,包括字符串、数字、列表、元组、字典、布尔类型等等。
2.1 返回单值
当函数只需要返回一个值时,我们可以使用return语句返回一个值。例如下面的函数定义:
def add(a, b):
return a + b
这个函数定义了两个位置参数:a和b,计算这两个参数的和,并将结果返回。
例如调用这个函数:
result = add(1, 3) print(result)
这个函数调用会输出:4。我们可以看到,在这个函数调用中,返回值4被存储到了变量result中,然后打印到了屏幕上。
2.2 返回多值
有时我们需要从函数中返回多个值,比如返回条目的最大值和最小值等。在Python中,可以通过元组(tuple)来实现返回多个值。例如下面的函数定义:
def max_min(items):
return max(items), min(items)
这个函数接受一个参数items,它是一个可迭代的对象。这个函数首先使用Python内置的max()函数和min()函数分别计算出items中的最大和最小值,并将它们作为元组一起返回。
例如调用这个函数:
result = max_min([1, 2, 3, 4, 5]) print(result)
这个函数调用会输出:(5, 1)。我们可以看到,在这个函数调用中,返回的是一个元组,包含了最大值和最小值。
2.3 没有返回值
有时我们定义的函数并不需要返回值,这样当函数执行完后就可以直接返回。在Python中,如果一个函数没有return语句,或是return语句中没有参数,那么函数将返回None。例如下面的函数定义:
def hello(name):
print("Hello, ", name)
这个函数接受一个参数name,进入函数后将会打印出"Hello, "和传入的参数name。
例如调用这个函数:
`
result = hello("Tom")
