• 第5课:内置函数、处理json、常用模块


    1.  内置函数
    1)常用的内置函数
    print(all([0, 2, 3, 4]))  # False,判断可迭代的对象里面的值是否都为真
    print(any([0, 1, 2, 3, 4]))  # True 判断可迭代的对象里面的值是否有一个为真
    print(bin(100), type(bin(100)))  # 0b1100100 <class 'str'> 十进制转二进制,二进制前有0b,如果想去掉,用如下方法:
    ejz = bin(100)
    print(ejz.replace('0b', ''), type(ejz.replace('0b', '')))  # 1100100 <class 'str'>
    print(bool('s'))  # 把一个对象转换成布尔类型
    print(bytearray('abcde', encoding='utf-8'))  # 把字符串变成一个可修改的bytes,什么情况下会用到呢???
    '''
    print(callable('aa'))
    # 1. 判断传入的对象是否可被调用,可被调用是指能否使用()(括号)的方法调用
    # 2. 可调用对象,在实际调用也可能调用失败;但是不可调用对象,调用肯定不成功。
    # 3. 类对象都是可被调用对象,类的实例对象是否可调用对象,取决于类是否定义了__call__方法。
    #       >>> callable(1)
    #           False
    #       >>> 1()
    #           Traceback (most recent call last):
    #           File "<pyshell#5>", line 1, in <module>
    #           1()
    #           TypeError: 'int' object is not callable
    #       >>> class A:  # 定义类A
    #               pass
    #
    #       >>> callable(A)  # 类A是可调用对象
    #               True
    #       >>> a = A()  # 调用类A
    #       >>> callable(a)  # 实例a不可调用
    #           False
    #       >>> a()  # 调用实例a失败
    #           Traceback(most recent call last): File "<pyshell#31>", line 1, in < module > a()
    #           TypeError: 'A'
    #           object is not callable
    #
    #      >>> class B:  # 定义类B
    #       def __call__(self):
    #           print('instances are callable now.')
    #      >>> callable(B)  # 类B是可调用对象
    #           True
    #      >>> b = B()  # 调用类B
    #      >>> callable(b)  # 实例b是可调用对象
    #           True
    #       >>> b()  # 调用实例b成功
    #           instances are callable now.
    '''
    
    print(chr(65))  # A 打印数字对应的ascii
    print(ord('A'))  # 65 打印字符对应的ascii码
    print(dict(a=1, b=2))  # {'a': 1, 'b': 2} 转换字典
    print(dir(1))  # 打印传入对象的可调用方法 ,一般只看不带__的方法,或属性
    
    # print(eval('[]'))  # 执行python代码,只能执行简单的运算
    # code = '1+1'
    # print(eval(code))
    # print(exec('def a():pass'))  # 执行python代码
    
    code = '''
    def a():
        print('aa')
    a()'''
    print(exec(code))  # 结果中有None是因为exec(code)没有返回值,所以输出None
    # 结果是
    # aa
    # None
    '''
    # zip() # 把可迭代对象(如list)结合在一起,以短的list为准
    ids = [1, 2, 3, 4]
    names = ['小黑', '小白', '小黄']
    # for idd, name in ids, names: # 这种写法会报错
    for idd, name in zip(ids, names):
        print(idd, name)
    结果:
    1 小黑
    2 小白
    3 小黄
    
    print(map(lambda x: x > 5, [1, 2, 3, 4, 5, 6]))
    # map:循环调用函数,处理结果保存在map对象中,可以用list(map对象)查看返回结果
    # 使用map高级些
    # 同样的功能,代码越少越牛逼
    def func(a):
        if a % 2 == 0:
            return a
            # return True
        else:
            return False
            # return True [0, True, 2, True, 4, True, 6, True, 8, True, 10]
    nums = [x for x in range(11)]
    res = map(func, nums)  # 参数只有这两个
    print(list(res))
    # 等价于
    all_res = []
    for num in nums:
        res = func(num)
        all_res.append(res)
    
    print(filter(lambda x: x > 5, [12, 3, 12, 2, 1, 2, 35]))  # 把后面的迭代对象根据前面的方法筛选
    # filter:循环调用函数,只保存返回结果为真的
    res = filter(func, nums)
    # print(list(res))  # return a时,[2, 4, 6, 8, 10] 没有0,是因为return 0 ,0也是假,所以未返回
    print(list(res))  # return b时,[0, 2, 4, 6, 8, 10]
    '''
    
    print(frozenset({1, 2, 3, 3}))  # 定义一个不可修改的集合
    print(globals())  # 返回程序内所有的全局变量,返回的是一个字典
    print(locals())  # 返回局部变量
    print(hash('aaa'))  # 把一个字符串哈希成一个数字
    print(hex(111))  # 0x6f 数字转成16进制
    print(max(111, 12))  # 111 取最大值
    print(oct(111))  # 0o157 把数字转换成8进制
    print(round(11.111111, 2))  # 11.11 取几位小数
    print(format(11.11111, '0.2f'))  # 11.11
    print(sorted([2, 31, 34, 6, 1, 23, 4], reverse=True))  # 排序,默认升序,把reverse的值赋为True,降序排列
    
    '''
    # 函数如果有多个return值,那么会把这几个return的值都放到一个元组里面,然后返回
    def hello(a, b, c, d):
        return a, b, c, d
    print(hello('1', '2', '3', '4'))  # ('1', '2', '3', '4')
    
    # 列表推导式
    nums = [0, 1, 2, 3, 4]
    new_nums = [str(x) for x in nums]
    print(new_nums)  # ['0', '1', '2', '3', '4']
    '''
     
    2.  处理json
    # json:一种通用的数据类型
    import json
    d = {
        'car': {'color': 'red', 'price': 100, 'count': 50},
        '挨粪叉': {'color': 'red', 'price': 100, 'count': 50},
        '挨粪叉1': {'color': 'red', 'price':  100, 'count': 50},
        '挨粪叉2': {'color': 'red', 'price': 100, 'count': 50},
        '挨粪叉3': {'color': 'red', 'price': 100, 'count': 50},
        '挨粪叉4': {'color': 'red', 'price': 100, 'count': 50},
    }
    # json.dumps()将list dict转化为json串
    res = json.dumps(d, indent=4, ensure_ascii=False)
    # fi = open('f.txt', 'w', encoding='utf-8')
    # fi.write(res)
    # json文件中必须用"",不能用'',否则会报错
    
    # f1 = open('f.txt', 'w', encoding='utf-8')
    # 自动将json串写入文件中
    # json.dump(d, f1, indent=4, ensure_ascii=False)
    
    f1 = open('f.txt', encoding='utf-8')
    # 自动将从文件读取的json串转化为python对象
    res = json.load(f1)
    print(res, type(res))
    
     3. 模块
      1) 常用模块
    import os
    # .代表当前路径,..代表上一级路径
    # print(os.getcwd())  # 获取当前工作目录#
    # os.chmod("/usr/local", 7)  # 给文件/目录加权限
    # print(os.chdir("../"))  # 更改当前目录
    # print(os.curdir)  # 当前目录
    # print(os.pardir)  # 父目录
    # print(os.makedirs("/usr/hehe/hehe1"))  # 递归创建文件夹,父目录不存在时创建父目录
    # print(os.removedirs("/usr/hehe/hehe1"))  # 递归删除空目录
    # print(os.mkdir("test1"))  # 创建文件夹
    # print(os.rmdir("test1"))  # 删除指定的空文件夹
    # print(os.remove("test"))  # 删除文件
    # print(os.listdir('.'))  # 列出一个目录下的所有文件
    # os.rename("test", "test1")  # 重命名
    # print(os.stat("笔记"))  # 获取文件信息
    # print(os.sep)  # 当前操作系统的路径分隔符
    # print(os.linesep)  # 当前操作系统的换行符
    # print(os.pathsep)  # 当前系统的环境变量中每个路径的分隔符,linux是:,windows是;
    # print(os.environ)  # 当前系统的环境变量
    # print(os.name)  # 当前系统名称
    # print(__file__) # 获取当前文件的绝对路径 D:/PyCharmWorkspace/bcClassExercises/day5/常用模块.py
    # print(os.path.abspath(__file__))  # 获取绝对路径 D:PyCharmWorkspacecClassExercisesday5常用模块.py
    # print(os.path.split("/usr/hehe/hehe.txt"))  # 分割路径和文件名 ('/usr/hehe', 'hehe.txt')
    # print(os.path.split(r'D:haha1.txt'))  # ('D:\haha', '1.txt')
    # print(os.path.dirname("/usr/local"))  # 获取父目录
    # print(os.path.basename("/usr/local"))  # 获取最后一级,如果是文件显示文件名,如果是目录显示目录名
    # print(os.path.exists("/usr/local"))  # 判断目录/文件是否存在
    # print(os.path.isabs("."))  # 判断是否是绝对路径
    # print(os.path.isfile("/usr/local"))  # 判断是否是一个文件
    # print(os.path.isdir("/usr/local"))  # 是否是一个路径
    # print(os.path.join(r"
    oot", 'hehe', 'a.sql'))  # 拼接为一个路径(自动加上),拼的个数没有限制
    # os.system('notepad')  # 执行系统命令
    
    # print(os.path.getatime("len_os.py"))  # 输出最近访问时间
    # print(os.path.getmtime("len_os.py"))  # 输出最近访问时间
    
    # os.popen('cmd') 返回的是文件的对象(默认模式r,还可以是w),对其进行读取read()就可以看到输出内容了
    # res = os.popen('ipconfig').read()  # 执行系统命令,并获取返回结果
    # print(res)
    # import sys
    # print(sys.platform)  # 查看当前系统是什么 windows的话都是打印win32
    # print(sys.version)  # 查看python的版本
    # # 获取运行Python文件时,传入的参数
    # print(sys.argv)           # 命令行参数List,第一个元素是程序本身路径
    
    # sys.exit(n)        # 退出程序,正常退出时exit(0)
    # quit("程序退出")
    # sys.version        # 获取Python解释程序的版本信息
    # sys.maxint         # 最大的Int值
    # sys.path           # 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
    # sys.platform       # 返回操作系统平台名称
    # sys.stdout.write('please:')  # 向屏幕输出一句话
    # val = sys.stdin.readline()[:-1]  # 获取输入的值
      2) 时间模块
    import time
    # time.sleep(1)  # 等待几秒
    # 1. 格式化好的时间 2018-1-14 16:42
    # 2. 时间戳,是从unix元年到现在的所有秒数
    # print(int(time.time()))  # 当前时间戳
    # cur_time = time.strftime('%Y:%m:%d %H:%M:%S')  # 获取当前时间的格式化时间字符串
    # print(cur_time)
    #
    #
    # print(time.gmtime())  # # 默认获取标准时区的时间元组,如果传入了一个时间戳,那么把这个时间戳转化为时间元组
    # print(time.gmtime(1516005840))  # 取的标准时区
    # print(time.timezone)  # 和标准时间相差了几个小时
    # print(time.localtime())  # 默认获取当前时区的时间元组,如果传入一个时间戳,那么把这个时间戳转化为时间元组
    #
    res = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(1515686400))
    print(res)
    
    # 把格式化好的时间转化为时间戳
    t = time.strptime('20180112', '%Y%m%d')  # 将参数string按第二个参数format解析为时间元组
    print(time.mktime(t))  # 将时间元组转化为时间戳
    
    # 一天的秒数:86400s
    # 32342 + 86400*3  or 32342 - 86400*3
    # 通过时间戳的加减可以获取几天前几天后的时间
      3) 随机数模块
    import random
    import string
    '''
    print(type(string.digits))  # 所有的数字0-9 字符串类型
    print(string.ascii_lowercase)  # 所有的小写字母
    print(string.ascii_uppercase)  # 所有的大写字母
    print(string.ascii_letters)  # 所有的大写字母和小写字母
    print(string.punctuation)  # 所有的特殊字符
    
    print(random.randint(1, 999))  # 1-999随机取一个整数
    print(random.choice(['1', '2', '3', '4']))  # 随机取一个元素,参数是可迭代对象
    res = random.sample(string.digits, 3)
    print(res)
    print(''.join(res))
    '''
    # 回头查查资料,数字的格式化输出
    # random.uniform(1, 9)
    res = format(random.uniform(1, 9), '.2f')  # 取随机小数
    # res = random.uniform(1, 9)  # 取随机小数
    print(res)
    '''
    # 5.03203 保留几位小数,四舍五入,如果四舍五入后最后一位小数为0,不显示
    # 1.9027236450716112
    # 1.9
    print(round(res, 2))
    print(random.random())  # 取0-1之间的随机小数
    
    s = ['a', 'b', 'c', 'd']
    random.shuffle(s)  # 洗牌,打乱顺序,参数必须为list
    print(s)
    '''
      4) 加密模块
    import hashlib
    # md5
    pwd = 'b'
    m = hashlib.md5()  # 新建一个md5对象
    # print(dir(m))  # 打印对象所有的属性和方法
    pwd.encode()  # 将字符串转成bytes类型
    m.update(pwd.encode())  # update()  加密,不能传字符串,只能传二进制bytes类型
    print(m.hexdigest())  # 加密后的结果
    
    
    def md5_passwd(st:str):  # 限定入参类型,只能是string类型
        bytess = st.encode()
        m = hashlib.md5(bytess)
        return m.hexdigest()
    res = md5_passwd('1')
    print(res)
    
    # md5加密是不可逆的,不能被解密的。
    # MD5  md5AF
    # 123456  f0dfb4c968
    # 撞库
    
    # 另外一种加密方式
    sha_256 = hashlib.sha3_256()
    
    import base64
    # base64
    s = 'hahaha'
    bytes_s = s.encode()
    res = base64.b64encode(bytes_s)
    print(res)
    print(res.decode())  # 把bytes类型转成字符串
    
    jie_mi_res = base64.b64decode(res)
    print(jie_mi_res.decode())
    

      

  • 相关阅读:
    freemarker 获取当前日期
    获取Map的key和value的两种方法
    maven install中依赖关系打包failed
    cxf动态调用外部web service 报告异常java.lang.NoSuchFieldErr
    Java的Annotation标签
    webservice cxf
    serversocket和socket
    Problem 1 珠江夜游 (cruise .cpp)———2019.10.6
    Problem 2 旅行计划 (travelling .cpp)———2019.10.6
    Problem 3 基站建设 (station.cpp)———2019.10.6
  • 原文地址:https://www.cnblogs.com/qiezizi/p/8295759.html
Copyright © 2020-2023  润新知