Python 函数是一组相关语句,旨在执行计算、逻辑或评估任务。这个想法是将一些常见或重复完成的任务放在一起并创建一个函数,这样我们就可以一次又一次地为不同的输入编写相同的代码,而不是一次又一次地调用函数来重用其中包含的代码。
函数既可以是内置的,也可以是用户定义的。它有助于程序简洁、不重复和有条理。
语法:
def function_name(parameters):
"""docstring"""
statement(s)
return expression
我们可以使用def关键字创建一个 Python 函数。
示例:Python 创建函数
# A simple Python function
def fun():
print("Welcome to haiyong.site")
创建函数后,我们可以通过使用函数名称后跟包含该特定函数参数的括号来调用它。
示例:Python 调用函数
# A simple Python function
def fun():
print("Welcome to haiyong.site")
# Driver code to call a function
fun()
输出
Welcome to haiyong.site
参数是在函数括号内传递的值。一个函数可以有任意数量的参数,用逗号分隔。
示例:带参数的 Python 函数
在这个例子中,我们将创建一个简单的函数来检查作为参数传递给函数的数字是偶数还是奇数。
# 一个简单的 Python 函数来检查 x 是偶数还是奇数
def evenOdd(x):
if (x % 2 == 0):
print("even")
else:
print("odd")
# 调用函数的驱动代码
evenOdd(2)
evenOdd(3)
输出
even
odd
Python 支持可以在函数调用时传递的各种类型的参数。让我们详细讨论每种类型。
默认参数是一个参数,如果在该参数的函数调用中未提供值,则该参数采用默认值。以下示例说明了默认参数。
# 演示默认参数的 Python 程序
def myFun(x, y=50):
print("x: ", x)
print("y: ", y)
# 驱动程序代码(我们只用参数调用 myFun())
myFun(10)
输出
('x:', 10)
('y:', 50)
与 C++ 默认参数一样,函数中的任意数量的参数都可以具有默认值。但是一旦我们有了一个默认参数,它右边的所有参数也必须有默认值。
这个想法是允许调用者使用值指定参数名称,以便调用者不需要记住参数的顺序。
# 演示关键字参数的 Python 程序
def student(firstname, lastname):
print(firstname, lastname)
# 关键字参数
student(firstname='haiyong', lastname='blog')
student(lastname='blog', firstname='haiyong')
输出
('haiyong', 'blog')
('haiyong', 'blog')
在 Python 中,我们可以使用特殊符号将可变数量的参数传递给函数。有两个特殊符号:
# 用于说明可变数量参数的 *args 的 Python 程序
def myFun(*argv):
for arg in argv:
print(arg)
myFun('Hello', 'Welcome', 'to', 'haiyong.site')
输出
Hello
Welcome
to
haiyong.site
# 用于说明可变数量关键字参数的 *kwargs 的 Python 程序
def myFun(**kwargs):
for key, value in kwargs.items():
print("%s == %s" % (key, value))
# 驱动程序代码
myFun(first='haiyong', mid='.', last='site')
输出
first == haiyong
mid == .
last == site
函数后面的第一个字符串简称为 Document 字符串或Docstring。这用于描述函数的功能。在函数中使用 docstring 是可选的,但它被认为是一种很好的做法。
以下语法可用于打印出函数的文档字符串:
语法: print(function_name.__doc__)
# 一个简单的 Python 函数来检查 x 是偶数还是奇数
def evenOdd(x):
"""检查数字是偶数还是奇数的功能"""
if (x % 2 == 0):
print("even")
else:
print("odd")
# Driver code to call the function
print(evenOdd.__doc__)
输出
检查数字是偶数还是奇数的功能
函数 return 语句用于退出函数并返回到函数调用者,将指定的值或数据项返回给调用者。
语法: return [表达式列表]
return 语句可以包含一个变量、一个表达式或一个在函数执行结束时返回的常量。如果 return 语句不存在上述任何一项,则返回 None 对象。
def square_value(num):
"""此函数返回输入数字的平方值"""
return num**2
print(square_value(2))
print(square_value(-4))
输出:
4
16
需要注意的重要一点是,在 Python 中,每个变量名都是一个引用。当我们将变量传递给函数时,会创建对该对象的新引用。Python中的参数传递与Java中的引用传递相同。
例子:
# 这里 x 是对相同列表 lst 的新引用
def myFun(x):
x[0] = 20
# 驱动程序代码(注意 lst 在函数调用后被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst)
输出
[20、11、12、13、14、15]
当我们传递一个引用并将接收到的引用更改为其他东西时,传递和接收参数之间的连接就会中断。例如,考虑下面的程序。
def myFun(x):
# 在下面的 x 与前一个对象的链接被破坏后,一个新对象被分配给 x。
x = [20, 30, 40]
# 驱动程序代码(注意:函数调用后 lst 不会被修改)
lst = [10, 11, 12, 13, 14, 15]
myFun(lst)
print(lst)
输出
[10、11、12、13、14、15]
另一个例子来证明如果我们分配一个新值(在函数内部),引用链接会被破坏。
def myFun(x):
# 在下面的 x 与前一个对象的链接被破坏后,一个新对象被分配给 x。
x = 20
# 驱动程序代码(请注意,函数调用后 lst 不会被修改)
x = 10
myFun(x)
print(x)
输出
10
练习:尝试猜测以下代码的输出。
def swap(x, y):
temp = x
x = y
y = temp
# 驱动程序代码
x = 2
y = 3
swap(x, y)
print(x)
print(y)
输出
2
3
在 Python 中,匿名函数意味着函数没有名称。我们已经知道 def 关键字用于定义普通函数,而 lambda 关键字用于创建匿名函数。
# 使用 lambda 函数说明数字立方的 Python 代码
def cube(x): return x*x*x
cube_v2 = lambda x : x*x*x
print(cube(7))
print(cube_v2(7))
输出
343
在另一个函数内部定义的函数称为内部函数或嵌套函数。嵌套函数能够访问封闭范围的变量。使用内部函数是为了保护它们免受函数外部发生的所有事情的影响。
# 用于演示访问嵌套函数变量的 Python 程序
def f1():
s = '我爱中国'
def f2():
print(s)
f2()
# 驱动程序代码
f1()
输出
我爱中国