【Python】链式、嵌套调用、递归、函数栈帧、参数默认值和关键字参数
原创
一、链式调用
链式调用指的是将多个方法调用连接在一起,形成一个调用链,代码如下:
class Chain:
def __init__(self, path=''):
self._path = path
def __getattr__(self, attr):
return Chain(f'{self._path}/{attr}')
def __call__(self, attr):
return Chain(f'{self._path}={attr}')
chain = Chain()
result = chain.status.user.timeline.list()
print(result) # 输出:Chain('/status/user/timeline/list')
二、嵌套调用
嵌套调用是指在一个函数内部调用另一个函数。下面是一个嵌套调用的示例:
def outer_function(text):
def inner_function():
return text.upper()
return inner_function()
result = outer_function('hello')
print(result) # 输出:HELLO
三、递归
递归是指函数调用自身的过程。下面是一个计算阶乘的递归函数示例:
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)
result = factorial(5)
print(result) # 输出:120
四、函数栈帧
函数栈帧是Python解释器为每个函数调用分配的一块内存区域,用于存储局部变量和返回地址等信息。递归调用时,函数栈帧的创建和销毁过程如下:
# 递归调用函数栈帧示例
def func1():
print('func1起初')
func2()
print('func1终结')
def func2():
print('func2起初')
func3()
print('func2终结')
def func3():
print('func3')
func1()
五、参数默认值
在Python中,可以为函数参数设置默认值。如果调用函数时未提供相应的参数值,将使用默认值。下面是一个参数默认值的示例:
def greet(name, message='早上好!'):
print(f'{message}, {name}')
greet('张三') # 输出:早上好!, 张三
greet('李四', '晚上好!') # 输出:晚上好!, 李四
六、关键字参数
关键字参数允许你以键-值对的形式向函数传递参数,使函数调用更灵活。以下是一个关键字参数的示例:
def person(name, age, **kwargs):
print(f'姓名:{name}, 年龄:{age}, 其他信息:{kwargs}')
person('王五', 30, city='北京', job='程序员') # 输出:姓名:王五, 年龄:30, 其他信息:{'city': '北京', 'job': '程序员'}