区分局部变量与全局变量标识符的常见方法及规范咨询
区分Python局部变量与全局变量标识符的常见规范方法
针对你遇到的全局变量和函数参数(局部变量)同名导致阅读歧义的问题,下面是几种实用的命名规范和优化方法:
基于作用域的前缀/后缀区分
这是你已经想到的思路,可根据场景灵活调整前缀,不一定局限于global_。比如用模块缩写当前缀,或者用下划线后缀(注意Python中单下划线开头的变量约定为内部使用):def func(time_len, num_nodes): pass if __name__ == '__main__': # 假设模块名为data_process,用缩写dp当前缀 dp_time_len, dp_num_nodes = input_arrs.shape func(time_len=dp_time_len, num_nodes=dp_num_nodes)全局常量用大写蛇形命名
遵循PEP8规范,全局常量采用全大写、下划线分隔的命名,局部变量(含函数参数)用小写蛇形命名,两者视觉区分度极高:# 全局常量(不修改的固定值) TIME_LEN, NUM_NODES = input_arrs.shape def func(time_len, num_nodes): pass if __name__ == '__main__': func(time_len=TIME_LEN, num_nodes=NUM_NODES)这种方式更适合不会被修改的全局值,若为可变全局变量,建议结合其他方法。
缩小全局变量作用域
尽量减少模块级全局变量的使用,把变量封装到函数或类中。比如将原main代码封装成函数,变量变为函数局部,即使同名也因作用域清晰降低歧义:def func(time_len, num_nodes): pass def main(): # 此处变量为main函数的局部变量,而非模块全局 time_len, num_nodes = input_arrs.shape func(time_len=time_len, num_nodes=num_nodes) if __name__ == '__main__': main()按变量含义/来源命名
抛弃单纯的作用域前缀,根据变量的实际含义或来源命名,既区分命名又增强可读性。比如input_arrs是时序数据,可命名为:def func(time_len, num_nodes): pass if __name__ == '__main__': seq_time_len, seq_num_nodes = input_arrs.shape func(time_len=seq_time_len, num_nodes=seq_num_nodes)
内容的提问来源于stack exchange,提问作者theabc50111
相关产品推荐
相关产品推荐

