合法的python标识符:
python标识符字符串规则和其他大部分用c编写的高级语言类似:
第一个字符必须是字母或是下划线;
剩下的字符可以是字母和数字或下划线;
大小写敏感:
_xxx 不用“from module import * ”导入;
_xxx_ 系统定义名字;
_xxx 类中的私有变量名 ;
文档
Python
还提供了一个机制,可以通过__doc__特别变量,动态获得文档字串。在模块,类
声明,或函数声明中第一个没有赋值的字符串可以用属性
obj.__doc__来进行访问,其中 obj
是一个模块,类,或函数的名字。这在运行时刻也可以运行。
核心笔记:__name__ 指示模块应如何被加载
由于主程序代码无论模块是被导入还是被直接执行都会运行,
我们必须知道模块如何决定
运行方向。一个应用程序可能需要导入另一个应用程序的一个模块,以便重用一些有用的代码
(否则就只能用拷贝粘贴那种非面向对象的愚蠢手段)。这种情况下,你只想访问那些位于其
它应用程序中的代码,而不是想运行那个应用程序。因此一个问题出现了,“Python
是否有
一种方法能在运行时检测该模块是被导入还是被直接执行呢?” 答案就是......(鼓声雷
动).....没错! __name__
系统变量就是正确答案。
如果模块是被导入, __name__ 的值为模块名字
如果模块是被直接执行, __name__ 的值为
‘__main__‘
内存管理:
变量无必须事先声明;
变量无须指定类型;
程序员不用关心内存管理;
变量名会被“回收”
del语句能够直接释放资源;
其他大多数语言一样,变量只有被创建和赋值后才能被使用。
变量一旦被赋值,您就可以通过变量名来访问它。
动态类型
还要注意一点,Python
中不但变量名无需事先声明,而且也无需类型声明。
Python 语言中,对象的类型和内存占用都是运行时确定的。尽管代码被编译成字节码,Python
仍然是一种解释
型语言。在创建--也就是赋值时,解释器会根据语法和右侧的操作数来决定新对象的类型。
在对象创建后,一个该对象的应用会被赋值给左侧的变量。
python内存分配:
要保持追踪内存中的对象,
Python 使用了引用计数这一简单技术。也就是说 Python 内部记录着所有使用中的对象各有多少引用。你可以将它想像成扑克牌游戏“黑杰克”或“21
点”。
一个内部跟踪变量,称为一个引用计数器。至于每个对象各有多少个引用, 简称引用计数。当对象被创建时, 就创建了一个引用计数, 当这个对象不再需要时,
也就是说, 这个对象的
引用计数变为 0 时, 它被垃圾回收。(严格来说这不是 100%正确,不过现阶段你可以就这么认为)