1. Python函数概述
Python是一种解释性语言,意味着Python程序可以立即运行,而无需编译器或其他繁琐的步骤。Python语言中最常用的代码块是函数(function),它允许我们将一些相关的操作封装在一起以供重复使用。
在Python中,函数的定义以“def”关键字开始,后面跟着函数名称和圆括号,括号内可以包含形式参数。函数名称和参数列表构成了函数头(header),并以冒号(:)结尾。函数体(body)中是一系列编写的Python语句,它们定义了函数的操作内容。
def function_name(parameter1, parameter2):
some code......
return result
2. Python函数中的形参
2.1 定义形参
Python中函数的形参(parameter)定义在函数的括号内,用逗号隔开。我们可以根据需要定义任意数量的参数,无参函数对应没有括号。
例如,以下示例定义的函数“add”需要两个参数:“a”和“b”:
def add(a, b):
return a + b
而以下示例定义的函数“hello”没有需要传入的参数,也可以称之为无参函数:
def hello():
print("Hello, World!")
2.2 函数中的默认值
当我们在定义函数时,可以为形参赋予默认值,从而在调用函数时不传入该参数时也能正常进行。这种默认值默认情况下将覆盖没有给出值的参数。
例如,在以下示例中,函数“multiply”包含两个参数和一个默认值。如果没有传入第一个参数,则使用默认值。
def multiply(a, b=5):
return a * b
在下面的调用语句中,函数被调用时只传递了一个参数,则使用默认值(b=5):
print(multiply(10))
结果输出50,等于传递的值10和默认值5的乘积。
2.3 参数传递方式
在Python中,参数传递方式有两种:传值和传引用。
传值是指传递的是变量的拷贝,函数在处理它们时不能修改原始变量的值。这些拷贝被称为形参或局部变量,它们只在函数中可用。
以下示例展示了传值的例子:
def add(a):
a = a + 2
return a
x = 5
print(add(x))
print(x)
在这个例子中,变量“x”的值为5,在调用函数“add”时,我们将值5传递给函数。但是,函数内部只是对传递进去的值进行了加2的操作,而并没有改变原始的变量值。
另一种参数传递方式是传引用,它将变量的引用(而不是拷贝)传递给函数。这意味着函数可以修改原始变量。
以下是一个传引用的例子:
def add(list):
list.append(3)
return list
mylist = [1, 2]
print(add(mylist))
print(mylist)
在这个例子中,变量“mylist”的值为[1, 2]。在调用函数“add”时,我们将引用传递给函数,函数内部通过添加值3来修改了原始变量。
2.4 数量可变的参数
在Python中,我们还可以定义数量可变的参数,这意味着函数可以接受任意数量的参数,而不仅仅是固定的数量。这些参数被称为不定长参数。
Python提供了两种不定长参数,一种是使用星号(*)来表示位置参数,另一种是使用双星号(**)来表示关键字参数。
以下是一个使用星号表示位置参数的例子:
def add(*args):
result = 0
for i in args:
result += i
return result
print(add(1, 2))
print(add(1, 2, 3))
在这个例子中,我们定义了一个名为“add”的函数,它可以接受任意数量的参数。在函数体内,我们使用for循环遍历所有的位置参数,并将它们加起来。
以下是一个使用双星号表示关键字参数的例子:
def print_dict(**kwargs):
for key, value in kwargs.items():
print(key, value)
print_dict(name='Alice', age=25, occupation='programmer')
这个示例中,我们定义了一个名为“print_dict”的函数,它接受任意数量的关键字参数。在函数体内,我们使用for循环遍历所有关键字参数,并打印它们的键和值。
3. 练习
我们来实现一个简单的斐波那契数列生成器,它可以接受一个整数n,生成斐波那契数列中的前n个数字。
def fib(n):
a, b = 0, 1
result = []
for i in range(n):
result.append(a)
a, b = b, a + b
return result
print(fib(10))
在这个示例中,我们定义了一个名为“fib”的函数,它接受一个整数n作为参数。在函数体内,我们使用两个变量“a”和“b”初始化斐波那契数列的前两个数字。我们还定义了一个名为“result”的空列表,用于存储生成的数字。使用for循环,我们执行n次循环以生成斐波那契数列中的前n个数字。每次循环,我们将“a”添加到“result”列表中,并使用元组解包将“b”和“a+b”分配给变量“a”和“b”,以便在下一次迭代中使用。
最终,我们返回“result”列表,其中包含生成的斐波那契数列。
4. 总结
在Python中,函数是一种用于组织代码的有用工具,可以封装一些相关的操作以供重复使用。可以定义一些形参,为它们规定默认值和传递方式,并可以使用不定长参数接收任意数量的参数。通过编写函数,我们可以使我们的代码更容易管理,并且增加我们程序的可重用性。