Python 常见错误:
单元素的元组:
(1)并不是元组,实际上是在多处重载了小括号,比如在表达式里,小括号的作用是分组,(1,)这个才是单元素的元组。
模块:
import module 是将模块的名字设置为一个隐含的名字空间变量。
from module import method 导入到当前的全部命名空间里。
对于第二种方法并不是只有一个函数被导入,,其实整个模块也已经被导入。但只是那个函数的引用被保存了起来,所以 from...import 这种语法并不能带来性能上的差异,也没节省什么内存。
能不能重复导入一个模块,
有两个模块a,b 都导入了c模块,当a导入到b时,c是不是被导入了两次?
Python有导入模块和加载模块之分,一个模块可以被导入多次,但只会被加载一次,当python碰到一个已经被加载模块又被导入时,他会跳过加载过程,所以无需担心额外消耗内存的问题。
Package:
Package是Python在文件系统上发布一组模块的一种方式,使用常见的点分方式来访问子模块,每个目录下都有一个__init__.py文件,这告诉python解释器这些目录下的文件应该被当作是一个子package而不是普通文件。一般情况下都是空文件,也可以做一些初始化的工作,对于点分访问的方式可以使用别名来少打几个字母啦。。
可改变性:
“传引用”或“传值”通常不适用于Python,取而代之的是对象是可变的还是不可变的 。可改变性指的是一个对象的值是否改变。整数和字符串以及元组是不可变的,列表、字典、类、类实例等是可变的。
对方法调用的影响:如果调用的函数有任何可变对象,通常是直接修改的,直接修改其数据结构而不是返回一个修改后对象的拷贝,
复制对象和可变性:
不可变对象是被复制的,可变对象是复制了一个对他们的引用。
复制又分为浅拷贝和深拷贝,浅拷贝只复制了一个对可变对象的引用。
构造函数VS 初始化程序:
python和传统OOP语言的一个区别是它没有显式的构造函数的概念,python里没有new关键字因为我们并没有真的实例化你的类。python会在创建实例并调用初始化程序。__init__方法。
实例的属性是可以动态分配的,即使是在类定义已经完成甚至创建实例以后,可以在运行时动态的创建属性。