【原创】Python第一章

    Python总是从第一行代码开始逐步执行,而C是从main函数开始执行。

 
    在Python中,一切东西都是对象。
 
 在Python中,没有C的花括号,不能任意排版,属于同一个语句块的语句需要使用相同的对齐方式(前面的空格数应该一样)否则会报错。
 
固定的数据类型
    str是一种类型,字符串类型,一个字符序列。在Python中,str和基本的数值类型(比如int)都是固定的,也就是一旦设定,其值便不能改变,虽然我们可以通过方括号取得序列中的数据项,但无法改变其中的字符。
 
    在Python中,字符是指长度为1的字符串。
 
内置函数:
    内置函数是Python语言内置的一部分,我们不需要从某个库文件中对其进行import,就可以直接引用该函数。
 
Python整数大小:
    Python所表示的整数大小只受机器的内存大小的限制,而非固定的字节数。
 
    字符串可以使用双引号或单引号封装,只要字符串头尾使用的符号相同或对称即可,Python字符串使用的是Unicode编码,所以字符串内容不局限于ASCII字符。
 
方括号:
    Python使用[]提取字符串等任意序列中的某一项,从0开始。方括号存取使用与任意数据类型(只要构成一个序列)的数据项。
 
对象引用:
    定义了数据类型之后,我们就可以定义存储某种数据类型的变量,但是在Python中没有这样的变量,而是使用“对象引用”。
    x = "blue"
    执行时,Python会先创建一个str对象(放在堆区),str对象存储的就是“blue”的这些字符,同时还创建了一个名为x的对象引用,x引用的就是str对象。
    x=2
    在C中,会开辟一段内存(占4个字节),里面存储着2这个数字,这段内存的引用名为x。
    在Python中,会开辟两段内存,在堆上开辟的内存存储着2这个数字,是一个int对象,另一段开辟的内存存储着int对象的地址,该段内存的引用名为x。
 
操作符=:
    在Python中,“=”的作用是将对象引用和内存中的某对象进行绑定。如果对象引用已经存在,那么就简单的进行重绑定,以便引用“=”操作符后面的对象。如果对象引用尚未存在,就由“=”操作符创建对象引用。
 
垃圾回收:
    如果内存中的一个对象,没有任何一个对象引用引用此对象,那么这个无引用的对象,就由Python进行垃圾回收处理
 
动态类型机制:
    Python使用的的是“动态类型”机制,即在任何时刻,只要需要,某个对象引用可以重新引用一个不同的对象;某个对象引用可以重新绑定到不同的数据类型的对象。
    x="blue"     #x对象引用引用的是str对象
    x=1              #x对象引用重新与int对象进行绑定,同时str对象“blue”进入垃圾回收流程,因为没有对象引用再对其进行引用
 
    如果某个类型的对象使用了不合法的操作符,就会导致产生了一个TypeError
 
    type()函数会返回给定数据项的数据类型。
 
元组和列表:
    列表有点像C中的数组,不过Python的组合数据类型支持一个组合数据类型中包含多种类型。
    元组是固定的,创建后就不能改变;列表是可变的,在需要的时候可以插入或移除数据项;
    元组使用逗号创建,x=1,2,3,"123"
    在输出元组时,Python使用圆括号将其封装在一起,可以结合圆括号和逗号创建元组,x=(1,2,3,"123"),如果元组只有一个数据项,又需要圆括号,就需要在第一个数据项后面加上一个“多余”的逗号,如x=(1,)。这个逗号如果省略了,那么创建的只是一个普通的数据项,而不是一个元组对象。
    空元组使用空的()创建。
 
    逗号:
    逗号有两个用处:1,分隔函数参数,2,分隔元组中数据项
    由于函数参数和元组都是用圆括号封装,因此如果需要将元组常值作为参数传递,就必须使用圆括号对其进行封装,以免混淆。如:
    func(1,2,(3,4)),第三个参数是元组,如果元组不加圆括号,则会发生混淆。
    
    列表的创建使用方括号进行分封装,看来方括号不仅可以取序列中的某项数据项,还可以来定义列表。
 
元组和列表实质:
    实质上元组和列表并不存储真正的数据项,而是存储对象引用,这样做会浪费一点空间。
    x=1
    y=2
    z=3
    a=[x,y,z]
    创建列表或元组时,实际上是使用给定对象引用的副本而已。
    b=[1,2,3]
    这又和上面的创建方法不一样,这是在字面意义项(比如整数或字符串)的情况下,会在内存中创建一个适当数据类型的对象,而存放在列表或元组的才是对象引用。
 
    组合数据类型也是一种对象的类:
    因此可以将某种组合数据类型嵌套在其他组合数据类型中,比如创建一个列表,列表的数据项仍是列表。
 
    元组,列表以及字符串等数据类型的长度——len()函数:
    这长度对该数据类型是有意义的,将数据项作为参数传递给len()函数即可得到该数据项的长度。
 
    数据项知道自己的类型!:
    对象知道自己的数据类型,因此不需要明确指定数据类型,比如定义的时候
 
    列表的扩建:
    1,创建一个新的列表,再与新的列表对象的对象引用进行重新的绑定;2,使用对象自带的append方法,具有更高的效率,对于长列表更是如此。
 
方法调用:
    1,x.append("more")
    2,list.append(x,"more")
    第一种形式在实际中应用得更加广泛;第二种指定了数据类型、该数据类型的方法,并将要调用该方法的数据项本身作为第一个参数,其后再跟随一些其他参数。(在继承方面,语义存在稍微差别)
 
点(存储属性)操作符:
    用于存储某个对象的属性,属性不仅可以是方法,常量,也可以是任意类型的对象。由于属性可以是对象,该对象包含其他属性,这些属性又是对象,以此类推。
 
成员操作符in:
    对于序列或集合这一数据类型,比如字符串、列表、元组,我们可以使用操作符in来测试成员关系,用not in测试非成员关系。
    对于列表或元组,in使用的是线性搜索,对于较大的组合数据类型,速度可能会较慢;
    对于字典或集合,in的速度可以非常快;
    对于字符串数据类型,in可以很方便的测试任意长度的字符串。
 
逻辑运算符返回值:
    and or not:and or使用的是短路逻辑,比如A and B,如果A为假,那么该表达式一定为假,B不会被计算;or也是如此;
    上面的和C一样,但有一点最不一样的是,逻辑表达式的返回值:not返回的是True或False,而and or 返回的是决定结果的操作数,而不是布尔值(除非实际上是布尔操作数),比如 3 and 5表达式返回的是5.
 
a=1
a=a+1的过程分析:
    第一条语句:a=1,Python会先创建一个存储1的int对象,这个对象存储在堆内,此时用户还无法使用它,Python再创建一个名字为a的对象引用指向堆内的对象,用户通过a便可以使用堆内的存储1的对象。
    第二条语句:a=a+1,由于int类型是固定的,也就是a引用的对象一旦赋值就不能改变,因此对固定的对象使用增强的赋值操作符时,实际上是创建一个对象来存储结果,之后目标对象引用重新绑定,以便引用上面创建的结果对象,而不再引用以前的对象,以前的对象如果没有其他对象引用,便会进入垃圾回收流程。
 
a+=b和a=a+b的微妙差别:
    前者只查询了一次a的值,因而速度更快,此外,如果a是一个复杂的表达式(有副作用的表达式),那么使用增强的赋值操作符较少出错。因为计算的过程,维护者只需要改变一次,而不是两次。
 
+=和序列:
    在序列中,+=的右边必须是可迭代的操作数,否则会产生TypeError,比如 a+=[2]或a+=[2,3,4],而不是a+=2;
    在字符串序列里,a+="ABC",和a+=["ABC"]是不一样的,如:
    a=["A","BC"]
    a+="ABC"    #Python会迭代字符串序列的每个字母,最后结果是a为["A","BC","A","B","C"]
    a+=["ABC"]    #Python会迭代字符串列表的每一个数据项,最后结果是a为["A","BC","ABC"]
    
+=对于固定的数据类型和可变的数据类型:
    对于固定的数据类型,使用增强的赋值操作符,会创建一个新的对象,并且表达式的左边的对象引用将重新绑定到新的对象;
    对于可变的数据类型,原始的对象会被修改。
 
固定的数据类型和可变的数据类型:
    性能差别,固定的数据类型具有比可变的数据类型更高的潜力;有些组合数据类型(比如集合)只能操纵固定的数据类型;这就是Python规定两种数据类型的原因。
 
函数库的导入顺序:
    先导入Python的标准库模块,之后导入第三方库模块,最后才导入自己编写的模块。


本文链接:http://www.cnblogs.com/cposture/p/4514634.html

posted @ 2015-05-19 15:17  cposture  阅读(487)  评论(0编辑  收藏  举报
levels of contents