- 机械工程师Python编程:入门、实战与进阶
- (西)安琪儿·索拉·奥尔巴塞塔
- 491字
- 2024-09-10 16:13:08
2.1.5 嵌套函数
本书中用到的另一个技巧是在函数内部定义函数。这样做有两个很好的理由:一是,它允许内部函数访问外部函数的所有信息,而不需要将这些信息作为参数传递;二是,内部函数可以定义一些对外部世界不可见的逻辑。
使用常规语法即可在函数中定义函数。让我们看一个例子:
这里,inner_fn函数是在outer_fn函数内部定义的,因此,它不能从主函数的外部访问,只能从其内部访问。inner_fn函数可以访问outer_fn中定义的所有内容,包括函数参数。
当函数的逻辑变得复杂,且可以被分解时,在函数内部定义子函数很有用。当然,我们也可以将函数分解成同一级别的简单函数。在这种情况下,为了表明这些子函数不从模块外部导入和使用,我们需要遵循Python的标准,将函数名称写成两个下划线开头的形式:
注意,Python没有访问修饰符(公共、专用……),因此,在模块顶层(即Python文件)编写的所有代码都可以被导入和使用。
记住,这两个下划线只是表示一个我们应该遵守的约定。实际上并没有阻止我们导入和使用这些代码。在导入以两个下划线开头的函数时,我们必须明白,该函数的作者并不希望其被外部引用;如果调用该函数,结果可能在意料之外。通过在被调用的函数内部定义子函数,我们可以避免这种行为。