Python 函数
函数是一段只在被调用时运行的代码块。
你可以将数据(称为参数)传递给函数。
函数可以返回数据作为结果。
创建函数
在 Python 中,函数使用 def 关键字定义
示例
def my_function()
print("Hello from a function")
调用函数
要调用函数,请使用函数名后跟括号
参数
信息可以作为参数传递给函数。
参数在函数名之后、括号内指定。您可以添加任意数量的参数,只需用逗号分隔即可。
下面的例子有一个带有一个参数 (fname) 的函数。调用函数时,我们传递一个名字,该名字在函数内部用于打印全名
示例
def my_function(fname)
print(fname + " Refsnes")
my_function("Emil")
my_function("Tobias")
my_function("Linus")
自己动手试一试 »
参数在 Python 文档中通常缩写为args。
参数或实参?
术语参数和实参可以指代同一事物:传递给函数的信息。
从函数的角度来看
参数是函数定义中括号内的变量。
实参是在调用函数时发送到函数的值。
参数数量
默认情况下,函数必须使用正确数量的参数调用。这意味着如果你的函数需要 2 个参数,你必须用 2 个参数调用该函数,不能多也不能少。
示例
此函数需要 2 个参数,并接收 2 个参数
def my_function(fname, lname)
print(fname + " " + lname)
my_function("Emil", "Refsnes")
自己动手试一试 »
示例
此函数需要 2 个参数,但只收到 1 个
def my_function(fname, lname)
print(fname + " " + lname)
my_function("Emil")
自己动手试一试 »
任意参数,*args
如果你不知道有多少个参数将被传递到你的函数中,请在函数定义中参数名前面加上 *
。
这样函数将接收一个参数元组,并可以相应地访问其中的项
示例
如果参数数量未知,请在参数名前面加上 *
def my_function(*kids)
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")
自己动手试一试 »
任意参数在 Python 文档中通常缩写为*args。
关键字参数
你也可以使用键 = 值语法发送参数。
这样参数的顺序就不重要了。
示例
def my_function(child3, child2, child1)
print("The youngest child is " + child3)
my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
自己动手试一试 »
关键字参数在 Python 文档中通常缩写为kwargs。
任意关键字参数,**kwargs
如果你不知道有多少个关键字参数将被传递到你的函数中,请在函数定义中参数名前面加上双星号:**
。
这样函数将接收一个参数字典,并可以相应地访问其中的项
示例
如果关键字参数数量未知,请在参数名前面加上双 **
def my_function(**kid)
print("His last name is " + kid["lname"])
my_function(fname = "Tobias", lname = "Refsnes")
自己动手试一试 »
任意关键字参数在 Python 文档中通常缩写为**kwargs。
默认参数值
下面的例子展示了如何使用默认参数值。
如果我们在没有参数的情况下调用函数,它会使用默认值
示例
def my_function(country = "Norway")
print("I am from " + country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
自己动手试一试 »
将列表作为参数传递
你可以将任何数据类型(字符串、数字、列表、字典等)的参数传递给函数,它在函数内部将被视为相同的数据类型。
例如,如果你将一个列表作为参数传递,当它到达函数时它仍然是一个列表
示例
def my_function(food)
for x in food
print(x)
fruits = ["apple", "banana", "cherry"]
my_function(fruits)
自己动手试一试 »
返回值
要让函数返回值,请使用 return
语句。
示例
def my_function(x)
return 5 * x
print(my_function(3))
print(my_function(5))
print(my_function(9))
自己动手试一试 »
pass 语句
function
定义不能为空,但如果你出于某种原因有一个没有内容的 function
定义,请放置 pass
语句以避免错误。
仅位置参数
你可以指定函数只能接受仅位置参数,或只能接受关键字参数。
要指定函数只能接受仅位置参数,请在参数后添加 , /
没有 , /
,即使函数期望位置参数,你实际上也可以使用关键字参数
但添加 , /
后,如果你尝试发送关键字参数,你将收到一个错误
仅关键字参数
要指定函数只能接受仅关键字参数,请在参数之前添加 *,
没有 *,
,即使函数期望关键字参数,你也可以使用位置参数
但添加 *, /
后,如果你尝试发送位置参数,你将收到一个错误
组合仅位置参数和仅关键字参数
你可以在同一个函数中组合这两种参数类型。
/
之前的任何参数都是仅位置参数,*
之后的任何参数都是仅关键字参数。
递归
Python 也接受函数递归,这意味着一个已定义的函数可以调用自身。
递归是常见的数学和编程概念。它的意思是函数调用自身。这带来了好处,意味着你可以循环遍历数据以达到结果。
开发人员在使用递归时应非常小心,因为它很容易编写出永不终止的函数,或者使用过量内存或处理器能力的函数。然而,如果编写正确,递归可以是一种非常高效且数学上优雅的编程方法。
在这个例子中,tri_recursion() 是我们定义用来调用自身的函数(“递归”)。我们使用 k 变量作为数据,它在每次递归时递减(-1)。当条件不再大于 0(即等于 0)时,递归结束。
对于新的开发者来说,可能需要一些时间来弄清楚这究竟是如何工作的,最好的方法是通过测试和修改它。
示例
递归示例
def tri_recursion(k)
if(k > 0)
result = k + tri_recursion(k - 1)
print(result)
else
result = 0
return result
print("\n\nRecursion Example Results")
tri_recursion(6)
自己动手试一试 »