重庆做网站的如何推销自己的产品
python语言中,对象的类型和内存占用都是运行时确定的。尽管被编译成字节码,但是python仍然是一种解释型语言
1、资源网站
python信息的网站
https://www.python.org/
有关本书信息的网站
http://corepython.com/
最新mac版python的组建和信息
http://undefined.org/python/和http://pythonmac.org/packages/
2、查看自己电脑中是否安装有python
在命令行中输入python,如果已经安装了python,则可以看到python的版本
此时命令行上出现>>>,这是可以直接在后面输入python语句,例如:print 'hello,world'
3、python支持的五种基本数字类型
int(这其中包含二进制数字用0b表示,十六进制数字用0表示,八进制数字用0x表示)
long(数字后面跟l或L),所能表示的范围远远超过c语言能够表示的范围
bool(True或False),True相当于1,False相当于0
float(可以用.也可以用科学计数法e或E)
complex(例如:6.23+1.5j或6.23+1.5J)
decimal,用于十进制浮点数。不是内建类型,需要先import入decimal模块
有时候在二进制表示中有一个无限循环片段,因此有时候表示的时候会不精确
>>>1.1
1.1000000000001
>>>print decimal.Decimal('1.1')
1.1
4、python函数的默认参数
python的函数的参数可以有一个默认值,当调用该函数没有传入参数时将使用默认值
5、不使用反斜线也可以跨行的两种情况
(1)在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号、中括号、花括号时可以多行书写
(2)三引号包括下的字符串也可以跨行书写
6、python不支持重载标识符
如果定义两个方法,它们的名字相同但是参数不同,那么后一个方法会覆盖前一个方法,造成前一个方法失效
7、__name__系统变量
如果模块是被导入,则__name__的值为模块名字
如果模块是被直接执行,则__name__的值为'__main__'
8、python的内存管理
无需指定类型
程序员不用关心(使用的是引用计数)
变量名会被回收
del语句能直接释放资源
9、所有的python对象都具有三个特性
身份:可以使用内建函数id()获得,可以被认为是该对象的内存地址,一般极少会用到(只读)
类型:可以使用内建函数type()查看python对象的类型,而且type()返回的也是对象(是一个叫type类的对象),而不是简单的字符串(只读)
值:对象表示的数据项
这涉及到了一个问题,那就是python中==和is的区别
其中is是根据两个对象的id进行判别的,而==是根据两个对象的值进行判别的
d = {'a':'a','b':'b'}
dd = d.copy()
d == dd
True
d is dd
False
10、python中的高速缓存
python中会对整数对象和字符串对象进行高效缓存,这会造成我们认为python会创建新对象时而python却没有创建新对象的假象
a = 1.0
b = 1.0
a is b
会输出False
而
a = 1
b = 1
a is b
会输出True
a = 'hello'
b = 'hello'
a is b
也会输出True
11、python中的可变类型和不可变类型
可变类型:列表、字典(修改后可以通过调用id(obj)方法来验证该列表或字典还是原来的那个对象,而不是从新创建的)
不可变类型:数字、字符串、元组(对字符串来说,是不能通过索引修改的,只能创建新的字符串)
12、python中数据的访问模式
直接访问:数字
顺序访问:字符串、列表、元组
映射访问:字典
13、python中不存在的类型
不存在字符类型,只存在字符串类型。
也不存在byte类型
也不存在指针类型,但是其实在python中,一切都是指针
14、python中的地板除
//代表地板除:结果取比商小的最大整数
/代表真正的除法(不过当除数和被除数都是整数的时候,默认执行的也是地板除。)
当除数和被除数都是整数的时候,如果想执行的不是地板除,那么可以使用
from __future__ import division
1/2
15、python里面没有C风格的结束字符NUL,你输入多少个字符,len()函数的返回值就是多少
16、python中那些可以改变对象值的可变对象的方法是没有返回值的
例如列表的sort方法,列表调用sort方法后列表被排序,但是sort方法并没有值返回(其实是返回了None)
类似的方法还有extend、reverse方法,这些操作都是在列表中原地进行的操作
17、python中的深拷贝和浅拷贝
见章节6.20
18、调用cmp方法比较两个字典的过程
首先比较两个字典的长度
然后比较两个字典的键
最后比较两个字典的值
(如果两个字典的大小和键都相同,那么相应键对应的值大的该字典就大)
19、字典中的键可以是任意类型,但是必须是可哈希的,那么什么才叫可哈希呢?
第一:所有不可变的类型都是可哈希的,可变类型不是可哈希的(特别说明:1和1.0做键时是相同的)
第二:一个实现了__hash__()特殊方法的类,因为__hash__()方法返回一个整数,所以仍然是用不可变的值来做键
第三:元组是不可变的,但是也可能不是一成不变的,所以用元组来做键要有一定的限制条件,那就是元组中只包括像数字和字符串这样的不可变内容时,才可以作为字典中有效的键
20、python中除了列表、元表、字典,还存在一种数据类型叫集合
通过内建函数set和frozenset来创建可变集合和不可变集合
集合联合:使用union方法或|
集合交集:使用intersection方法或&
集合补集:使用difference方法或-
集合对称差分:使用symmetric_difference方法或^
注意:加号不是集合类型的运算符(应该使用符号|)
21、python中不支持switch/case语句
22、python中也不支持三元操作符,但是可以这么写
smaller = x if x < y else y
来获得x和y中的最小值
23、python中的pass语句
如果你在需要子语句块的地方不写任何语句,会出现错误。所以提供了pass语句
24、python中的while和for循环都提供了else语句
只要while或for语句正常执行完,那么else语句就会执行,但是如果是通过break打断了循环,那么else语句将不执行
25、快速统计一个文件中的单词个数
f = open(filename,'r')
len([word for line in f for word in line.split()])
26、快速计算文件的大小
import os
os.stat(filename).st_size
27、使用python进行跨平台开发的时候,为了避免不同系统所支持的换行分隔符或路径分隔符问题,os模块提供了几个很有用的方法
linesep:用于在文件中分隔行的字符串(例如linux下是\n)
sep:用来分隔文件路径名的字符串(例如linux下是/)
pathsep:用于分隔文件路径的字符串(例如linux下是:)
curdir:当前工作目录的字符串名称(例如linux中是.)
pardir:父目录字符串名称(例如linux中是..)
28、print语句默认在输出内容的末尾增加一个换行符,在语句后面加一个逗号可以避免这种行为
29、try语句有两种主要形式
第一种:try-except
第二种:try-finally
这两个语句是互斥的,即只能使用其中一个,而不能同时使用
一个try语句可以对应一个或多个except子句,但只能对应一个finally子句
第三种:try-except-finally复合语句
第四种:try-except-else
第五种:try-except-else-finally
30、python中的with语句
不能对python的任意符号使用with语句,它仅能工作于支持上下文管理的协议(context,management,protocol)的对象。
例如file支持上下文管理协议,则可以使用:
with open('/temp.txt') as f:
for eachLine in f:
pass
其中as f是可选的
31、python中的函数,如果想要处理的参数为元组,那么需要在函数声明和使用的时候在参数的前面增加一个*号。如果要处理的函数为字典,那么需要在函数的声明和使用的时候在参数前面增加两个**号
当函数的参数中既有元组,也有字典时。函数的参数列表中**一定要在*后面
32、python中的函数支持递归操作
33、python中的名称空间
解释器会首先加载内建名称空间(由__builtins__模块中的名字构成),随后加载执行模块的全局名称空间。如果在执行期间调用了一个函数,则产生了第三个名称空间,即局部名称空间(可以通过globals和locals函数来判断出某一名字属于哪个名称空间)
__builtins__模块包含内建名称空间中内建名字的集合
__builtin__模块包含内建函数
访问一个属性时,首先从局部名称空间开始,找不到则去全局名称空间查找,找不到则去内建名称空间去查找,还找不到则会提示NameError
34、模块的导入和加载
一个模块只被加载一次,无论它被导入多少次
35、python是一种面向对象语言,但是python中并不支持纯虚函数(像c++)或抽象方法(像java),这种特性都强制程序员在子类中定义方法。作为替代方法,可以简单的在基类方法中引发NotImplementedError异常,可以获得类似的效果
36、python中没有new关键字,所以创建一个类的对象,只需要直接写类名加括号即可
如果没有定义__init__方法,则只是创建了实例对象而已,但是并不进行任何的初始化操作
如果定义了__init__方法,那么将自动调用__init__方法,被实例的对象作为默认参数传给__init__方法的self参数(__init__方法是创建实例后调用的第一个方法)
注意:类的实例对象并不是通过__init__函数来创建并返回的,其实__init__方法返回的值为None,__init__函数的作用只是在对象已经成功创建后对对象进行初始化的工作
37、python中的析构方法
当某个类的实例对象的所有引用都被清除掉后,会执行实例对象的__del__方法
38、python对象的属性不仅可以是定义类时的那些,还可以在程序运行的时候动态的添加
39、python中的类方法和实例方法
class A(object):
def foo(self,x):
#object method
print "in foo(%s,%s)"%(self,x)
@classmethod
def class_foo(cls,x):
#class method
print "in class_foo(%s,%s)"%(cls,x)
@staticmethod
def static_foo(x):
#static method
print "in static_foo(%s)"%x
使用:
a = A();
a.foo(1)
a.class_foo(1)
A.class_foo(1)
a.static_foo(1)
A.static_foo(1)
区别:
类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用
类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数
40、python中的类属性和实例属性
定义在类体里的属性为类属性
挂在self上的属性为实例属性
实例属性只能被实例调用,类属性可以被类或是实例调用。但是如果实例上定义了同名的实例属性,则在调用的时候该实例属性会覆盖同名的类属性。只有当使用类名来引用类属性时,才能更新它的值,如果尝试使用实例来更新类属性,则实际上会创建一个实例属性,所以最终无法成功更改类属性(除非该类属性是可变类型,例如字典,则通过实例变量对类变量的修改会生效)
41、python中的继承
python中的继承不支持private、protected、friend,统一都是public的,即父类的所有方法和属性都可以被子类继承