zoukankan      html  css  js  c++  java
  • Python学习笔记二十二_'__main__',url编码解码

    一、if __name__ == '__main__'

      Pyhton不同于C/C++,程序并不需要执行主程序main()这样的程序入口,而是文件自上而下的编译执行。在很多python程序中都会有下面这样的语句。

    if __name__ == '__main__':
        pass

      这段代码的作用主要是让python文件可以独立运行,也可以当做模块导入到其他文件。

      当a.py文件被直接运行时,__name__就是__main__,if __name__ == '__main__'之下的代码块将被运行;当a.py文件以模块形式被导入时,__name__是导入模块的名字,及a.py,if __name__ == '__main__'之下的代码块不被运行。

    二、ulr编码、解码

    导入标准模块urllib中的parse方法

    from urllib import parse
    url='www.baidu.com?query=学习'
    url_encode = parse.quote_plus(url)#url编码
    baidu_url= 'https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=idx=1&E5%9F%BA%E7%A1'
    url_decode =parse.unquote_plus(baidu_url)#url解码

    三、例子

    需求:用面向对象实现签名生成

    1、请求数据:vendorId=100&ip=127.0.0.1&Version=2.0&mac=D4-81-D7-CA

    2、商家编码:100

    3、计算规则:

      (1) 将商家编码进行2次md5,得到astr
      (2) 再将请求数据进行一次urldecode,urlstr
      (3) astr+urlstr MD5一次获得最终的签名

    实现:encryption.py

    import hashlib
    from urllib import parse
    class Sign(object):
        def __init__(self,req_data):
            self.req_data = req_data#这样写,在其他的函数里面可以直接用self.req_data
        def MD5(self,s):
            md = hashlib.md5()# 实例化
            md.update(s.encode())# 调用实例方法
            return md.hexdigest()
        def get_verid(self):#获取vendorId
            data_d = {}
            data_l = self.req_data.split('&')
            for i in data_l:
                # k = i.split('=')[0]
                # v = i.split('=')[1]
                k,v = i.split('=')#数组只有两个数字,可以这样顺序赋值
                data_d.setdefault(k,v)
            return data_d.get('vendorId')
        def get_sign(self):#获取签名
            astr = self.MD5(self.MD5(self.get_verid()))
            urlstr = parse.unquote_plus(self.req_data)#url解码
            res = self.MD5(astr+urlstr)
            return res
    print(__name__)
    if __name__ == '__main__':#pycharm里敲:main,可以直接打印出这行
        s = 'vendorId=100&ip=127.0.0.1&Version=2.0&mac=D4-81-D7-CA'
        s_sign = Sign(s)
        print(s_sign.get_sign())

    此时,直接运行encryption.py时,将会打印出

    __main__
    1a799d77b36f792b120aa073b1752639

    若将encryption.py以模块形式导入,运行

    import encryption #将encryption从头到尾执行一遍

    得到的结果是

    encryption
  • 相关阅读:
    白话经典算法系列之六 高速排序 高速搞定
    簡單SQL存儲過程實例
    ACE编译运行错误解决
    shell之变量与read
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯魔方状态
    Java实现第八届蓝桥杯购物单
    Java实现第八届蓝桥杯购物单
  • 原文地址:https://www.cnblogs.com/dongrui624/p/9073431.html
Copyright © 2011-2022 走看看