1.编程语言的区别
1.1c语言
1.2go语言
1.3Java语言
2.代码的打包
安装pyinstaller,在终端执行如下命令行
pip install pyinstaller
打包时格式如下
cd 项目目录
pyinstaller —F 项目文件
F:\python练习>pyinstaller -F 扑克牌.py
3.虚拟环境
3.1 创建虚拟环境
安装virtualenv
pip3.9 install virtualenv
创建虚拟环境终端如下
cd 项目目录
# virtualenv vcrm --创建的python虚拟环境版本
virtualenv vcrm --python=python3.9
3.2 激活虚拟环境
win激活虚拟环境终端命令
cd 虚拟环境目录
activate
mac激活虚拟环境终端命令
source 虚拟环境目录/activate
3.3 用pycharm创建虚拟环境
在pycharm中文件项目下创建新项目,在里面设置虚拟环境,使用时会默认激活虚拟环境
使用别人的项目时,先打开项目,在文件—设置—项目中添加虚拟环境
3.4 依赖包
将当前环境所有的依赖包写入到指定文件中,命令如下:
# pip freeze > 这里写指定文件名称
pip freeze > requirements.txt
将指定文件下记录的所有依赖包信息在环境中进行安装,命令如下:
pip install -r 这里写指定文件名称
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签名方式
最终得到最终发送的数据:
test
M={
appid: wxd930ea5d5a258f4f
mch_id: 10000100
device_info: 1000
body: test
nonce_str: ibuaiVcKdpRxkhJA
}
key="192006250b4c09247ec02edce69f6a2d"
stringA=None
#1
a = info.keys()
a = sorted(a)
for b in a:
stringA += b
stringA += "="
stringA += info[b]
stringA += "&"
stringA.rstrip("&")
stringSignTemp = stringA + key
#2
import hashlib
def md5(origin) :
m = hashlib.md5 ()
m.update ( origin.encode ( "uft-8" ))
return m.hashlib ()
# ji
date = sorted ( info.items () , key = lambda x : x [ 0 ] )
temp_list = [ ]
for item in date :
ele = "{}={}".format ( *item )
temp_list.append ( ele )
"""
简化
temp_list=[]
stringA = "&".join(["{}={}".format(*item) for item in sorted(info.items(),key=lambda x :x[0])])
"""
string = "&".join ( temp_list )
string_sign_temp = string + "&key={}".format ( key )
sign = md5 ( string_sign_temp ).upper
print ( sign )
info [ "sign" ] = sign
resuli_list = []
for k,v in info.items():
"<{0}>{1}</{0}>".format(k,v)
resuli_list.append(ele)
v1="<xml>{}</xml>".format("".join(resuli_list))