1.编程语言的区别

1.1c语言

高级语言,需要先将代码转换为字节码,一次性编译

1.2go语言

编译型语言

1.3Java语言

本质上仍是编译型语言

2.代码的打包

安装pyinstaller,在终端执行如下命令行

  1. pip install pyinstaller

打包时格式如下

  1. cd 项目目录
  2. pyinstaller F 项目文件
  1. F:\python练习>pyinstaller -F 扑克牌.py

打包完成后在dist文件夹下

3.虚拟环境

3.1 创建虚拟环境

安装virtualenv

  1. pip3.9 install virtualenv

创建虚拟环境终端如下

  1. cd 项目目录
  2. # virtualenv vcrm --创建的python虚拟环境版本
  3. virtualenv vcrm --python=python3.9

3.2 激活虚拟环境

win激活虚拟环境终端命令

  1. cd 虚拟环境目录
  2. activate

mac激活虚拟环境终端命令

  1. source 虚拟环境目录/activate

3.3 用pycharm创建虚拟环境

在pycharm中文件项目下创建新项目,在里面设置虚拟环境,使用时会默认激活虚拟环境

使用别人的项目时,先打开项目,在文件—设置—项目中添加虚拟环境

3.4 依赖包

将当前环境所有的依赖包写入到指定文件中,命令如下:

  1. # pip freeze > 这里写指定文件名称
  2. pip freeze > requirements.txt

将指定文件下记录的所有依赖包信息在环境中进行安装,命令如下:

  1. pip install -r 这里写指定文件名称
  2. pip install -r requirements.txt

3.5 项目部署

在linux系统做项目时,一定要先创建虚拟环境才能跑项目
注意事项:
1.先要确定python版本
2.确定依赖包目录
自己写项目也要创建一个(readme.md)文件夹,在里面讲清楚python版本,代码介绍,依旧依赖包目录

4.python源码

python为了提升代码效率,将[-5~257]之间的数做成了一个数据池,让两个变量指向同一值时,将使用同一块内存地址,如果值超出了范围,则两个变量会开辟两块内存地址。

5.实战案例

签名算法:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_3
第一步,设所有发送或者接收到的数据为集合M,将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA。
特别注意以下重要规则:
◆ 参数名ASCII码从小到大排序(字典序);
◆ 如果参数的值为空不参与签名;
◆ 参数名区分大小写;
◆ 验证调用返回或微信主动通知签名时,传送的sign参数不参与签名,将生成的签名与该sign值作校验。
◆ 微信接口可能增加字段,验证签名时必须支持增加的扩展字段
第二步,在stringA最后拼接上key得到stringSignTemp字符串,并对stringSignTemp进行MD5运算,再将得到的字符串所有字符转换为大写,得到sign值signValue。

假设传送的参数如下:
{
appid: wxd930ea5d5a258f4f
mch_id: 10000100
device_info: 1000
body: test
nonce_str: ibuaiVcKdpRxkhJA
}
第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序如下:
stringA=”appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA”;
第二步:拼接API密钥:
MD5签名方式:
stringSignTemp = stringA+”&key=192006250b4c09247ec02edce69f6a2d” //注:key为商户平台设置的密钥key
sign=MD5(stringSignTemp).toUpperCase()=”9A0A8659F005D6984697E2CA0A9CF3B7” //注:MD5签名方式
最终得到最终发送的数据:

wxd930ea5d5a258f4f
10000100
1000
test
ibuaiVcKdpRxkhJA
9A0A8659F005D6984697E2CA0A9CF3B7

  1. M={
  2. appid wxd930ea5d5a258f4f
  3. mch_id 10000100
  4. device_info 1000
  5. body test
  6. nonce_str ibuaiVcKdpRxkhJA
  7. }
  8. key="192006250b4c09247ec02edce69f6a2d"
  9. stringA=None
  10. #1
  11. a = info.keys()
  12. a = sorted(a)
  13. for b in a:
  14. stringA += b
  15. stringA += "="
  16. stringA += info[b]
  17. stringA += "&"
  18. stringA.rstrip("&")
  19. stringSignTemp = stringA + key
  20. #2
  21. import hashlib
  22. def md5(origin) :
  23. m = hashlib.md5 ()
  24. m.update ( origin.encode ( "uft-8" ))
  25. return m.hashlib ()
  26. # ji
  27. date = sorted ( info.items () , key = lambda x : x [ 0 ] )
  28. temp_list = [ ]
  29. for item in date :
  30. ele = "{}={}".format ( *item )
  31. temp_list.append ( ele )
  32. """
  33. 简化
  34. temp_list=[]
  35. stringA = "&".join(["{}={}".format(*item) for item in sorted(info.items(),key=lambda x :x[0])])
  36. """
  37. string = "&".join ( temp_list )
  38. string_sign_temp = string + "&key={}".format ( key )
  39. sign = md5 ( string_sign_temp ).upper
  40. print ( sign )
  41. info [ "sign" ] = sign
  42. resuli_list = []
  43. for k,v in info.items():
  44. "<{0}>{1}</{0}>".format(k,v)
  45. resuli_list.append(ele)
  46. v1="<xml>{}</xml>".format("".join(resuli_list))