1. Python函数的定义与传参
Python中函数的定义使用def关键字,格式如下:
def function_name(param1, param2, ...):
# function body
return result
其中,function_name是函数名,可以由字母、数字和下划线组成,但不能以数字开头;param1, param2, ...是函数的参数,用于接收调用者传来的值;通过return语句返回函数计算的结果result。
关于参数的传递,Python中有以下几种方式:
1.1 位置参数传递
位置参数是指按照参数定义顺序传递参数。例如:
def add(x, y):
return x + y
result = add(3, 4)
print(result)
在调用函数add时,先传入的参数3会对应到函数定义中的参数x,后传入的参数4会对应到函数定义中的参数y,因此函数返回结果为7。
1.2 关键字参数传递
关键字参数是指在调用函数时,指定参数名来传递参数。例如:
def talk(name, words):
print(f"{name} said: {words}")
talk(name="Lucy", words="Hello, world!")
在调用函数talk时,通过指定参数名来传递参数,因此函数可以接收多个关键字参数。以上代码输出结果为:Lucy said: Hello, world!。
1.3 默认参数值传递
默认参数值是指在函数定义时,给参数指定默认值。例如:
def power(x, n=2):
return x ** n
print(power(3))
print(power(3, 3))
在上述代码中,函数power可以接收两个参数,其中第二个参数n有默认值2。若调用power时只传入一个参数,则默认使用n=2的值进行计算。以上代码输出结果为:9和27。
1.4 可变参数传递
可变参数是指函数定义时,允许接收任意个数的参数。在函数中将这些参数作为元组或列表处理。例如:
def add(*args):
result = 0
for arg in args:
result += arg
return result
print(add(1, 2, 3))
print(add(1, 2, 3, 4, 5))
以上代码中的函数add可以接受任意个数的参数,在函数中遍历这些参数并将其相加。调用add函数时,可以传入任意个数的参数。以上代码输出结果为:6和15。
1.5 关键字可变参数传递
关键字可变参数是指函数定义时,允许接收任意个关键字参数。在函数中将这些参数作为字典处理。例如:
def talk(**kwargs):
print(f"{kwargs['name']} said: {kwargs['words']}")
talk(name="Lucy", words="Hello, world!")
在上述代码中,函数talk可以接收任意个关键字参数,使用字典形式接收。调用talk函数时,传入关键字参数时,需要指定参数名和参数值,将这些参数打包成一个字典,并作为参数传递给函数talk。以上代码输出结果为:Lucy said: Hello, world!。
2. Python函数的调用
在Python中,函数的调用只需要使用函数名和参数,即可执行函数。
2.1 直接调用函数
直接调用函数的方式是最普遍的方式,即使用函数名和参数来直接调用函数。例如:
def add(x, y):
return x + y
a = 3
b = 4
c = add(a, b)
print(f"{a} + {b} = {c}")
调用函数add时,传入两个参数a和b,返回值赋值给变量c,最后输出结果为3+4=7。
2.2 函数作为参数传递
在Python中,函数也可以像普通变量一样作为参数传递。例如:
def add(x, y):
return x + y
def square(x):
return x ** 2
def operate(func, x, y):
return func(x, y)
a = 3
b = 4
c = operate(add, a, b)
d = operate(square, c, 2)
print(d)
在以上代码中,函数operate可以接受三个参数,其中第一个参数func是一个函数,用来做加减乘除等运算。在调用函数operate时,将函数add作为参数传递,并传入x和y两个参数,函数返回结果作为下一个函数的参数。在调用函数operate时,将函数square作为参数传递,并传入c和2两个参数,函数返回c的平方结果。以上代码输出结果为:49。
2.3 匿名函数的调用
在Python中,可以使用lambda表达式声明匿名函数,这些函数不需要使用def关键字定义,可以直接调用。例如:
a = lambda x, y: x + y
print(a(3, 4))
以上代码声明了一个匿名函数a,该函数实现了两个参数的加法运算。在调用函数a时,传入两个参数3和4,函数返回值为7。
3. Python函数的文档
在Python中,可以使用文档字符串(docstring)来为函数提供说明文档。
3.1 单行文档
可以在函数定义的第一行使用字符串来作为文档。
def add(x, y):
"""This is a function to calculate the sum of two numbers"""
return x + y
3.2 多行文档
可以在函数定义后跟随一段多行字符串来作为文档。
def add(x, y):
"""
This is a function to calculate the sum of two numbers.
It is implemented using the + operator.
"""
return x + y
3.3 查看文档
可以使用help函数来查看函数的文档。
def add(x, y):
"""This is a function to calculate the sum of two numbers"""
return x + y
help(add)
以上代码中,调用了help函数来查看函数add的文档。
4. 内置函数
Python中有很多内置函数,这些函数可以直接使用。
4.1 abs函数
abs函数用来求一个数的绝对值。
print(abs(-3))
print(abs(3))
以上代码输出结果为:3和3。
4.2 len函数
len函数用来求一个集合(字符串、列表、元组等)中元素的个数。
print(len("hello"))
print(len([1, 2, 3]))
以上代码输出结果为:5和3。
4.3 max和min函数
max函数和min函数用来求一个集合中的最大值和最小值。
print(max([1, 2, 3]))
print(min([1, 2, 3]))
以上代码输出结果为:3和1。
4.4 sum函数
sum函数用来求一个集合中的元素之和。
print(sum([1, 2, 3]))
以上代码输出结果为:6。
5. 自定义函数库
在Python中,可以将一组函数封装成一个模块(也称为函数库),供其他程序调用。
5.1 模块导入
使用import语句导入函数库。
import math
print(math.pi)
print(math.sin(30))
以上代码中,导入了Python中的数学函数库math,然后使用math.pi和math.sin函数。
5.2 模块别名
对导入的模块进行别名设置。
import math as m
print(m.pi)
print(m.sin(30))
以上代码中,将导入的模块math设置了别名m,然后使用m.pi和m.sin函数。
5.3 模块部分导入
从模块中导入部分函数。
from math import pi, sin
print(pi)
print(sin(30))
以上代码中,只从模块math中导入了pi和sin函数,而没有导入其他函数。这样可以避免函数名冲突。
5.4 模块全部导入
从模块中导入所有函数。
from math import *
print(pi)
print(sin(30))
以上代码中,从模块math中导入了所有函数。这样可以方便地使用模块中的所有函数。但是,不推荐使用这种方式,因为可能会导致函数名冲突。
6. 总结
Python函数是非常重要的语言特性,在代码设计和模块封装中扮演重要角色。本文介绍了Python函数的定义、传参、调用、文档、内置函数、以及如何自定义函数库等方面的内容。掌握这些知识后,可以更加自如地使用Python进行编程。