一.python基础:


  • 数据类型:

       
       原始类型:
       int float byte
    
       复合类型:
       由其他原始类型组合起来的类型
       list dict cuple 
    
  • 运算符和表达式:

        算术运算符:
                加 / 减 / 乘 / 除 / 取模 / 幂 / 地板除
                +    -    *    /     %     **     //

        python2 的 除:
        10 / float(20)

        位运算符[二进制之间的运算]:
        bin(60) 转换成二进制数
        int(\'1100\',2)   将二进制转换成十进制
        &    按位与        都为1 才为1    
        |    按位或         存在1 即为1
        ^    按位异或         相同的为0,不同的为1
        ~    按位取反         正数的补码,反码都是其本身
                        负数的补码是:符号位不变,其余各位求反,末位加1 ,既11111
                        反码是:符号位为1,其余各位求反,但末位不加1 ,既11110
                    
                        假设有一个数~9,计算步骤如下,9=1001
                        其补码为01001,
                        对其取反10110,这个数是在内存中存放的,现在需要装换成原码,既先减1,然后取反得 
                        11010,符号位为1是负数,既-10
        <<    左移
        >>  右移
  • 按位取反:

  •     ---
        正数的补码和反码都是其本身,但是前面要加上正数的符号位 \"0\"
        ---
        负数的符号位是\"1\"
        负数的补码是:符号位不变,其余各位求反,末位加1
        负数的反码是:符号位不变,其余各位求反
        ---
        二进制数在内存中是以补码的形式存放的
        ---
    
    60的按位取反计算:
    
        第一步:
        计算60的 [补码] 和 [反码]:
    
                    原码    补码     反码
            十进制    60
            二进制    111100  0111100    0111100
    
    
        第二步:
        取反[取反操作是对补码进行取反]:
    
    
                            补码
                            1000011
    
                                    反码
                                    补码 - 1
                                    1000010
                    原码
                    1111101
                    1 代表是负数
                     111101 转换成十进制为61
                    -61
  • 比较运算符[返回布尔类型]:

       ==    等于
       !=    不等于
       >   大于
       <   小于
  • 逻辑运算符:

  •    
       and        与     同时True才为True
       or        或  只要存在True 则为True
       not     非  取反
    
       逻辑运算的短路功能:
       前面False后面就不会再计算:
       1+2 >4 and (2+2) == 4
    
       前面是True就不会再计算后面:
       1+2 <4 or (2+2) == 3 
    

       def add(x, y):
           print(\"%d + %d\" %(x, y))
           return x+y
       add(1, 2) > 4 and add(2, 3) == 5
          ...: 
       1 + 2
       Out[2]: False
    

       def add(x, y):
           print(\"%d + %d\" % (x, y))
           return x+y
       add(1, 2) < 4 and add(2,3) < 6
          ...: 
       1 + 2
       2 + 3
       True
    

       def add(x, y):
           print(\"%d + %d\" % (x, y))
           return x+y
       add(1, 2) < 4 and add(2,3) < 4
          ...: 
       1 + 2
       2 + 3
       False
    
  • 其他运算符:

    =        赋值运算符
    in         成员运算符
    not in     成员运算符
    is         身份运算符, 比较两个元素的id; 列表不能用is 做比较
    is not     身份运算符
            is 使用的环境经常拿来判断是不是None;
  • 表达式与优先级:

        1. 一元高于二元
        2. 数值高于逻辑
        3. 算术运算高于位运算
        4. 乘除高于加减
        5. 拿不准时加括号
  • 程序结构:

        1.    顺序结构
        2.    分支结构
        3.    循环结构

        关于 SWITCH
        Python中并没有switch结构,因为\'switch\'结构完全可以由\'if elif else\'语句来实现
        
        switch实现方法:
        粗糙版:
        #coding:utf8  
        #add minus divide using python  
        from __future__ import division  
        x=1  
        y=2  
        operator=\'/\'  
        result={  
        \"+\":x+y,  
        \"-\":x-y,  
        \"*\":x*y,  
        \"/\":x/y  
        }  
        print(result.get(operator))         

        改进版:
        #!/usr/bin/env python
        # -*- encoding:utf-8 -*-
        
        class calculate:
            def __init__(self, x, op, y):
                self.x = x
                self.op = op
                self.y = y
        
            def count(self):
                result={
                \"+\":self.x+self.y,
                \"-\":self.x-self.y,
                \"*\":self.x*self.y,
                \"/\":self.x/self.y}
                print(result.get(self.op))
        
        mark = calculate(10,\"+\",2)
        mark.count()
  • python的三元运算

        a = 4
        b = a if a > 0 else 0
  • RANGE函数

        range(x)         [0,x)
        range(m, n)     [m, n)
        range(m, n, s)    [m,n),步长为s
  • break 子句

        * 只能出现在循环结构中
        * 用于跳出当前循环结构
  • continue子句:

        * 只能出现在循环结构中
        * 用于跳过此次迭代的剩余操作
  • else子句:

        循环结构的else子句是python特有的,用于表示一个循环不是经过\'break\'跳出循环,提前结束循环,而是正常退出的,才会执行else中的语句;

二.内置容器:


  • 列表

        * list是最常用的线性数据结构
        * list是一系列元素的有序组合
        * list是可变的
        
        列表的操作:
        定义列表:
        li = []
        li = list()
        li = [1, 2, 3]

        查看帮助文档:
        help(list)
        增:append, extend, insert
        删:clear, pop, remove
        改:reverse, sort
        查:count, index
        其他:copy

        增:
        li = []
        append:只能一个一个增加
        li.append(3)
        
        extend:扩展
        li.extend([5,6,7])
        li
        [3, 5, 6, 7]

        insert:位置之前插入
        li.insert(0, 0) 在第一个之前插入0

        删:
        clear:清空列表
        li.clear()

        remove:从左开始删除指定元素一个,如果删除的元素不存在会报错ValueError
        li.remove(3)  删除元素3
        
        pop:删除指定位置元素:如果不存在会报错IndexError
        li.pop()    删除最后一个元素
        li.pop(3)   删除key是3的元素

        改:
        reverse:颠倒列表顺序:
        sort:从小到大排序:    仅用于简单数字排序
        sort(reverse=True) 从大到小排序:

        查:
        count:显示匹配元素个数
        li.count(3)
        
        其他:
        index(3):返回指定元素在列表中的位置;如果不存在会报ValueError:
        index(value, [start, [stop]]) 

        copy: 深拷贝,会生成一个新的list
                赋值是浅拷贝,浅拷贝的数据修改会对原来的list产生影响;

        下标操作:
        li[1]
        
        li[1] = 10

        切片:
        li[3:5]:  前面是闭区间  后面是开区间
        li[3:]
        li[:]  效果和copy是一样的,效率会比copy快;
        li[:4] 
        li[4:-2]     切到倒数第二个;后面是开区间
        li[-4:-1]
        li[2:6:2]:    start, stop ,步长
        li[6:2:-1]  start,stop ,反向显示,步长为1
        li[6:2:-2]    start,stop,反向显示,步长为2
        li[::-1]
        li[::2]
  • 元组[tuple]:

        tuple和list大多数地方类似
        tuple是不可变结构
        tuple只能获取值

        定义一个元组:
        t = ()
        t = tuple()

        count:统计元素个数
        index:返回指定元素在元组中的位置

        下标操作[通过下标获取value]:
        t[1]

* PACKING & UNPACKING

        PACKING        :把多个变量的值变成一个元组或者列表,默认是变成元组
        UNPACKING    :也可以把一个元组或者列表赋值给多个变量

    ---
        x, *y = (1, 2, 3, 4)
        print(x)
        1
        print(y)
        [2, 3, 4]

    ---
        *x, y = (1, 2, 3, 4)
        print(x)
        [1, 2, 3]
        print(y)
        4

    ---
        *_ 这个表示赋值给一个不能用的变量:

        x, *_, y = (1, 2, 3, 4)
        print(x)
        1
        print(y)
        4
        
    ---
        x, (y, z) = (1, (2, 3))
        print(x)
        1
        print(y)
        2
        print(z)
        3

    ---
  • 集合:

        集合的含义和数学上集合的含义相同
        集合不是线性结构
        * 集合元素是唯一的
        集合元素是可hash的
        
        集合的操作:
        初始化:
        s = set()
        s = set([1, 2, 3])

        增:
        s.add(3)                     //添加一个元素
        s.update([3, 4, 5, 6])        //集合添加list中的多个元素

        删:
        remove:        删除,删除不存在的元素会抛出异常;
        discard:    删除,删除不存在的元素不会抛出异常;
        clear:        清空
        pop:        随机删除集合中的一个元素
        
        集合运算:
        union                    并集              a | b
        intersection            交集              a & b
        difference                差集,不可交换的    a - b
        symmetric_difference    集合之差的并集       a ^ b

        集合判断[返回布尔值]:
        issubset    子集
        issuperset    超集
        isdisjoint    
  • 字典:

        * 字典是一种无序集合
        * 字典是一种KV结构
        * value可以是任何对象
        * key是唯一的
        * key必须是可hash对象

        字典的操作:
        d = dict()
        d = {\'a\':5, \'b\':4}
        d[\'a\']
        
        d.keys()
        dict_keys([\'b\', \'a\'])

        遍历 key:
        for key in d.keys():
            print(d[key])

        遍历 value:
        for value in d.values():
            print(value)

        遍历key和value:
        for key,value in d.iterms():
            print(key, value)
            print(\'%s => %s\' %(key, value))

        d.iterkeys()    返回的是一个生成器;
        
        pop,popitem     用于删除元素
        d.pop(\'key\')    需要指定key,删除不存在的值返回KeyError
        d.pop(\'key\',6)    删除不存在的值将返回 6
        
        增加字典元素:
        d[\'c\'] = 7