zoukankan      html  css  js  c++  java
  • python模块-logging和collections以及random模块

    主要内容:

    1.logging高级

    2.collections 模块

    3.random模块

    1.logging高级

    logging基本的示例如下:

    import logging
    logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(filename)s (line:%(lineno)d) %(levelname)s %(message)s',filename="log.log",filemode= "w")
    
    try:
        s = input(">>>>>>>")
        p = int(s)
    except ValueError as e:
        logging.debug(e)
        logging.info(e)
        logging.warning(e)
        logging.error(e)
        logging.critical(e)

    低级的有个问题,就是不能同时屏幕和文件同时输出.

    高级是支持的.示例如下:

    import logging
    logger = logging.getLogger()   # 创建logger对象.
    logger.setLevel(logging.DEBUG)
    
    fh = logging.FileHandler("test1.log",encoding="utf-8")  #创建文件句柄
    ch = logging.StreamHandler()  #产生了一个屏幕句柄
    
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    fh.setFormatter(formatter)   # 设置文件的格式  (这两个按照需求可以单独设置)
    ch.setFormatter(formatter)    # 设置屏幕格式
    logger .addHandler(fh)    #  添加文件句柄
    logger.addHandler(ch)    #添加屏幕句柄
    fh.setLevel(logging.INFO)
    ch.setLevel(logging.INFO)    #如果你对logger对象设置日志等级.那么文件和屏幕都设置了.
    # #总开关 默认从warning开始,如果想设置分开关:必须要从他更高级:(ERROR,critical)从这来个开始.
    #

    2.collections 模块

    collections 模块给你提供的就是一些特殊的数据类型.

     namedtuple  

    namedtuple是一个函数,它用来创建一个自定义的tuple对象,并且规定了tuple元素的个数,并可以用属性而不是索引来引用tuple的某个元素。

    这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便

    示例:

    from collections import namedtuple
    point = namedtuple("Point",["x","y"])
    p = point(1,2)
    print(p.x)

    deque  双向队列

    使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

    deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

    from collections import deque
    q = deque([1,2,3])
    q.append("天气")
    q.appendleft("不好")
    q.pop()
    q.popleft()
    print(q)

    defaultdict   

    使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

    注意默认值是调用函数返回的(这里是必须的),而函数在创建defaultdict对象时传入。

    除了在Key不存在时返回默认值,defaultdict的其他行为跟dict是完全一样的。

    lst = [11,22,33,44,55,66,77,88,99,90]
    from collections import defaultdict
    dic = defaultdict(list)
    for i in lst:
        if i > 66:
            dic["k1"].append(i)
        else:
            dic["k2"].append(i)
    print(dic)

    以及如下示例:

    from collections import defaultdict
    dic = defaultdict(lambda : 5)
    # for i in lst:
    #     if i > 66:
    #         dic["k1"].append(i)
    #     else:
    #         dic["k2"].append(i)
    # print(dic)
    
    for i in range(1,21):
        dic[i] = 5
    print(dic)

    Counter  统计每个元素出现的次数

    如下示例:

    from collections import Counter
    c = Counter('abcdeabcdabcabafkjdslajlkfd')
    print(c)
    
    """
    运行结果如下:
    Counter({'a': 6, 'b': 4, 'd': 4, 'c': 3, 'f': 2, 'k': 2, 'j': 2, 'l': 2, 'e': 1, 's': 1})
    """

    OrderedDict

    使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

    如果要保持Key的顺序,可以用OrderedDict

    from collections import OrderedDict
    dic = OrderedDict()
    dic["a"] =1
    dic["b"] = 2
    dic["c"] = 3
    print(dic.keys())

    3.random 模块

    import random
    print(random.random())   # 0~1 之间的小数
    print(random.uniform(1,6))  #  1~3小数
    print(random.randint(1,10)) # 1<=x<=10  整数
    print(random.randrange(1,10,2))     # 1<=x<10 的奇数 顾首不顾尾
    print(random.choice([1,"好人",[1,2,3]])) # 任选择一个,常用 ,这个里面的变量是可索引的变量,比如列表,元组,或者字符
    print(random.sample([1,"好人",[1,2,3]],2)) #任选择两个
    item = [i for i in range(1,14)]
    print(item)
    random.shuffle(item)   #打乱顺序,注意这里是打乱原有列表,不是返回值是打乱的.返回为none
    print(item)

    两个小作业

    # 1题:4位,全数字的随机验证码
    # 2题:4位,数字与字母(不区分)相结合的随机验证码.

    个解决思路如下:

    p = random.random()
    s = str(p)
    m = s[2:6]
    print(m)
    
    lst = [i for i in range(10) ]
    s = [chr(i)  for i in range(65,91)]
    lst.extend(s)
    lst_tmp =[]
    for i in range(4):
        lst_tmp.append(random.choice(lst))
    print(lst_tmp)
  • 相关阅读:
    一名中国联络官的来信
    中国女性出席1899年伦敦世界妇女大会
    曾在九江同文任教的中外人士若干
    金韵梅大夫略传
    为何高于四次的方程没有根式解?
    日军进攻九江的影像资料
    美以美会在九江
    九江同文中学与宝洁公司的甘布尔家族
    九江生命活水医院
    微信小程序获取用户信息签名解密C#
  • 原文地址:https://www.cnblogs.com/ahliucong/p/9286091.html
Copyright © 2011-2022 走看看