1. 函数的基本定义
在Python中,函数是一段可重用的代码块,其中封装了某个特定任务。函数的定义通常包括函数名、参数列表以及函数体。Python中定义函数的基本语法如下:
def function_name(parameter_list):
# 函数体
其中,def是定义函数的关键字,function_name是函数的名称,parameter_list是函数的参数列表,: 表示函数头结束,后面跟着的就是函数体。
2. 函数参数的基本类型
在Python中,函数的参数可以是以下几种类型:
2.1. 必需参数
必需参数是函数定义中必须要传入的参数,如果没有传入,将会引发TypeError错误。
以下是一个计算正方形面积的函数,它需要传入正方形的边长作为必需参数:
def square_area(length):
area = length ** 2
print("正方形面积为:{}".format(area))
在调用该函数时,必须传入正方形的边长:
square_area(3)
输出结果为:
正方形面积为:9
2.2. 关键字参数
关键字参数是指调用函数时,为某些参数指定了特定的名称和值。这样做可以使代码更易读,同时也更加灵活。
以下是一个计算多边形面积(仅支持矩形和正三角形)的函数,它分别接收长和宽以及底和高作为关键字参数:
def polygon_area(shape, width=None, height=None, base=None, altitude=None):
if shape == 'rectangle':
area = width * height
elif shape == 'triangle':
area = base * altitude / 2
else:
print("不支持的多边形形状!")
return
print("{}面积为:{}".format(shape, area))
在调用该函数时,可以使用关键字参数来指定传入的参数:
polygon_area('rectangle', width=4, height=5)
polygon_area('triangle', base=3, altitude=4)
输出结果分别为:
rectangle面积为:20
triangle面积为:6.0
2.3. 默认参数
默认参数是指函数定义中为某些参数指定了默认值,调用函数时可以使用默认值,也可以重新赋值。
以下是一个将摄氏度转换为华氏度的函数,它的精度默认为0.6,可以通过调用时指定精度值修改:
def celsius_to_fahrenheit(celsius, precision=0.6):
fahrenheit = celsius * 1.8 + 32
print("华氏度为:{:.{prec}f}".format(fahrenheit, prec=precision))
在调用该函数时,可以不指定精度值,此时将会使用默认值:
celsius_to_fahrenheit(23)
输出结果为:
华氏度为:73.4
也可以在调用时指定精度值:
celsius_to_fahrenheit(23, 1)
输出结果为:
华氏度为:73.94
2.4. 可变参数
可变参数是指函数定义中指定了一个参数,该参数可以接收任意数量的参数。Python中可以使用*来指定一个可变参数。
以下是一个将任意数量的数字相加的函数,它使用了一个可变参数:
def add_numbers(*numbers):
sum = 0
for number in numbers:
sum += number
print("总和为:{}".format(sum))
在调用该函数时,可以传入任意数量的数字:
add_numbers(1, 2, 3, 4, 5)
输出结果为:
总和为:15
2.5. 关键字可变参数
关键字可变参数是指函数定义中指定了一个参数,该参数可以接收任意数量的关键字参数。Python中可以使用**来指定一个可变参数。
以下是一个将任意数量的关键字参数合并到一个字典中的函数,它使用了一个关键字可变参数:
def merge_dict(**kwargs):
merged_dict = {}
for dict in kwargs:
merged_dict.update(dict)
print("合并后的字典为:", merged_dict)
在调用该函数时,可以传入任意数量的关键字参数:
dict1 = {"a":1, "b":2}
dict2 = {"c":3, "d":4}
merge_dict(dict1, dict2)
输出结果为:
合并后的字典为: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
3. 参数的传递方式
参数的传递方式分为值传递和引用传递两种方式。
3.1. 值传递
值传递是指将参数的值复制一份传递给函数,函数对参数进行修改并不会影响到原来的值。在Python中,简单数据类型(如数字、字符串、布尔值)都是以值传递的方式传递的。
以下是一个简单的使用值传递的例子:
def change_number(x):
x += 1
print("函数内部变量x:", x)
a = 1
change_number(a)
print("函数外部变量a:", a)
输出结果为:
函数内部变量x: 2
函数外部变量a: 1
3.2. 引用传递
引用传递是指将参数的地址传递给函数,函数对参数进行修改会影响到原来的值。在Python中,复杂数据类型(如列表、字典、集合等)都是以引用传递的方式传递的。
以下是一个简单的使用引用传递的例子:
def change_list(lst):
lst.append(4)
print("函数内部列表lst:", lst)
b = [1, 2, 3]
change_list(b)
print("函数外部列表b:", b)
输出结果为:
函数内部列表lst: [1, 2, 3, 4]
函数外部列表b: [1, 2, 3, 4]
4. 总结
函数是Python中十分重要的概念,掌握好Python函数的参数传递方式以及各种参数类型的使用,将大大提高Python编程的效率。