• 24-25天


    24天讲了内置函数:

    1、__call__   ,如

    class  A:

      def __call__(self):

        print('a')

    则 A()()  打印出a

    2、__str__ 与 __repr__   如:

    class B:

       def  __str__(self):

          return 'b'

      def  __repr__(self):

          return 'c'

    则有  b = B()

      print('b')结果为b

      引掉__str__方法后结果为c

      按照老师的说法叫做repr是str的备胎

    3、__format__

    这个是用作输出,让你输出的东西按照一定的格式来。现阶段感觉暂且不考虑

    老师的例子:

    format_dict={
    'nat':'{obj.name}-{obj.addr}-{obj.type}',#学校名-学校地址-学校类型
    'tna':'{obj.type}:{obj.name}:{obj.addr}',#学校类型:学校名:学校地址
    'tan':'{obj.type}/{obj.addr}/{obj.name}',#学校类型/学校地址/学校名
    }
    class School:
    def __init__(self,name,addr,type):
    self.name=name
    self.addr=addr
    self.type=type

    def __format__(self, format_spec): #format_spec = 'nat'
    if not format_spec or format_spec not in format_dict:
    format_spec='nat'
    fmt=format_dict[format_spec] #'{obj.name}-{obj.addr}-{obj.type}'
    return fmt.format(obj=self) #'{obj.name}-{obj.addr}-{obj.type}'.format(obj=self)

    s1=School('oldboy1','北京','私立')
    print(format(s1,'nat')) #s1.__format__('nat')
    print(format(s1,'tna'))
    print(format(s1,'tan'))
    print(format(s1,'asfdasdffd'))

    4、__eq__  作等价

    这个内置函数的左右跟双等于号差不多,相当于可以自定义一种算法来判定二者的相等性

    例子就是老师曾经说过的一个题目:

    想一个办法将100个人的信息去重(名字性别身份证不会变,但年龄会变),

    其用到的办法就是用到__eq__,用到__hash__

    用hash计算名字+性别(都是字符串),然后修改eq的等价方案实现目的。

    等会找下源码

    5、__new__

    实例化一个对象的时候,先用到的就是new方法,用来开辟一块内存空间存储将要创建的对象

    最常用到的地方就是老师上课举得那个单例模式

    因为自始至终就开辟了一块内存空间,所以无论实例化多少个对象,其结果只会不断的覆盖

    以上就是24天讲到的所有内容,其实还有一个__delattr__,看名字就知道这个是用作删除的,

    可以用来作自定义删除,感觉没什么用

    25天讲了三个模块(json,pickle,shelve):

    json  pickle用法一样,都是拥有4个方法:dump,dumps,load,loads

    也同样都是dump,load是对文件操作

         dumps,loads是对字节操作(等于说现阶段就用不带s的)

    json无法对多行的数据进行读,局限性很大,但什么语言都能用这东西。

    pickle只能在python中用,而且必须要有这个类,局限性也算是比较大了,但起码现在来说挺好使。

    周末做作业的时候发现了pickle的一个特性,就是不能直接用里面的数据进行比对,

    必须先将其取出放置列表(当然放别处也ok),否则无效。

    取值的时候要模仿for,但却不能用

    while True:

      try:

        a.append(pickle.load(文件句柄))

      except EOFerror:

        break

    还有一个shelve,这个可以放字典(元组当key也是ok的),但有个bug

    # import shelve
    # f = shelve.open('shelve_file', flag='r')
    # # f['key']['int'] = 50    # 不能修改已有结构中的值
    # # f['key']['new'] = 'new' # 不能在已有的结构中添加新的项
    # f['key'] = 'new'         # 但是可以覆盖原来的结构
    # f.close()

    不过听说在python2里面很好用

    最后又说了hashlib这个模块,这个模块是用来加密的,具体例子:

    def lock(p):
    m = hashlib.md5()
    m.update(p.encode('utf-8'))
    return m.hexdigest

    注意这里返回的是一个函数地址,要想看结果后面要加括号

    算法最常见的就是md5,但很容易被暴力破解,所以有了加盐的方法。

    def lock1(p):
    m = hashlib.md5('wahah'.encode('utf-8'))
    m.update(p.encode('utf-8'))
    return m.hexdigest

    也可以动态加盐,就是用用户输入的用户名作为盐。

  • 相关阅读:
    MODBUS 数据格式相关记录
    STM32Cube基础工程配置
    QT5学习记录(一)
    求最大值
    算法训练方格取数
    传纸条
    分组背包
    混合背包
    二维背包
    多重背包
  • 原文地址:https://www.cnblogs.com/ylx900/p/8920425.html
Copyright © 2020-2023  润新知