Python作为一种高级编程语言,拥有着广泛的应用场景,在开发过程中,函数是Python编程不可或缺的一部分。函数的定义、使用和组成是Python编程的基本技巧。因此,在本文中,将从函数的定义、参数、返回值、作用域以及装饰器几个方面进行详细的阐述。
一、函数的定义
函数是一种可调用的对象(callable object),它用于封装代码,将多个语句组成一个执行单元。以def关键字开头、后接函数名及多个参数、冒号和缩进块构成。其中,参数可以没有,但是括号不能省略。
def function_name(parameters):
statement(s)
例如,定义一个输出两个数之和的函数:
def add(x, y):
result = x + y
print(result)
该函数接受两个参数,并将它们相加得到的结果进行输出。函数调用的时候,可以像下面这样:
>>> add(1, 2)
3
在Python中,函数还支持缺省参数值,如:
def add(x, y=1):
result = x + y
print(result)
调用该函数时,可以只传递一个参数,在函数内部使用指定的缺省参数值进行计算:
>>> add(1)
2
二、参数
Python函数有两类参数:必需参数和关键字参数。必需参数在调用函数时必须传递,对应上面定义函数时的parameters;而关键字参数是可选的,可以在调用函数时使用名称和值进行传递。引入关键字参数可以使函数调用更清晰,更易于读懂。
例如,定义一个含有必需参数和关键字参数的函数:
def foo(required_param, *args, **kwargs):
print(required_param)
if args:
for arg in args:
print(arg)
if kwargs:
for key, value in kwargs.items():
print(key, value)
在这个例子中,required_param是必需参数,而*args和**kwargs分别代表不定量的位置参数和关键字参数。
调用函数,不仅可以传递必需参数,还可以传递位置参数和关键字参数:
>>> foo('hello', 'world', 2018, name='Tom', age=18)
hello
world
2018
name Tom
age 18
三、返回值
函数可以通过return语句返回一个值。如果return语句没有指定返回值,则默认返回None。在函数中,可以存在多个return语句,但只有一个会被执行。当执行到一个return语句时,函数就会立即结束并返回对应的值。
例如,定义一个求两个数之和的函数:
def add(x, y):
result = x + y
return result
调用该函数时,可以使用变量存储函数的返回值:
>>> result = add(1, 2)
>>> print(result)
3
四、作用域
Python中,局部变量在函数内部定义,全局变量在函数外部定义,在函数中也可以对全局变量进行访问。函数可以使用global关键字来声明一个变量并将其赋值为全局变量。
i = 5
def foo():
global i
i = i + 1
print(i)
foo() # 6
print(i) # 6
五、装饰器
装饰器是Python语言的重要特性之一,是一种用于修饰函数、方法或类的函数。装饰器可以在定义函数的基础上,添加一些额外的功能或者修改函数的行为。装饰器主要是在不修改原函数代码的情况下,对函数进行功能扩展或者修改。Python内置了很多有用的装饰器,例如@staticmethod、@classmethod、@property等。使用装饰器可以使代码更加简洁、优雅。
例如,定义一个装饰器,用于输出函数执行时间:
import time
def timeit(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print('Time:', end_time - start_time)
return result
return wrapper
@timeit
def add(x, y):
result = x + y
time.sleep(1)
print(result)
return result
add(1, 2) # 3; Time: 1.000
在该例子中,使用了timeit装饰器来装饰add函数。该装饰器在调用函数之前输出时间,调用函数之后输出时间。