美文网首页
Python入门

Python入门

作者: 无心Y | 来源:发表于2019-12-11 14:26 被阅读0次

    数字

    • 数字类型和类型转化
    # Number() 标准数据类型 python3中无long类型
    int(str, base=10) # 转换为整型
    float(obj) # 转换为浮点数
    bool(obj) # 调用obj.__nonezero__()内置方法,返回对象的布尔值
    complex(str) # 转化为复数
    
    str(obj) # 调用obj.__str__()方法 or repr(obj)
    chr(num) # ascii值转字符  97 -> 'a'
    ord(chr) # 字符转ascii值  'a' -> 97
    
    • 运算符
    +
    -
    *
    ** # 幂次 pow(n1, n2)
    /  # python3中是浮点除
    // # 整除,商部强制取整 1//2 = 0; 1.0//2 = 0.0
    %  # 取余
    ~  # 按位取反
    &  # 按位与
    ^  # 按位异或
    |  # 按位或
    << # 左移
    >> # 右移
    
    • 进制转化
    # 十进制转其他
    oct(64) # 转八进制 '0o100'
    hex(64) # 转16进制 '0x40'
    bin(64) # 转二进制 '0b1000000'
    
    # 其他转十进制
    int('64')
    int('100', 8)
    int('40', 16)
    int('1000000', 2)
    
    • 小整数缓存(-5~256)
    a=-5
    b=-5
    a is b # True
    a=-6
    b=-6
    a is b # False
    
    • 常用内置函数
    abs(number)          # 取绝对值         
    divmod(n1, n2)       # 返回一个包含商和余数的元组(n1//n2, n1%n2)
    pow(n1, n2, mod=1)   # 幂次运算(n1**n2%mod)
    round(number[,base]) # 四舍五入,base决定保留小数点后几位
    
    • 常用模块
    import math
    import random
    import decimal
    
    math.ceil(x)      # 向上取整
    math.floor(x)     # 向下取整
    math.fabs(x)      # 绝对值
    math.factorial(x) # 阶乘
    math.hypot(x, y)  # sqrt(x*x+y*y)
    math.pow(x, y)    # 幂次
    math.sqrt(x)      # 开平方
    math.log(x)       # 求自然对数
    math.log10(x)     # 求10为底的对数
    math.trunc(x)     # 取整
    math.e
    math.pi
    
    random.random()       # range[0, 1.0)
    random.uniform(a, b)   # range[a, b] a,b之间的随机浮点数
    random.randint(a, b)   # range[a, b] a,b之间的随机整数
    random.randrange([start=0], stop, [step=1]) # range序列中的随机数
    random.choice(seq)     # seq中随机取一个元素
    random.shuffle(seq)    # 随机打乱seq
    random.sample(seq, n)  # seq中随机选取n个元素
    
    """
    金融应用和其它需要精确十进制表达的场合,
    控制精度
    控制舍入以适应法律或者规定要求"""
    >>> from decimal import Decimal
    >>> Decimal('0.1') / Decimal('0.3')
    Decimal('0.3333333333333333333333333333')
    
    >>> from decimal import getcontext
    >>> getcontext().prec = 4 #设置全局精度
    >>> Decimal('0.1') / Decimal('0.3')
    Decimal('0.3333')
    

    字符串

    • 特点
      • 不可变数据类型
      • 表示方式'a', "a", """a""", 三引号通常用作文档注释
      • r'string' 表示原始字符串,不进行转义
      • python3中str表示字符串,bytes表示字节码,默认编码是UTF-8;python2中unicode表示字符串,str表示字节码,默认编码是asiic
    • 索引和分片
      • [start:stop:step] -- 不含stop
      • [:] 拷贝全部
      • [::-1] 字符串翻转
      • [:-1] 拷贝全部,不包含最后一个字符
    • f string (3.6后新特性)
      • f'{var_name}' 使用变量替换{}内的内容
      • f'{expre}' 直接计算{}内表达式结果
    • 字符串运算
      • '+' 字符串连接
      • '*' 字符串重复
      • len(str) 返回字符串长度
    • 字符串格式化
    符号 描述
    %s 格式化字符串
    %d 格式化整数
    %f 格式化浮点数
    %e 科学计数法格式化浮点数
    %g %f和%e简写
    • 字符串内置函数
    string.capitalize() # 首字母大写
    string.title() # 所有字符大写
    string.upper()
    string.lower()
    string.center(width, fillchar)
    string.expandtabs(tabsize=8) # 将string中tab转换为空格
    string.count(str)
    bytes.decode(encoding='utf-8')
    string.encode(encoding='utf-8')
    string.startswith(str)
    string.endswith(str)
    string.strip()  # 去除两端空格
    string.find(str) # 包含返回开始的索引,不包含返回-1
    string.index(str) # 不包含抛异常
    string.replace(old, new, [max])
    string.join(seq) 
    seq.split(str)
    string.isalpha() # 全是字母
    string.isdigit() # 全是数字
    string.isnumeric() # 全是数字
    string.isalnum() # 全是数字和字母
    

    列表

    • 特点:可变类型,有序序列,元素可以是任意类型
    • 声明
    l = []
    l = [1, 2, 'a']
    l = list('hello')
    l = 'a, b, c'.split(',')
    
    • 添加
    l = [1, 2, 3]
    l.append(4)
    l.extends(['a', 'b', 1])
    l.insert(0, 'loda')
    
    • 修改
    l = [1, 2, 3]
    l[0] = 'a'
    l[:2] = ['a', 'b']
    
    • 删除
    l = ['a', 2, 3]
    del l[0]
    l[:] = []
    l.remove('a')  # 元素不存在报ValueError
    l.pop()    # 删除并返回最后一个元素
    l.pop(1)   # 删除并返回指定位置的元素
    
    • 查找
    l = ['a', 'b', 'c']
    l.index('a')   # 元素不存在报ValueError
    l.count('a')
    
    • 排序
    l = [2, 3, 1, 5]
    l.sort([cmp], [key], [reverse=False]) # key为指定排序的键, 默认正序排列
    sorted(seq, [key], [reverse])
    
    l.reverse()
    reversed(seq)
    
    • 列表解析
    [ x*x for x in seq if x%2==0]
    for index, value in enumerate(l):
        print(index, value)
    outer = [1, 2, 3]
    inner = [10, 20, 30]
    l = [ x+y for x in outer for y in inner]
    
    • 序列相关模块:array, copy, operator, re, collections, types

    元组

    • 特点:不可变序列,可作为字典的键(前提是元祖的值都是不可变类型)
    • 声明
    t = ()
    t = (1,)
    t = tuple('hello')
    
    • 实践
    x, y = (1, 2)
    
    print('%s is %s years old.' % ('tom', 20))
    
    def print_list(l):  # 传参,强制不改变原始序列
        t = tuple(l) 
        dosomething()
    

    字典

    • 特点:键值对集合,键可哈希,无序排列,访问速度快
    • 声明
    d = {}
    d = {'a': 1, 'b': 2}
    d['c'] = 3
    
    d = dict()
    d = dict([('a', 1), ('b', 2)])
    d = dict(a=1, b=2)
    d = dict(zip(['a', 'b'], [1, 2]))
    
    d = dict.fromkeys(['a', 'b'], 'default_value')
    
    from copy import deepcopy
    d1 = deepcopy(d)
    
    • 遍历
    if k in d:
        print(d.get(k))
    
    for k in d:
        dosth()
    
    for k, v in d.items():
        dosth()
    
    for v in d.values():
        dosth()
    
    • 修改
    d = {'a': 1, 'b': 2}
    d['a'] = 2
    
    d.update({'a': 2, 'c': 1})
    d.update(a=1, b=2, d=4)
    
    • 删除
    d = {'a': 1, 'b': 2, 'c': 3}
    del d['a']
    
    d.pop('b')
    
    d.clear() #清空字典
    
    • 排序
    d = {'b': 1, 'a': 4, 'c': 3}
    
    sorted(d) # 返回按键正序排列的键列表
    
    from operator import itemgetter
    d = sorted(d.iteritems(), key=itemgetter(1), reverse=True) # 返回按照值倒序排列的键值对元组列表
    
    • 利用dict进行switch
    switch = {
        'a': lambda x:x*2,
        'b': lambda x:x*3,
        'c': lambda x:x**x,
        'default': lambda x: x,
    }
    swtich.get('a', 'default')(2)
    

    集合

    • 特点:无序不重复元素集
    • 声明
    s = set()
    s = set([1, 2, 3])
    s = set('hello')
    
    f = frozenset()   # 不可修改
    f = frozenset([1, 2, 'a', 'b'])
    
    • 常用操作
    s = set([1, 2, 3])
    
    # 成员判断
    1 in s
    4 not in s
    
    # 添加
    s.add(4)
    s.upate(set([3, 4]))
    
    # 删除
    s.remove(1)    # 不安全,key不存在抛出KeyError
    s.discard(1)   # 安全
    s.pop(1)       # 不安全,删除并返回删除的元素
    
    s.clear()
    
    • 集合间操作
    # 交集
    s.intersection(b)
    s&b
    
    # 并集
    s.union(b)
    s|b
    
    # 差集
    s.difference(b)
    s-b
    
    # 对称差分
    s.symmetric_difference(b)
    s^b
    
    # 关系判断
    s.issubset(b)    # 子集
    s.issuperset(b)  # 父集
    
    • 集合推导
    {x for x in range(3)}
    >>>set([0, 1, 2])
    

    函数

    • 定义:最大程度复用代码,最小化代码冗余,流程分解
    def func(*arg, **kwargs):
        dosth
        return 0
    
    • 形参和实参
    def sum(a, b):    # a, b形参
        return a+b
    sum(1, 2)         # 1, 2实参
    
    • 位置参数
    def sum(a, b):    
        return a+b
    
    sum(1, 2)    # a=1, b=2
    sum(2, 1)    # a=2, b=1
    
    • 关键字参数(对于可选参数可利用关键字参数设置参数默认值;默认参数位于位置参数之后)
    def sum(a, b=0): # b为默认参数
        return a+b
    
    sum(1)
    sum(2, 1)
    
    • 可变长参数
    def print_seq(*seq):            # 序列
        for i in seq:
            print(i)
    
    print_seq([1, 2, 3])
    
    def print_kwargs(**kwargs):     # 字典
        for k, v in kwargs.items():
            print('{}, {}'.format(k, v))
    
    print_kwargs(a=1, b=2)
    
    • 参数调用和传递
      • 参数匹配顺序:位置参数 > 关键字参数 > *seq > **dict
      • 不可变对象通过值传递,可变对象通过传址传递
    • lambda函数: 用于定义小型的函数,在函数中仅包含单一的参数表达式
      • lambda x: x+1
      • lambda是一个表达式,而不是一个语句
    • 函数设计原则
      • 不要改变可变类型参数,除非调用者希望如此
      • 每个函数都应该有一个单一的,统一的目标
      • 每个函数都应该相对较小,一个函数只做一件事
      • 避免直接改变在另一个模块文件中的变量
      • 只有在真正必要的情况下使用全局变量作为参数和返回值

    内置函数

    • 数学相关
    abs(-1)         # 1
    divmod(10, 3)   # (3, 1)
    pow(2, 4)       # 16
    round(2.56)     # 2.0
    round(2.436, 2) # 2.44
    min([1, 2, 3])  # 1
    max([1, 2, 3])  # 3
    
    • 序列相关
    l = [1, 2, 3]
    len(l)      # 3
    range(3)    # [0, 1, 2]
    xrange(3)   # xrange obj
    
    • 对象及类型
    callable(obj)    # 对象是否可调用
    cmp(x, y)        # x>y 返回1;x==y 返回0;x<y 返回-1
    isinstance(obj, type)
    type(obj)
    
    • 类型转换
    chr(num)
    ord(char)
    str(obj)
    repr(obj)
    
    int(obj)
    float(obj)
    bool(obj)
    complex(str)
    
    • 进制转换
    oct(10)    # '0o12'
    hex(20)    # '0x14'
    bin(10)    # '0b1010'
    
    int('0o12', 8)   # 10
    int('0x14', 16)  # 20
    int('0b1010', 2) # 10
    
    • 数据结构
    list(seq)
    tuple(seq)
    dict(seq)
    set(seq)
    
    • 序列处理
    # 使用func作用于list中每一项,返回为函数返回值为True的所有项
    filter(func, list)
    
    # 使用map作用于list中的每一项,返回列表
    map(func, list[,list])
    
    # 选取seq中的前两项传参给func, 函数的返回和下一项继续传参给func,直到最后
    reduce(func, seq)
    
    # 返回元组列表
    zip(list1, list2, [list])
    

    文件处理

    • 打开文件
    f_obj = open(filename, mode='r', buffering=-1)
    
    • 文件模式
      • r 只读
      • w 只写(文件存在则清空文件内容,不存在则创建文件)
      • a 追加(文件指针自动移到文件尾部)
      • r+ 读写
      • w+ 读写(消除文件内容,以读写方式打开文件)
      • a+ 读写
      • b 以二进制模式打开文件
    • 文件对象属性
      • file.name 文件名
      • file.encoding 文件编码
      • file.mode 文件打开模式
      • file.closed 文件是否关闭
      • file.softspace 为0表示在输出一数据后,加上一空格,1表示不加,内部使用
    • 文件常用操作
    file.read(size=-1)          # 从文件中读取size个字节,默认读取全部
    file.readline(size=-1)      # 读取并返回一行,包含换行符
    file.readlines(sizeint=0)   # 读取所有行,并返回列表
    
    file.write(str)             # 向文件中写入字符串
    file.writelines(seq)        # 向文件中写入行列表
    
    file.seek(offset, whence=0) # 移动文件指针,whence=0 开始, 1 当前, 2末尾
    file.tell()                 # 获取文件指针的位置
    file.truncate(size)         # 从当前位置开始,截取size个字节
    file.close()                # 关闭文件
    file.fileno()               # 返回文件描述符
    file.flush()                # 刷新文件内部缓存
    file.isatty()               # 判断file是否是类tty设备
    file.next()                 # 返回文件下一行
    
    • 最佳实践
    # 文件读取
    with open(file) as f:
        for line in f:
            line = line.strip()
    
    # pickle 存储对象
    import pickle
    
    d = {1: 'a', 2: 'b'}
    with open('data.pkl', 'wb') as f:
        pickle.dump(d, f)
    
    with open('data.pkl', 'rb') as f:
        data = pickle.load(f)
        print(data)
    
    # struct 打包和解析二进制数据
    import struct
    
    with open('data.bin', 'wb') as f:
        data = struct.pack('hhl', 1, 2, 3)
        f.write(data)
    
    with open('data.bin', 'rb') as f:
        data = f.read()
        data = strunt.unpack('hhl', data)
        print(data)
    
    • 文件相关模块
      • base64 编码/解码操作
      • bz2
      • csv
      • gzib/zlib
      • zipfile 用于读取ZIP归档文件的工具
      • tarfile
      • tempfile 创建一个临时文件
      • filecmp
      • getopt/optparse 提供了命令行参数的解析/处理
      • glob/fnmatch 提供Unix样式的通配符匹配功能

    日期处理

    • 涉及对象
    # datetime
    import datetime
    
    now = datetime.datetime.now()
    print(now)
    >>>2019-12-11 11:56:28.930000
    
    # date
    date = datetime.datetime.now().date()
    print(date)
    >>>2019-12-11
    
    # timestamp
    import time
    
    print(time.time())
    >>>1576036503.16
    
    # time tuple
    import time
    print(time.localtime())
    >>>time.struct_time(tm_year=2019, tm_mon=12, tm_mday=11, tm_hour=11, tm_min=55, tm_sec=43, tm_wday=2, tm_yday=345, tm_isdst=0)
    
    # string
    import datetime
    
    print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    >>>2019-12-11 11:56:28
    
    • datetime常用操作
    import datetime
    
    # 获取当前时间
    datetime.datetime.now()
    
    # 获取当前日期
    datetime.date.today()
    
    # 获取前/后 N天
    datetime.datetime.now() + datetime.timedelta(days=1)
    datetime.datetime.now() - datetime.timedelta(days=1)
    
    # 获取当天开始/结束时间
    datetime.datetime.combine(datetime.date.today(), datetime.time.min)
    datetime.datetime.combine(datetime.date.today(), datetime.time.max)
    
    # 获取本周/月/上月最后一天
    today = datetime.date.today()
    sunday = today + datetime.timedelta(6 - today.weekday())
    
    import calendar
    
    _, last_day = calendar.monthrange(today.year, today.month)
    last_day = datetime.data(year=today.year, month=today.month, day=last_day)
    
    first_day = datetime.date(year=today.year, month.today.month, day=1)
    last_month = first_day - datetime.timedelta(days=1)
    
    
    • 日期类型转换
    import datetime
    import time
    # datetime <=> string
    datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    datetime.datetime.strptime('2019-12-11 11:56:28', '%Y-%m-%d %H:%M:%S')
    
    # datetime <=> timestamp
    now = datetime.datetime.now()
    timestamp = time.mktime(now.timetuple())
    
    datetime.datetime.fromtimestamp(time.time())
    
    # datetime <=> timetuple
    timetuple = now.timetuple()
    
    now = datetime.datetime.fromtimestamp(time.mktime(time.localtime()))
    

    相关文章

      网友评论

          本文标题:Python入门

          本文链接:https://www.haomeiwen.com/subject/zvbogctx.html