Python开发小技巧

本文分享了一些Python开发中的实用技巧,包括使用zip同时遍历两个列表,利用itertools.product实现笛卡尔积遍历,如何在Django中直接执行SQL操作,以及在HTTPPOST请求中处理data-urlencode格式的数据。此外,还提到了字节到字符串的转换方法和预初始化列表为0的策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 product

for 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 Exception
    return 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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值