python基础--函数

1. 函数的定义和调用

函数是Python中的一个重要概念,当需要重复执行同一段代码的时候,我们就需要定义函数。在Python中,函数定义的关键字是def,下面是一个简单的例子:

def greet():

print("Hello, world!")

greet()

在上面的例子中,我们定义了一个名为greet的函数,函数体内是一条打印语句。在函数定义完成后,我们通过greet()进行函数的调用,程序将会输出Hello, world!

一个函数可以有多个输入参数,在函数体内,这些参数可以当做局部变量使用。例如:

def greet(name):

print("Hello, " + name + "!")

greet("Alice")

greet("Bob")

上面的例子中我们把greet函数改造成了一个有参数的函数,参数的值可以在调用函数时指定。在第一次调用函数时,我们传递了"Alice"做为name参数的值;在第二次调用函数时,我们传递了"Bob"做为name参数的值。

1.1 函数的返回值

函数在执行完后可以返回一个值,这个值可以被赋值给一个变量。下面是一个例子:

def add(x, y):

result = x + y

return result

sum = add(1, 2)

print(sum)

在上面的例子中我们定义了一个add函数,这个函数接收两个参数并返回它们相加的结果。我们调用add函数并将返回值赋值给了sum,之后输出了sum的值3

2. 函数的参数

2.1 必需参数

必需参数是指那些在函数调用时必须传入的参数,如果没有传入这些参数,Python解释器将不能正常执行程序。下面是一个例子:

def greet(name, age):

print("Hello, " + name + "! You are " + age + " years old.")

greet("Alice", "18")

在这个例子中,函数greet接收两个必需参数:name和age。如果我们不提供这些参数,函数将会抛出TypeError异常。TypeError: greet() missing 2 required positional arguments: 'name' and 'age'

2.2 关键字参数

关键字参数是指那些在函数调用时加上参数名传入的参数。使用关键字参数可以消除参数传递时的顺序影响,同时方便了代码的阅读和维护。下面是一个例子:

def greet(name, age):

print("Hello, " + name + "! You are " + age + " years old.")

greet(age="18", name="Alice")

在上面的例子中,我们通过关键字参数为函数正确的传递了参数,并输出了正确的结果。

2.3 默认参数

默认参数是指那些在函数定义时就已经指定了默认值的参数。如果调用函数时没有传递这些参数,那么函数将使用它们的默认值。下面是一个简单的例子:

def greet(name, age=18):

print("Hello, " + name + "! You are " + str(age) + " years old.")

greet("Alice")

greet("Bob", 20)

在这个例子中,我们给greet函数的age参数指定了默认值18。在第一次调用函数时,我们没有传递age参数,所以函数使用了参数的默认值18;在第二次调用函数时,我们覆盖了默认值,传递了20做为age参数的值。

2.4 可变参数

可变参数是指那些数量不定的参数。在Python中,可以通过在函数定义时,在参数前面加上*使得这些参数可以被当做一个元组来处理。下面是一个例子:

def sum(*args):

result = 0

for arg in args:

result += arg

return result

print(sum(1, 2, 3, 4, 5))

在上面的例子中,我们定义了一个sum函数,可以接收任意多个参数,并将它们相加,返回所有参数的和。我们调用了sum函数,并传递了5个参数,输出了它们的和。

2.5 关键字可变参数

关键字可变参数是指那些数量不定的关键字参数,可以通过在函数定义时,在参数前面加上双*使得这些参数可以被当做一个字典来处理。下面是一个例子:

def describe_person(name, **kwargs):

print("Name: " + name)

for key, value in kwargs.items():

print(key + ": " + str(value))

describe_person("Alice", age=18, occupation="Student")

在上面的例子中,我们定义了一个describe_person函数,可以接收一个必需参数name和任意多个关键字参数,然后打印出所有参数的值。我们调用了describe_person函数,并传递了ageoccupation两个关键字参数。

3. 匿名函数

匿名函数是指那些没有函数名的函数。在Python中,可以使用lambda关键字来定义一个匿名函数。下面是一个简单的例子:

sum = lambda x, y: x + y

print(sum(1, 2))

在上面的例子中,我们使用lambda定义了一个匿名函数,这个函数接收两个参数xy并返回它们的和。我们将这个匿名函数赋值给sum变量,并通过sum调用这个函数,并输出了它的返回值3

4. 递归函数

递归函数是指那些调用自身的函数,它们通常用于解决递归问题,例如计算阶乘和斐波那契数列等。下面是一个计算阶乘的递归函数:

def factorial(n):

if n == 0:

return 1

else:

return n * factorial(n-1)

print(factorial(5))

在上面的例子中,我们定义了一个factorial函数,它用于计算一个整数的阶乘。在函数内部,我们使用了递归调用来计算结果。我们调用factorial函数,并传递参数5,输出了它的返回值120

5. 函数的高级特性

5.1 将函数作为参数传递

在Python中,可以将一个函数作为另一个函数的参数来使用。这个特性称为函数作为参数或者高阶函数。下面是一个简单的例子:

def apply(func, x):

return func(x)

def square(x):

return x ** 2

print(apply(square, 3))

在上面的例子中,我们定义了一个apply函数,这个函数接收一个函数和一个参数,并将这个参数传递给这个函数进行计算。我们又定义了一个函数square,这个函数用于计算一个数的平方。我们调用了apply函数,并传递了square函数以及参数3,输出了它的返回值9

5.2 将函数作为返回值

在Python中,函数也可以作为另一个函数的返回值。下面是一个例子:

def make_adder(x):

def adder(y):

return x + y

return adder

adder = make_adder(2)

print(adder(3))

在上面的例子中,我们定义了一个make_adder函数,这个函数接收一个参数x,并返回一个新的函数adder。这个新的函数adder也是一个函数,它接收一个参数y,并返回x + y的结果。

我们调用了make_adder函数,并指定参数2,然后将返回的函数赋值给了adder变量。之后调用了adder函数,并传递了参数3,输出了它的返回值5

5.3 装饰器

在Python中,装饰器是一个特殊的函数,可以对其他函数进行功能扩展。装饰器通常用于为函数提供额外的功能,例如日志记录、缓存、权限验证等。下面是一个简单的例子:

def greeting_decorator(func):

def wrapper():

print("Hello!")

func()

print("Goodbye!")

return wrapper

def greet():

print("My name is Alice.")

greet = greeting_decorator(greet)

greet()

在上面的例子中,我们定义了一个greeting_decorator函数,这个函数接收一个函数func作为参数,并返回了一个新的函数wrapper。这个新的函数wrapper同时打印了"Hello!"和"Goodbye!",然后调用了func函数。

我们定义了一个greet函数,这个函数用于打印"My name is Alice."。接着将greet函数传递给了greeting_decorator函数,并将返回的新函数又赋值给了greet变量。最后我们调用了greet函数,程序输出了以下内容:

Hello!

My name is Alice.

Goodbye!

5.4 匿名函数和映射函数

在Python中,可以使用匿名函数和map函数实现快速的迭代操作。下面是一个例子:

items = [1, 2, 3, 4, 5]

squares = map(lambda x: x ** 2, items)

print(list(squares))

在上面的例子中,我们使用lambda定义了一个匿名函数,这个函数接收一个参数x并返回x ** 2的结果。然后,我们使用map函数将这个匿名函数作用于一个列表items上,最终得到一个新的列表squares,这个列表包含了items列表中所有元素的平方。我们输出了squares的值[1, 4, 9, 16, 25]

6. 结束语

函数是Python编程中的一个重要概念,掌握好函数的定义和使用可以提高代码的可读性和重用性。Python中函数的参数包括必需参数、关键字参数、默认参数、可变参数和关键字可变参数,其中关键字可变参数和装饰器是Python函数的高级用法。另外,匿名函数和map函数可以帮助我们在代码中快速地完成迭代操作。

后端开发标签