了解Python中的函数并学习如何定义函数
Python 是一种高级编程语言,支持多种编程范式,是广泛用于各种领域的强大工具。其中的函数是一种重要的特性,可以帮助编程者实现代码的模块化和重用,提高代码的可读性和可维护性。在本篇文章中,我们将会讲解 Python 中的函数,并学习如何定义函数。
函数的定义
函数是一组代码,它们可以接受多个输入参数,并根据这些参数执行一些预定的操作,最后返回一个结果。Python 中的函数可以通过 def 关键字进行定义,语法如下:
def function_name(parameters):
"""docstring"""
statement(s)
其中,function_name 为函数的名称,parameters 表示函数的参数,可以是多个,之间用逗号隔开。函数体以冒号开始,结束于下一行,其中的语句可以使用 return 语句来返回结果。同时,我们建议在函数开头添加一段字符串,叫做文档字符串(docstring),它可以用来描述函数的功能和使用方法。
函数的调用
定义好函数后,我们可以使用它来执行我们所需要的操作。Python 中的函数调用很简单,我们只需要输入函数名和所需参数,中间使用括号隔开即可。例如:
def greet(name):
"""Return a greeting to someone"""
print(f"Hello, {name}!")
greet("Alice") # 输出 "Hello, Alice!"
在这个例子中,我们传递一个名为 "Alice" 的字符串作为参数,函数值输出了一个包含该字符串的文本信息。
函数的参数
Python 中的函数可以接受多种类型的参数,在定义时可以通过指定参数的默认值、数量等等来灵活地调整函数的参数。常用的有以下几种:
1. 位置参数
这是我们在上面的例子中使用的参数传递方式,它的特点在于参数的顺序必须和函数定义时的顺序一致。例如,我们定义一个计算两个数和差的函数:
def arithmetic(num1, num2):
"""Return the sum and difference of two numbers"""
sum_ = num1 + num2
diff = num1 - num2
return sum_, diff
如果我们想计算 3 和 5 的和差,我们需要按照函数定义时的参数顺序传递参数,即 arithmetic(3, 5)。函数返回值为 (8, -2)。
2. 关键字参数
关键字参数是指我们在调用函数时使用参数名来传递值的方式。它的优势在于可以灵活地组合不同的参数,避免了参数顺序错误的问题。例如,我们给上面的函数增加一个布尔型参数,用来表示是否打印结果:
def arithmetic(num1, num2, print_=True):
"""Return the sum and difference of two numbers"""
sum_ = num1 + num2
diff = num1 - num2
if print_:
print(f"Sum: {sum_}, Diff: {diff}")
return sum_, diff
如果我们只想查看 2 和 4 的和差,但不打印结果,我们可以这样调用函数:
arithmetic(num1=2, num2=4, print_=False)
3. 默认参数
默认参数是一种方便的参数传递方式,它可以在定义函数时给某些参数指定默认值,这样在函数调用时可以省略这些参数。例如,我们修改上面的计算函数,将 print_ 参数设为默认为 True:
def arithmetic(num1, num2, print_=True):
"""Return the sum and difference of two numbers"""
sum_ = num1 + num2
diff = num1 - num2
if print_:
print(f"Sum: {sum_}, Diff: {diff}")
return sum_, diff
这样,我们在调用函数时可以不指定 print_ 参数的值,函数会自动采用默认值:
arithmetic(2, 4) # 输出 "Sum: 6, Diff: -2"
4. 可变参数
可变参数是一种特殊的函数参数,它可以接受任意数量的位置参数或关键字参数,并且将其变成一个元组(位置参数)或字典(关键字参数)。我们可以在参数前面加上一个 * 号(位置参数)或 ** 号(关键字参数)来实现可变参数的定义。例如:
def family_greet(*names, greeting="Hello"):
"""Greet a whole family with a custom message"""
print(greeting + ", " + ", ".join(names) + "!")
这个函数接受任意数量的位置参数,并将其组装成一个字符串。函数还接受一个名为 greeting 的关键字参数,默认为 "Hello"。我们可以这样调用该函数:
family_greet("Alice", "Bob", "Charlie", greeting="Hey") # 输出 "Hey, Alice, Bob, Charlie!"
函数的返回值
Python 中的函数可以封装计算、操作等等的逻辑,并返回这些处理后的结果。一个函数的返回值由 return 语句指定,其中可以使用一个表达式来表示函数的结果。例如,我们定义一个返回平方的函数:
def square(num):
"""Return the square of a number"""
return num ** 2
这个函数接受一个数值型参数 num,计算出它的平方并返回。我们可以这样调用该函数:
result = square(3) print(result) # 输出 "9"
同时,Python 也提供了一个返回 None 的默认返回值,它表示函数没有返回值。在函数没有特别需要返回的情况下,我们可以省略 return 语句,这个时候函数会自动返回 None。例如:
def do_nothing():
"""A function that does nothing"""
pass
我们可以这样调用该函数,查看它的返回值:
result = do_nothing() print(result) # 输出 "None"
函数的局部变量和全局变量
在Python中,函数内部和函数外部都可以定义变量。函数内部定义的变量叫做局部变量,它独立于函数之外的环境,并且只在函数内部可见。函数外部定义的变量叫做全局变量,它可以在函数内部被访问,但需要显式地使用 global 关键字声明一下。
例如:
x = 10 # 全局变量
def foo():
y = 5 # 局部变量
z = x + y # 访问全局变量需要使用 global 关键字
return z
result = foo()
print(result) # 输出 "15"
函数式编程
Python 是一种支持函数式编程的语言,它提供了许多有用的内置函数来支持函数式编程。例如,我们可以使用 map 函数来对一个序列中的所有元素进行映射计算,将序列中的每个元素作为参数传递给一个函数,并返回一个新的序列,其中每个元素是原序列中对应元素经过函数映射得到的结果。例如,我们可以这样定义一个将字符串转化为大写的函数:
def upper_case(s):
"""Convert a string to upper case"""
return s.upper()
然后可以使用 map 函数将它映射到一个字符串列表上:
names = ["Alice", "Bob", "Charlie"] names = list(map(upper_case, names)) print(names) # 输出 ['ALICE', 'BOB', 'CHARLIE']
Python 中还支持 Lambda 表达式,它是一种匿名函数,可以用来
