提问人:theabc50111 提问时间:5/21/2023 最后编辑:theabc50111 更新时间:5/22/2023 访问量:108
区分局部变量和全局变量标识符的常用方法有哪些?
What are the common ways to distinguish between identifier of local variables and global variables?
问:
我编写了一个函数,对局部变量和 globel 变量使用相同的标识符,如以下代码所示:
def func(time_len, num_nodes):
pass
if __name__ == '__main__':
time_len, num_nodes = input_arrs.shape
func(time_len=time_len, num_nodes=num_nodes)
我想减少这种命名风格以避免歧义。 但是我能想到的唯一方法是在标识符中添加前缀或后缀,如下所示:
def func(time_len, num_nodes):
pass
if __name__ == '__main__':
global_time_len, global_num_nodes = input_arrs.shape
func(time_len=global_time_len, num_nodes=global_num_nodes)
我的问题是: 区分局部变量和全局变量的常用方法或约定是什么?
答:
按照您的建议执行操作不是典型的 Python 样式。https://pep8.org/#global-variable-names
但是,您还可以从其他几种风格中汲取灵感。
您可以尝试使用前缀来记下全局变量。我已经看到它被使用过,尽管它并不受欢迎。g_
某些代码样式还具有有关全局变量的指南,其中用于全局变量(和函数)和局部变量。如果您更喜欢下划线,则很容易将其修改为 和 。UpperCamelCase
lowerCamelCase
Upper_With_Under
lower_with_under
通常,在现代代码样式中,我们不依赖于命名来记录哪个变量在哪个作用域中。如果程序员无法跟踪哪个名称在哪个作用域中,这应该告诉您该文件太复杂了,名称太多,重叠作用域太多。你应该把这种困惑变成一轮简化、模块化和抽象化,这样代码就更容易理解和牢记在心。
太复杂而无法跟踪的代码是太复杂而无法修改的代码。
第一个观察结果是,如果变量是全局变量,则无需将它们传递给函数;它已经可以访问它们。但是,最好的策略是尽可能避免全局变量,以便函数是自包含的。
一般来说,最好为全局变量使用更具描述性的名称,或者至少避免不必要的缩写,例如 elapsed_time 和 node_count。我总是让最后一个词在最基本的意义上描述变量;第一个变量是时间,第二个变量是计数。通过这种做法,您可以一目了然地看到您正在处理什么样的值。
请记住,每个变量或函数参数都存在于上下文中;全局变量存在于模块的上下文中,参数和局部变量存在于函数的上下文中。仅此一项就通常意味着名称应该是什么。
如果你问我,在变量名中编码全局属性是一个丑陋的解决方案。它很丑陋,因为一个变量应该以它所持有的值命名,不多也不少。
评论