1. 函数基础
函数是将一段代码封装起来,为了以后可以使用,比如Python内置的print
函数和len
函数。函数可以接受参数,并且可以返回一个值。
以下是定义一个函数的基本语法:
def function_name(parameter1, parameter2, ...):
# do something
return result
其中,
def:用于定义函数。
function_name:为函数取一个名字,用来调用函数。
parameter1, parameter2, ...:函数的参数,在函数内部可以使用这些参数。
return:用来返回函数的结果。
1.1 例子
下面我们来看一个简单的例子。
def add(a, b):
c = a + b
return c
result = add(1, 2)
print(result)
在上面的例子中,我们定义了一个名为add
的函数,这个函数接受两个参数a
和b
,然后在函数内部将它们相加,最后返回结果c
。我们可以通过add(1, 2)
来调用这个函数,这个函数返回的结果是3
,并且赋值给了变量result
,然后打印出来了。
1.2 参数传递方式
Python中传递参数的方式有两种:按值传递和按引用传递。
按值传递:在函数内部修改参数的值不会影响到函数外部的参数值。
按引用传递:在函数内部修改参数的值会影响到函数外部的参数值。
Python中,传递不可变对象的时候是按值传递的,传递可变对象的时候是按引用传递的。
1.3 可变参数
有时候我们希望函数可以接受任意数量的参数,这时候可以使用可变参数。
Python中有两种可变参数:
位置参数:用*args传递。
关键字参数:用**kwargs传递。
以下是可变参数的使用方法:
def function_name(*args, **kwargs):
# do something
下面是例子:
def add(*numbers):
total = 0
for number in numbers:
total += number
return total
result = add(1, 2, 3, 4, 5)
print(result)
在上面的例子中,我们定义了一个名为add
的函数,这个函数接受任意数量的位置参数,并且将它们相加,最后返回总和。我们可以通过add(1, 2, 3, 4, 5)
来调用这个函数,这个函数返回的结果是15
,并且赋值给了变量result
,然后打印出来了。
2. lambda函数
lambda函数也叫匿名函数,它是一种简单的可调用对象。
以下是lambda函数的基本语法:
lambda parameters: expression
其中,
lambda:用于定义lambda函数。
parameters:lambda函数的参数。
expression:lambda函数的返回值。
2.1 例子
下面我们来看一个使用lambda函数的例子。
add = lambda a, b: a + b
result = add(1, 2)
print(result)
在上面的例子中,我们定义了一个lambda函数,这个函数接受两个参数a
和b
,然后返回它们相加的结果。我们可以通过add(1, 2)
来调用这个函数,这个函数返回的结果是3
,并且赋值给了变量result
,然后打印出来了。
3. 闭包
Python中的闭包是一种特殊的函数。
闭包是指:一个函数可以访问另一个函数内部的变量。
闭包有一个特点,就是inner
函数可以访问并使用outer
函数的变量,而这些变量是不能被全局访问到的。这样就可以实现一些有状态的函数。
3.1 例子
下面我们来看一个使用闭包的例子。
def outer(a):
def inner(b):
return a + b
return inner
add_5 = outer(5)
result = add_5(3)
print(result)
在上面的例子中,我们定义了一个外部函数outer
,这个函数接受一个参数a
,然后返回一个内部函数inner
。这个内部函数inner
接受一个参数b
,然后返回a + b
的结果。
我们可以通过outer(5)
来调用外部函数,这个函数返回了一个内部函数inner
,然后将这个内部函数赋值给了变量add_5
。我们可以通过add_5(3)
来调用这个内部函数,这个函数返回的结果是8
,并且赋值给了变量result
,最后打印出来了。
4. 递归函数
递归函数是一种特殊的函数,它调用了自身。
4.1 例子
下面我们来看一个使用递归函数的例子。
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
result = factorial(5)
print(result)
在上面的例子中,我们定义了一个递归函数factorial
,这个函数接受一个参数n
,然后返回n
的阶乘。如果n
等于0
,则直接返回1
,否则计算n * factorial(n-1)
。
我们可以通过factorial(5)
来调用这个函数,这个函数返回的结果是120
,并且赋值给了变量result
,最后打印出来了。
5. 装饰器
在Python中,装饰器是一种特殊的函数,它可以修改其他函数的行为。
装饰器的主要作用是用来修饰其他函数,用来增加或修改其他函数的功能。
5.1 例子
下面我们来看一个使用装饰器的例子。
def my_decorator(func):
def wrapper():
print("Before the function is called.")
func()
print("After the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
在上面的例子中,我们定义了一个装饰器my_decorator
,这个装饰器接受一个函数func
作为参数,并且返回一个内部函数wrapper
。在内部函数中,先输出一个"Before the function is called."的提示,然后调用了func
函数,最后输出一个"After the function is called."的提示。
然后我们又定义了一个函数say_hello
,并且在前面加上了@my_decorator
的装饰器。这样调用say_hello()
时,就会先执行装饰器中的代码,然后再执行say_hello
函数中的代码。最终输出的结果是:
Before the function is called.
Hello!
After the function is called.
6. 模块化编程
模块化编程是指将程序分解成若干个模块,每个模块完成一个特定的功能。
Python中,模块是一种特殊的文件,它包含了一组相关的函数、类和变量。我们可以在其他Python文件中使用import
语句导入这个模块,从而可以使用这个模块中的函数、类和变量。
6.1 例子
下面我们来看一个模块的例子。
新建一个文件mymodule.py
,并且写入以下内容:
def say_hello():
print("Hello, World!")
下面我们创建一个新的文件program.py
,并且写入以下内容:
import mymodule
mymodule.say_hello()
在上面的例子中,我们创建了一个名为mymodule
的模块,并且在mymodule.py
文件中定义了一个名为say_hello
的函数。然后在program.py
文件中,使用import
语句导入了mymodule
模块,并且调用了mymodule.say_hello()
函数。
7. 总结
在Python中,函数是将一段代码封装起来,为了以后可以使用。Python中还有lambda函数、闭包、递归函数和装饰器等特殊的函数。模块是一种特殊的文件,它包含了一组相关的函数、类和变量。
函数是Python编程中最基础、最重要的部分之一,因此我们需要深入理解并且熟练掌握函数的用法。