Python自学指南---基础篇(三)标识符

3. 标识符

标识符是电脑语言中允许作为名字的有效字符串集合
—《Python核心编程》

在编写程序时,我们需要为不同的变量,函数取相应的名字,以便于重复地使用它们,这个名字被称为标识符。
每当为变量取名的时候,应当牢记以下两个原则:

  1. 不是所有字符串集合都可以作为标识符,合法的标识符有一定的规则。
  2. 有一部分字符串集合已经被占用,因此取名的时候应当避开。

3.1 合法的标识符

Python标识符字符串的规则如下:

  1. 大小写敏感(foo不同于Foo)
  2. 在2.x版本的Python中,标识符必须以ASCII编码的字母或下划线开始,后面可以接字母、数字、下划线;在3.x版本的Python中,标识符的首字符可以是ASCII字母、下划线以及大多数非英文语言的字母(总结起来,首字符可以是Unicode编码的字母),后续字符可以是Unicode编码的任意非空格字符,包括Unicode编码中被认为是数字的字符。

3.2 命名时需要避开的字符串

1. 关键字

任何一门编程语言的语法中都会包含一些已经使用的字符串,也就是关键字,例如循环中会用到的for、while,条件判断中用到的if、else等等。显然,如果你为一个变量取名为for,Python的解释器只会把它当作一个循环的开始,而不是一个变量。
如果想查看Python中有哪些关键字,可以导入keyword模块中的kwlist:

from keyword import kwlist
print(kwlist)

可以得到一个长度为33的list:

['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

值得一提的是,把上述这些关键字的作用搞清,也相当于了解Python的基础语法:

2. __builtins__模块

在一段程序运行之前,Python解释器会自动导入一个__builtins__模块,这个模块中包含了一些预定义的标识符,可以利用以下代码一探究竟:

dir(__builtins__)  #dir可以列出对象中所有属性及方法的名字

得到一个list:

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit', 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']
3. 专用下划线标识符

Python还会利用下划线作为前缀或后缀来指定一些特殊变量:
_*:

不会被 from module import * 导入。_ 这个特殊的标识符用于在交互式解释器中存储上一次计算的结果;它存储在 builtins 模块。不在交互式模式时,_ 没有特别的含义且是未定义的。

*

系统定义的变量名。这些名称由解释器及其实现(包括标准库)定义。特别方法名称 部分中和其他地方讨论了当前的系统名称。

__*:

类的私有变量名。此类别中的名称在类定义的上下文中使用时,将重写为使用损坏的形式,以帮助避免基本类和派生类的“私有”属性之间的名称冲突。

_ :

只有单个下划线的变量名(_),在交互解释器中运行时,会保存最后表达式的结果。

需要注意,避免使用下划线作为变量名的开始

因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx 被看作是“私有的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来表示变量是很好的习惯。因为变量名__xxx__对 Python 来说有特殊含义,对于普通的变量应当避免这种命名风格。
—《Python核心编程》

3.3 命名风格

说完以上的两个原则之后,再来谈谈命名风格的问题,一般来说变量命名应当避免使用a,b,gdgfsg这些完全没有意义的字符,也不要使用拼音或者过于冗长的字符串,命名应当能够简洁地表达变量本身在具体场景中代表的含义
遇到一些单个单词难以命名的变量,可以参考常见的命名风格:

  • 小驼峰体:第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母,如dayOfWeek、myFirstName

  • 大驼峰体:相比小驼峰法,大驼峰法把第一个单词的首字母也大写了,常用于类名,如class Employee

  • 下划线:day_of_week、my_first_name

Python更加推荐的是下划线命名法

猜你喜欢

转载自blog.csdn.net/a34434180/article/details/83066741