在Python中,函数是一个非常重要的概念,它可以将一段代码块封装成一个单独的、可重复使用的单元。正确定义一个函数可以提高代码的可读性、可维护性和可重用性。
一、函数的基本语法
def function_name(parameters): """docstring""" statement(s)
如上,函数定义以关键字def
开头,后接函数名、参数列表,其中parameters
是可选的。函数体内可以包含一条或多条statement
,可以是任意有效的语句代码。函数的执行结果通过return
语句返回。
函数名由字母、数字和下划线组合而成,并以字母或下划线开头。Python中的函数名是大小写敏感的。函数名要具有描述性,以便于代码阅读和理解。
# 示例1 def add(a, b): result = a + b return result print(add(1, 2)) # 输出:3
上述示例定义了一个函数add
,它的参数列表为a
和b
。函数体内result = a + b
将a
和b
相加,将结果赋值给result
,return result
语句返回result
的值。
二、参数传递
Python中函数的参数传递有两种方式:值传递和引用传递。
当将一个变量作为参数传递给函数时,Python默认采用的是值传递,即将变量的副本传递给函数。在函数中对副本进行修改不会影响原始变量。
# 示例2 def func(a): a = 3 print("函数内部:", a) return x = 5 func(x) print("函数外部:", x) # 输出: # 函数内部: 3 # 函数外部: 5
示例2的执行过程如下:首先定义了一个函数func
,其中将a
的值修改为3
,然后执行print("函数内部:", a)
语句输出修改后的值。接着定义了变量x
,将其值设为5
,将x
作为参数传递给func
函数,执行func(x)
语句,输出"函数内部: 3"。最后执行print("函数外部:", x)
语句,输出原始值"函数外部: 5"。
如果使用引用传递,则意味着在函数内部对参数的任何修改都会影响原始变量。
# 示例3 def func(mylist): mylist.append([4, 5, 6]) print("函数内部:", mylist) return mylist = [1, 2, 3] func(mylist) print("函数外部:", mylist) # 输出: # 函数内部: [1, 2, 3, [4, 5, 6]] # 函数外部: [1, 2, 3, [4, 5, 6]]
示例3的执行过程如下:首先定义了一个函数func
,其中向mylist
列表中添加一个新的列表[4, 5, 6]
,然后执行print("函数内部:", mylist)
语句,输出修改后的列表。接着定义了列表mylist
,将其值设为[1, 2,3]
,将mylist
作为参数传递给func
函数,执行func(mylist)
语句,输出"函数内部: [1, 2, 3, [4, 5, 6]]"。最后执行print("函数外部:", mylist)
语句,输出修改后的列表"函数外部: [1, 2, 3, [4, 5, 6]]"。
三、函数的参数
Python中的函数参数可以分为四种类型:必备参数、默认参数、可变参数和关键字参数。
1. 必备参数
必备参数是指必须要传递给函数的参数,如果没有传递这些参数,函数调用会失败。
# 示例4 def print_info(name, age): print("Name: ", name) print("Age: ", age) return print_info("Tom", 18) # 输出: # Name: Tom # Age: 18
上述示例定义了一个函数print_info
,其中包含两个必备参数name
和age
,并输出这两个参数的值。执行print_info("Tom", 18)
语句,输出"Name: Tom"和"Age: 18"。
2. 默认参数
默认参数是指在函数定义时,为参数指定默认值,如果没有传递该参数,则使用默认值。
# 示例5 def print_info(name, age=18): print("Name: ", name) print("Age: ", age) return print_info("Tom") # 输出: # Name: Tom # Age: 18
上述示例定义了一个函数print_info
,其中age
参数指定了默认值18
,如果在函数调用时没有传递这个参数,则使用默认值18
。执行print_info("Tom")
语句,输出"Name: Tom"和"Age: 18"。
3. 可变参数
可变参数是指函数传递的参数个数不确定,可以是任意个。Python中可变参数可以使用星号*
表示。
# 示例6 def sum_num(*args): sum = 0 for i in args: sum += i return sum print(sum_num(1, 2, 3)) # 输出:6 print(sum_num(1, 2, 3, 4, 5)) # 输出:15
上述示例定义了一个函数sum_num
,其中可变参数*args
将传入的所有参数封装成一个元组。函数体内通过循环遍历所有参数,将它们相加并返回结果。
4. 关键字参数
关键字参数是指传递给函数的参数在函数内部通过参数名来匹配。Python中,关键字参数可以使用两个星号**
表示。
# 示例7 def print_info(name, age): print("Name: ", name) print("Age: ", age) return print_info(name="Tom", age=18) # 输出: # Name: Tom # Age: 18
上述示例定义了一个函数print_info
,其中的参数都是必备参数。通过在参数名前面加上name=
或者age=
将其变成关键字参数,这样在调用函数时就可以按照参数名来传递参数。注意:如果同时存在可变参数和关键字参数,则可变参数必须放在关键字参数的前面。
四、函数的注释
Python中可以为函数添加注释,提高代码的可读性。注释可以在函数定义内部的字符串中,称为docstring
,也可以在函数定义后面通过#
来添加单行注释。
# 示例8 def add(a, b): """ add(a, b) -> int 返回a和b的和。 """ result = a + b return result print(add(1, 2)) # 输出:3
上述示例定义了一个函数add
,其中第一行用字符串格式书写add(a, b) -> int
,指定了函数的参数和返回值。在接下来的若干行中用多行字符串表示函数的功能和特点。
注意:可使用help()
函数来查看函数的注释。
# 示例9 help(add) # 输出: # Help on function add in module __main__: # # add(a, b) # add(a, b) -> int # # 返回a和b的和。
总结
Python中函数的定义非常简单,可以通过基本语法来定义函数,对于参数传递、可变参数、关键字参数等需要灵活运用。在定义函数时,注释也很重要,可以提高代码的可读性和可维护性。下面是所有示例的代码。
# 示例1 def add(a, b): result = a + b return result print(add(1, 2)) # 输出:3 # 示例2 def func(a): a = 3 print("函数内部:", a) return x = 5 func(x) print("函数外部:", x) # 输出: # 函数内部: 3 # 函数外部: 5 # 示例3 def func(mylist): mylist.append([4, 5, 6]) print("函数内部:", mylist) return mylist = [1, 2, 3] func(mylist) print("函数外部:", mylist) # 输出: # 函数内部: [1, 2, 3, [4, 5, 6]] # 函数外部: [1, 2, 3, [4, 5, 6]] # 示例4 def print_info(name, age): print("Name: ", name) print("Age: ", age) return print_info("Tom", 18) # 输出: # Name: Tom # Age: 18 # 示例5 def print_info(name, age=18): print("Name: ", name) print("Age: ", age) return print_info("Tom") # 输出: # Name: Tom # Age: 18 # 示例6 def sum_num(*args): sum = 0 for i in args: sum += i return sum print(sum_num(1, 2, 3)) # 输出:6 print(sum_num(1, 2, 3, 4, 5)) # 输出:15 # 示例7 def print_info(name, age): print("Name: ", name) print("Age: ", age) return print_info(name="Tom", age=18) # 输出: # Name: Tom # Age: 18 # 示例8 def add(a, b): """ add(a, b) -> int 返回a和b的和。 """ result = a + b return result print(add(1, 2)) # 输出:3 # 示例9 help(add) # 输出: # Help on function add in module __main__: # # add(a, b) # add(a, b) -> int # # 返回a和b的和。