python编码小记
Python编码小记
标签(空格分隔): 编程 python
1.list类型remove()操作
列表对象执行remove()函数后,会自动退出循环,所以如果想利用一个单独的for循环删除列表中多个成员,是办不到的,可尝试使用多重循环。
例如下面的代码:
for item in test_list:
if item == 0:
test_list.remove(item)
如果test_list中为0的项多于两个,那么此循环在删除第一个0后便会退出循环,无法利用一个循环删除其中所有为零的项!字典也是如此。细想想,应该是remove后test_list发生了变化,无法继续迭代。
2.对元素为对象的list(或dict)进行deepcopy
如果一个列表或字典中,有元素为类对象(列表或字典中保存的应是对象的引用),那么用copy模块中deepcopy()进行拷贝后,相应引用地址会发生变化,相当于是类利用相同参数初始化的不同实例。
class Driver(object):
def __init__(self, name):
self.name = name
......
......
driver_list = []
driver1 = Driver('str1')
driver2 = Driver('str2')
driver_list.append(driver1)
driver_list.append(driver2)
copy_list = deepcopy(driver_list)
for item in driver_list:
if item.name == 'str1':
copy_list.remove(item)
......
在执行到最后的for循环中remove语句时,会提示列表中找不到对象。原因就是在deepcopy时对Driver类对象也进行了复制,复制产生的copy_list中项与原来driver_list中项,分配内存地址定然不同,而相应列表中存放的都是他们的引用(也就是地址),在copy_list中找不到相应元素也就顺理成章了。
3.可变对象与不可变对象
先看如下几行代码:
str1 = ' This is my test! '
list1 = ['this', 'is', 'my', 'test', ' ']
str1.strip()
for item in str1.split(' '):
.......
list2 = list1.remove(' ')[:2]
这段代码在执行时,line.3中str1执行了strip()后的值并未保存,str1值不变, for循环中 item还是会取到两个空值。line.6执行会报错TypeError,因remove()后无返回值,相当于对NoneType型对象切分。
究其原因就是因为可变对象与不可变对象的区分。字符串、元组、数字等均是不可变对象,字符串strip()后会产生一个新字符串,原变量str1的值不会改变,必须保存下新字符串才能使用;而列表、字典等可变对象,执行remove()等函数(不会有返回值)改变其值后,原变量值就已经改变,可直接使用原变量。
正确代码:
str2 = str1.strip()
for item in str2.split(' '):
.......
list1.remove(' ')
list2 = list1[:2]
python编码小记的更多相关文章
- 关于Python编码问题小记
Python编码问题小记: 引子: 最近在复习redis,当我在获取redis的key的时候,redis 存储英文和汉字下面这个样子的,我知道汉字是用16进制的UTF-8编码了,然后突然很想搞清楚字符 ...
- (转载) 浅谈python编码处理
最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ...
- Python 编码简单说
先说说什么是编码. 编码(encoding)就是把一个字符映射到计算机底层使用的二进制码.编码方案(encoding scheme)规定了字符串是如何编码的. python编码,其实就是对python ...
- Python之路3【知识点】白话Python编码和文件操作
Python文件头部模板 先说个小知识点:如何在创建文件的时候自动添加文件的头部信息! 通过:file--settings 每次都通过file--setings打开设置页面太麻烦了!可以通过:View ...
- python编码规范
python编码规范 文件及目录规范 文件保存为 utf-8 格式. 程序首行必须为编码声明:# -*- coding:utf-8 -*- 文件名全部小写. 代码风格 空格 设置用空格符替换TAB符. ...
- 【转】python编码的问题
摘要: 为了在源代码中支持非ASCII字符,必须在源文件的第一行或者第二行显示地指定编码格式: # coding=utf-8 或者是: #!/usr/bin/python # -*- coding: ...
- 【转】python编码规范
http://blog.csdn.net/willhuo/article/details/49300441 决定开始Python之路了,利用业余时间,争取更深入学习Python.编程语言不是艺术,而是 ...
- python 编码 UnicodeDecodeError
将一个py脚本从Centos转到win运行,出错如下: UnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: il ...
- Python编码/文件读取/多线程
Python编码/文件读取/多线程 个人笔记~~记录才有成长 编码/文件读取/多线程 编码 常用的一般是gbk.utf-8,而在python中字符串一般是用Unicode来操作,这样才能按照单个字 ...
随机推荐
- Spark SQL 操作Hive 数据
Spark 2.0以前版本:val sparkConf = new SparkConf().setAppName("soyo") val spark = new SparkC ...
- codevs1154能量项链(环形dp,区间dp)
1154 能量项链 2006年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在Mars星球上 ...
- [Swift通天遁地]二、表格表单-(12)设置表单文字对齐方式以及自适应高度的文本区域TextArea
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- jmeter 3.x plugins 的使用
JMeter Plugins 一直以来,JMeter Plugins为我们提供了很多高价值的JMeter插件,比如: 用于服务器性能监视的PerfMon Metrics Collector 用于建立压 ...
- jmeter中beanshell断言的使用
简单使用beanshell的内容,进行测试内容的判断 这里通过断言内容,修改if的条件,达到发送警报邮件的功能 beanshell 代码如下: SampleResult 等效于 prev lo ...
- drawable的文件名大写
drawable的文件名大写导致的R文件消失!!!1
- yield from (python生成器)
#生成器中的yield from是干什么用的(一般多用于线程,协程那)def func(): # for i in 'AB': # yield i yield from 'AB' # 就相当于上面的f ...
- 【LeetCode】467. Unique Substrings in Wraparound String
Consider the string s to be the infinite wraparound string of "abcdefghijklmnopqrstuvwxyz" ...
- HTML中的行级标签和块级标签 《转换》
1.html中的块级标签 显示为“块”状,浏览器会在其前后显示折行.常用的块级元素包括: <p>, <ul>,<table>,<h1~h6>等. 2.h ...
- 跨平台键鼠共享软件synergy使用
如果共享的机子都是win系统的话,也可以使用 无界鼠标. 这里主要讲跨平台通用的synergy.下载地址:http://synergy-project.org/ 注意1:最好下载同一位数,同一版本的. ...