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
  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/dongrui624/p/9073431.html
Copyright © 2011-2022 走看看