Python 函数
在 Python 中,函数是一段带有名称的代码块。我们可以通过函数名调用它,函数块内的代码将被执行。函数名不能使用保留关键字。函数名必须遵循Python 标识符的定义规则。
函数参数
我们可以将一些数据传递给函数进行操作,这些数据称为函数参数。函数参数之间用逗号分隔。一个函数可以有任意数量的参数。
从函数返回数据
函数可以向调用程序返回数据。与其他流行的编程语言不同,Python 函数定义中不指定返回类型。
在 Python 中使用 def 关键字定义函数
在Python中,我们可以使用def关键字定义函数。让我们来看几个Python函数的例子。
def hello():
print('Hello World')
def add(x, y):
print(f'arguments are {x} and {y}')
return x + y基于以上示例,我们可以将函数结构定义如下。
def function_name(arguments):
# code statements
在 Python 中调用函数
我们可以通过函数名来调用它。如果函数接受参数,则必须在调用函数时传递这些参数。
hello()
sum = add(10, 5)
print(f'sum is {sum}')我们调用了自己定义的 hello() 和 add() 函数。我们还调用了 print() 函数,它是Python 的内置函数之一。
Python 函数类型
Python 中有两种类型的函数。
- 内置函数:Python 语言提供的函数,例如print()、len()、str()等。
- 用户自定义函数:我们在 Python 程序中定义的函数。
Python 函数默认参数
Python 允许为函数参数设置默认值。如果调用者没有传递参数,则使用默认值。
def hello(year=2019):
print(f'Hello World {year}')
hello(2020) # function parameter is passed
hello() # function parameter is not passed, so default value will be used输出:
Hello World 2020
Hello World 2019函数内部的多个 return 语句
一个函数可以有多个返回语句。但是,当执行到其中一个返回语句时,函数执行就会终止,并将值返回给调用者。
def odd_even_checker(i):
if i % 2 == 0:
return 'even'
else:
return 'odd'
print(odd_even_checker(20))
print(odd_even_checker(15))使用 yield 关键字逐个返回多个值
Python 函数可以逐个返回多个值。这是通过yield 关键字实现的。当需要函数返回大量值并进行处理时,这种方式非常有用。我们可以使用 yield 语句将返回值拆分成多个块。这种类型的函数也称为生成器函数。
def return_odd_ints(i):
x = 1
while x <= i:
yield x
x += 2
output = return_odd_ints(10)
for out in output:
print(out)输出:
1
3
5
7
9Python 函数中的可变参数
Python 允许在函数定义中使用三种类型的参数。
- 形式论证:也就是我们目前在例子中看到的那些论证。
- 非关键字参数的数量可变:例如,def add(*args)
- 可变数量的关键字参数或命名参数:例如,def add(**kwargs)
关于Python中的可变参数,以下是一些重要的要点:
- 参数顺序应为:形式参数、*args、**kwargs。
- 使用诸如 args 和 kwargs 之类的可变参数名并非强制性的。但是,为了提高代码的可读性,最佳实践是使用它们。
- args 类型为元组。因此,我们可以传递一个元组来与 *args 变量进行映射。
- kwargs 的类型是dict。因此,我们可以传递一个字典来与 **kwargs 变量进行映射。
以下是一个在函数中使用可变参数的简单示例。
def add(x, y, *args, **kwargs):
sum = x + y
for a in args:
sum += a
for k, v in kwargs.items():
sum += v
return sum
total = add(1, 2, *(3, 4), **{"k1": 5, "k2": 6})
print(total) # 21Python中的递归函数
当一个函数调用自身时,它被称为递归函数。这种情况在编程中被称为递归。
使用递归时务必格外小心,因为函数有可能永远无法终止,从而陷入无限循环。以下是一个使用递归打印斐波那契数列的简单示例。
def fibonacci_numbers_at_index(count):
if count <= 1:
return count
else:
return fibonacci_numbers_at_index(count - 1) + fibonacci_numbers_at_index(count - 2)
count = 5
i = 1
while i <= count:
print(fibonacci_numbers_at_index(i))
i +=了解递归固然好,但大多数情况下编程中并不需要用到它。你可以使用 for 循环或 while 循环来实现同样的功能。
函数的数据类型
Python 函数是 'function' 类的实例。我们可以使用type() 函数来检查这一点。
def foo():
pass
print(type(foo))输出:
<class 'function'>Python中的函数与方法
- Python 函数是定义它的 Python 脚本文件的一部分,而方法是在类定义中定义的。
- 如果函数位于同一模块中,我们可以直接调用它。如果函数定义在不同的模块中,我们可以先导入该模块,然后再直接调用函数。我们需要一个类或该类的对象才能调用方法。
- Python 函数可以访问所有全局变量,而Python 类方法可以访问全局变量以及类属性和函数。
- Python 函数的数据类型是 'function',而 Python 方法的数据类型是 'method'。
让我们来看一个 Python 中函数和方法的简单例子。
class Data:
def foo(self):
print('foo method')
def foo():
print('foo function')
# calling a function
foo()
# calling a method
d = Data()
d.foo()
# checking data types
print(type(foo))
print(type(d.foo))输出:
foo function
foo method
<class 'function'>
<class 'method'>Python 函数的优势
- 代码可重用性强,因为我们可以多次调用同一个函数。
- 由于我们可以为不同的任务定义不同的函数,因此代码是模块化的。
- 提高代码的可维护性
- 抽象之处在于调用者无需了解函数的具体实现。
Python中的匿名函数
匿名函数没有名称。在Python中,我们可以使用lambda关键字定义匿名函数。
def square(x):
return x * x
f_square = lambda x: x * x
print(square(10)) # 100
print(f_square(10)) # 100结论
函数是编程语言的重要组成部分。Python 函数使用 def 关键字定义。Python 函数可以接受可变数量的参数。Python 也支持匿名函数。它们可以返回单个值,也可以逐个返回多个值。