zoukankan      html  css  js  c++  java
  • 第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())
    

      

  • 相关阅读:
    yii2 gii 命令行自动生成控制器和模型
    控制器中的方法命名规范
    Vue Property or method "" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based
    IDEA插件:GsonFormat
    Spring Boot : Access denied for user ''@'localhost' (using password: NO)
    Typora添加主题
    Git基础命令图解
    Java Joda-Time 处理时间工具类(JDK1.7以上)
    Java日期工具类(基于JDK1.7版本)
    Oracle SQL Developer 连接Oracle出现【 状态: 失败 -测试失败: ORA-01017: invalid username/password; logon denied】
  • 原文地址:https://www.cnblogs.com/qiezizi/p/8295759.html
Copyright © 2011-2022 走看看