Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。

常规

  • Python是区分大小写的
  • Python索引从0开始
  • Python使用空白(制表符或空格)来缩进代码,而不是使用大括号。

帮助

帮助主页help()
函数帮助help(str.replace)
模块帮助help(re)

模块 (库)

列出模块内容dir(module1)
加载模块import module1 *
从模块中调用函数module1.func1()

import语句会创建一个新的名称空间,并执行该名称空间内关联的.py文件中的所有语句。 如果希望将模块内容加载到当前名称空间,请使用"from module1 import *"

标量类型

检查数据类型: type(variable)

整数

int/long - 大整数自动转换为长整数

浮点数

float - 64位,没有 "double" 类型

布尔值

bool - 真或假

字符串

str - Python2.x 默认为: ASCII; Python3为: Unicode

  • 字符串可以是单引号/双引号/三引号
  • 字符串是一个字符序列,因此可以像其他序列一样对待
  • 特殊字符可以通过\或r开头来完成
    str1 = r\'this\f?ff\'
    
  • 字符串格式可以通过多种方式实现
    template = \'%.2f %s haha $%d\'
    str1 = template % (4.88, \'hola\', 2)
    

str()、bool()、int()和float()也是显式类型转换函数

空值

NoneType(None) - Python 'null'值(只有一个None对象实例存在)

  • None不是一个保留关键字,而是 “NoneType” 的唯一实例
  • None是可选函数参数的通用默认值:
    def func1(a, b, c = None)
    
  • None的常见用法:
    if variable is None :
    

日期时间

datetime - 内置python “datetime” 模块,提供 “datetime” 、 “日期” 、 “时间” 等类型。

  • “datetime” 组合了存储在 “date” 和 “time” 中的信息
    从字符串创建日期时间dt1 = datetime.strptime('20091031', '%Y%m%d')
    获取“日期”对象dt1.date()
    获取“时间”的对象dt1.time()
    将日期时间格式化为字符串dt1.strftime('%m/%d/%Y %H:%M')
    修改字段值dt2 = dt1.replace(minute = 0, second=30)
    获取差值diff = dt1 - dt2 # diff 是一个 'datetime.timedelta' 对象

数据结构

元组

元组是一种固定长度、不能修改的序列。

创建元组tup1=4,5,6 or tup1 = (6,7,8)
创建嵌套的元组tup1 = (4,5,6), (7,8)
将序列或迭代器转换为元组tuple([1, 0, 2])
连接元组tup1 + tup2
分解元组a, b, c = tup1
交换变量b, a = a, b

列表

列表是一种可变长度、可修改元素的序列。

创建列表list1 = [1, 'a', 3] or list1 = list(tup1)
连接列表list1 + list2 or list1.extend(list2)
追加列表list1.append('b')
插入到指定位置list1.insert(posIdx, 'b') **
通过指定元素索引值来移除列表中元素valueAtIdx = list1.pop(posIdx)
从列表中删除第一个值list1.remove('a')
判断值是否存在列表中3 in list1 => True ***
排序列表list1.sort()
使用用户提供的函数排序list1.sort(key = len) # 按长度排序

注意:

  • “开始”索引包含,但“停止”索引不包含。
  • start/stop可以省略,默认为开始/结束。

切片

序列类型包括'str','array','tuple','list'等。

list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]

字典(哈希)

创建字典dict1 ={'key1' :'value1',2 :[3, 2]}
映射函数方式来构造字典dict(zip(keyList, valueList))
获取元素dict1['key1']
变更/添加元素dict1['key1'] = 'newValue'
获取值,不存在则返回默认值dict1.get('key1', defaultValue)
判断值是否存在'key1' in dict1
删除元素del dict1['key1']
获取Key列表dict1.keys()
获取Value列表dict1.values()
更改Valuesdict1.update(dict2) # dict1的值被dict2所代替

集合

集合是唯一元素的无序集合。

创建集set([3, 6, 3]) or {3, 6, 3}
判断集合set1的所有元素是否都包含在集合set2中set1.issubset(set2)
判断集合set2的所有元素是否都包含在集合set1中set1.issuperset(set2)
判断集合是否相同set1 == set2
并集(or)set1 | set2
交集(and)set1 & set2
差集set1 - set2
返回两个集合中不重复的元素集合(xor)set1 ^ set2

函数

  • 基本形式

    def func1(posArg1, keywordArg1 = 1, ..):
    
  • "函数是对象"的常见用法:

    def func1(ops = [str.strip, user_ define_func, ..], ..):
        for function in ops:
            value = function(value)
    
  • 返回值

    • 如果函数的末尾没有return语句的话,则不返回任何值。
    • 通过一个元组对象返回多个值
     return (value1, value2)
    
     value1, value2 = func1(..)
    
  • 匿名函数

    lambda x : x * 2
    # def func1(x) : return x * 2
    

常用函数

  1. Enumerate 枚举返回一个序列(key,val)元组,其中key是当前项的索引。

    for key, val in enumerate(collection):
    
  2. Sorted 对所有可迭代的对象进行排序操作。

    sorted([2, 1, 3]) => [1, 2, 3]
    
  3. Zip 将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

    zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..]
    
  4. Reversed 返回一个反转的迭代器。

    list(reversed(range(10)))
    

控制和流

  1. “if else”条件的运算符:

    检查两个变量是否是同一个对象var1 is var2
    检查两个变量是否是不同的对象var1 is not var2
    检查两个变量是否有相同的值var1 == var2
  2. for运算符的常用用法:

    for element in iterator :
    
  3. 'pass' - 不做任何事情,一般用做占位语句。

  4. 三元表达式

    value = true-expr if condition else false-expr
    
  5. 没有switch/case语句,而是使用if/elif。

面向对象

  1. 'object'是所有Python类型的基础

  2. 任何(数字、字符串、函数、类、模块等)都是一个对象,每个对象都有一个'type'。对象变量是指向其在内存中的位置的指针。

  3. 对象的基本形式

    class MyObject(object):
        # 'self' 相当于Java/C++中的 'this'
        def __init__(self, name):
            self.name = name
    
        def memberFunc1(self, arg1):
            ..
    
        @staticmethod
        def classFunc2(arg1):
            ..
    
    obj1 = MyObject('name1') 
    obj1.memberFunc1('a') 
    MyObject.classFunc2('b')
    
  4. 交互工具:

    dir(variable1) # 列出对象上所有可用的方法
    

字符串操作

使用分隔符连接列表/元组

', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'

格式字符串

string1 = 'My name is {0} {name}'
newString1 = string1. format('Sean', name = 'Chen')

分割字符串

sep = '-'
stringList1 = string1.split(sep)

得到字符串

start = 1
string1[start:8]

用0填充字符串

month = '5'
month.zfill(2) => '05' 
month = '12'
month.zfill(2) => '12'

异常处理

  1. 基本形式
try:
    ..
except ValueError as e:
    print e
except (TypeError, AnotherError):
    ..
except:
    ..
finally
    ..
  1. 手动设置异常
raise AssertionError # 断言失败
raise SystemExit # 请求程序退出
raise RuntimeError('Error message :..')

列表、集合和字典理解

使代码更容易读和写的语法糖

  1. 列表理解

    通过过滤集合的元素并在一个简洁的表达式中转换通过过滤器的元素,简洁地形成一个新列表。

    基本形式

    [expr for val in collection if condition]
    

    快捷方式:

    result = []
    for val in collection:
        if condition:
            result.append(expr)
    

    可以省略筛选条件,只留下表达式。

  2. 字典理解

    {key-expr : value-expr for value in collection if condition}
    
  3. 集合理解

    基本形式:与列表理解相同,只是用{}代替[]

  4. 嵌套列表推导

    基本形式:

    [expr for val in collection for innerVal in val if condition]