下面给您详细讲解“Python基础之函数基本用法与进阶详解”的完整攻略。
一、函数基本用法
1. 定义函数
定义函数的语法如下:
def function_name(parameters):
function body
return [expression]
其中,function_name
表示函数名,parameters
表示函数的参数列表,多个参数之间以逗号分隔。function body
中是函数的代码实现,最后的 return
语句表示函数返回值。
例如,下面是一个简单的求和函数:
def add(a, b):
return a + b
2. 调用函数
调用函数的语法如下:
result = function_name(arguments)
其中,function_name
表示函数名,arguments
表示函数的参数列表,多个参数之间以逗号分隔。调用函数时,将参数传入函数中,函数执行完毕后将返回值赋值给 result
变量。
例如,我们可以调用刚刚编写的求和函数:
result = add(1, 2)
print(result) # 输出 3
3. 函数参数
函数的参数可以分为两种,分别为位置参数和关键字参数。
位置参数
位置参数是指按照位置传入的参数,例如:
def power(base, exponent):
return base ** exponent
result = power(2, 3) # 等价于 power(base=2, exponent=3)
print(result) # 输出 8
关键字参数
关键字参数是指按照参数名传入的参数,例如:
def power(base, exponent):
return base ** exponent
result = power(exponent=3, base=2) # 传入关键字参数
print(result) # 输出 8
4. 默认参数
默认参数是指在定义函数的时候,给某些参数设置默认值。调用函数时,如果没有给对应的参数赋值,则自动使用默认值。默认参数的语法如下:
def function_name(parameter=default_value):
function body
return [expression]
例如:
def say_hello(name, message='Hello'):
print(f'{message}, {name}!')
say_hello('Alice') # 输出 "Hello, Alice!"
say_hello('Bob', 'Good morning') # 输出 "Good morning, Bob!"
5. 可变参数
可变参数是指不确定参数个数的情况下,可以通过可变参数来处理。在函数定义时,在参数列表中使用 *args
表示接收可变参数,参数个数可以是任意多个。例如:
def average(*args):
return sum(args) / len(args)
result = average(1, 2, 3, 4, 5)
print(result) # 输出 3.0
在调用函数时,可以传入任意个参数,在函数内部,这些参数将被看作是一个元组。
6. 关键字可变参数
关键字可变参数是指不确定参数名和个数的情况下,可以通过关键字可变参数来处理。在函数定义时,在参数列表中使用 **kwargs
表示接收关键字可变参数,参数个数可以是任意多个。例如:
def print_person_info(name, age, **kwargs):
print(f'Name: {name}, Age: {age}')
for key, value in kwargs.items():
print(f'{key.capitalize()}: {value}')
print_person_info('Alice', 18, gender='Female', occupation='Student')
在调用函数时,可以传入任意个参数和参数名,在函数内部,这些参数将被看作是一个字典。
二、函数进阶详解
1. 嵌套函数
嵌套函数是指在一个函数的内部定义一个新的函数,这个新函数的作用域仅限于外部函数的内部。例如:
def calc_average(*scores):
def sum_of_scores(*args):
return sum(args)
return sum_of_scores(*scores) / len(scores)
result = calc_average(80, 90, 85)
print(result) # 输出 85.0
在上面的例子中,嵌套函数 sum_of_scores
的作用域仅限于外部函数 calc_average
的内部,并且在外部函数中直接通过 sum_of_scores(*scores)
调用了内部函数。
2. 匿名函数
匿名函数是指没有定义函数名的函数,通常用于封装简单的操作。在 Python 中,可以使用 lambda
关键字定义匿名函数。例如:
double = lambda x: x * 2
result = double(3)
print(result) # 输出 6
在上面的例子中,定义了一个匿名函数 lambda x: x * 2
,表示输入 x
时,输出 x * 2
。
3. 闭包
闭包是指在一个函数内部定义另一个函数,并且内部函数可以访问外部函数的局部变量。在 Python 中,闭包通常是通过嵌套函数实现的。例如:
def make_adder(x):
def adder(y):
return x + y
return adder
add_5 = make_adder(5)
add_10 = make_adder(10)
result1 = add_5(3)
result2 = add_10(3)
print(result1) # 输出 8
print(result2) # 输出 13
在上面的例子中,函数 make_adder
返回了一个内部函数 adder
,并且内部函数可以使用外部函数的局部变量 x
,这种技巧就是闭包。
4. 装饰器
装饰器是指在不修改函数源代码的情况下,给函数动态地增加一些额外的功能。在 Python 中,可以使用 @decorator
的语法糖来给函数增加装饰器。例如:
def make_bold(func):
def wrapper(*args, **kwargs):
return '<b>' + func(*args, **kwargs) + '</b>'
return wrapper
def make_italic(func):
def wrapper(*args, **kwargs):
return '<i>' + func(*args, **kwargs) + '</i>'
return wrapper
@make_bold
@make_italic
def greeting(name):
return f'Hello, {name}!'
result = greeting('Alice')
print(result) # 输出 <b><i>Hello, Alice!</i></b>
在上面的例子中,定义了两个装饰器函数 make_bold
和 make_italic
,并且使用了装饰器语法糖来给函数 greeting
增加了两个装饰器。在调用函数 greeting
时,实际上是调用了 wrapper
函数,这个函数动态地增加了样式标签,最终得到的字符串就是加粗加斜的效果。
以上就是“Python基础之函数基本用法与进阶详解”的完整攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基础之函数基本用法与进阶详解 - Python技术站