codecamp

Python 嵌套函数与内部类规范 | Google 官方指南

嵌套/局部/内部类和函数

Tip

可以用局部类和局部函数来捕获局部变量。

可以用内部类。

定义:

可以在方法、函数和类中定义内部类。可以在方法和函数中定义嵌套函数。嵌套函数可以只读访问外层作用域中的变量。(译者注:即内嵌函数可以读外部函数中定义的变量,但是无法改写,除非使用 nonlocal

优点:

方便定义作用域有限的工具类和函数。便于实现 抽象数据类型)。
常用于实现装饰器。

缺点:

无法直接测试嵌套的函数和类。嵌套函数和嵌套类会让外层函数的代码膨胀,可读性变差。

结论:

可以谨慎使用。
尽量避免使用嵌套函数和嵌套类,除非需要捕获 self 和 cls 以外的局部变量。
不要仅仅为了隐藏一个函数而使用嵌套函数。
应将需要隐藏的函数定义在模块级别,并给名称加上 _ 前缀,以便在测试代码中调用此函数。

Python 全局变量规范 | Google 官方避坑指南
Python 推导式与生成式规范 | Google 官方写法
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }