> 文章列表 > Python开发小技巧

Python开发小技巧

Python开发小技巧

Python开发简洁小技巧

同时遍历两个列表

同时遍历两个列表,比如as = ["张三", "李四", "王五"],bs = ["zhangsan", "lisi", "wangwu"],往往对应列表顺序元素有对应关系,使用zip:

for a, b in zip(as, bs):print(a, b)  # 张三 zhangsan ...

笛卡尔积遍历

同时遍历列表构造全部组合,比如as = ["a", "b"],bs = ["1", "2"],我们希望得到的结果是a,1和a,2和b,1和b,2(笛卡尔积),使用product(引入itertools这个SDK):

from itertools import productfor a, b in product(as, bs):print(a, b)  # a 1 ...

字节型变字符串

有些缓存管道或消息队列存入数据会传入传出字节的形式,但后续往往都会用字符串的形式,就需要字节型无损失地变为字符串,decode可以解决这个问题。

bytes = b'012345'
str = bytes.decode('UTF-8')  # byte不能直接转str,可以转int再转str,那么会导致前面的0无了

Django直接使用SQL操作

其实就是原生python用pymysql(python3版本,也兼容python2,也就是python2中的mysql-python)操作mysql,不想用ORM操作queryset或涉及复杂的SQL操作,就可以用。(不过要避免SQL注入问题)

from django.db import connection  # 使用事务的话导入 transaction
cursor = connection.cursor()  # 连接# cursor.execute(SQL语句),类似↓,不过要避免SQL注入问题,可以把int转string再转int这种
cursor.execute("SELECT name from USER where id like '%s'" % id)# fetchone() 获取一条记录
# fetchall() 获取全部记录
result = cursor.fetchone()

列表初始化用0占位

有时python中是需要预先占位,来进行更新操作的,而Python中又没有数组这种明确的数据类型,一般用list代替

# 定义一个预长度10,占位为0的列表
list1 = [0 for i in range(10)]
# 还有运行更快且更简洁的方法 ↓
list2 = [0] * 10

针对post请求带参数--data-urlencode的情况处理

curl --request POST 'http://xxx' --data-urlencode 'data={"xxx1":xxx2}'

headers = {'Content-Type': 'application/x-www-form-urlencoded'}
body = {"xxx1":xxx2}
try:ret = requests.post(url, data=body, headers=headers)if ret.status_code == 200:data = json.loads(ret.text)  else:logger.error(ret.text)  # 将错误内容信息一次带出raise Exceptionreturn data
except Exception as err:logger.error("error:{}".format(err))

但往往我们更多使用的是JSON格式的传输,类似于↓:

params = {"xxx1":xxx2}
headers = {'content-type': 'application/json'}
response = requests.post(url, json=params, headers=headers)