python tips(2)
admin
2023-07-31 01:44:04
0

join函数的使用

一般的字符串组合操作都建议使用join, 字符串操作经常使用的就join, split, replace, 另外还有partition
join里面可以写成一个列表解析的形式

m = map(str, range(9))
\',\'.join(x for x in m if x != \'3\')

# 而不是
\',\'.join([x for x in m if x != \'3\'])

从列表中删除多个相同的元素

list.remove是不行的, 只能删除从左到右找到的第一个元素, 后面的不会删除
自认为两种比较好的方式如下

m = [\'a\', \'b\', \'c\', \'a\']
m = filter(lambda x: x !=\'a\', m)

或者

m[:] = (x for x in m if x != \'a\')

随机生成n位字符串

import random
import string

rand_str = \"\".join([random.choice(string.letters+string.digits) for _ in xrange(n)])

引用类型的问题

函数参数

函数默认参数,只在定义时参数求值了一次,函数的多个调用将使用同一个可变参数

def test(data, x=[]):
    x.append(data)
    return x
print test(3)
# [3]
print test(4)
# [3, 4]

dict.fromkeys设置默认值的问题

和函数参数问题一样,多个键值对应的value将调用同一个列表。设置为{}自然也是一样的结果

>>> a = dict.fromkeys(\'bc\', [])
>>> a[\'b\'].append(6)
>>> a
{\'b\': [6], \'c\': [6]}

多个变量声明

一般会有声明多个空list和空dict的需求
将导致多个变量共享同一个[]{}的错误的做法

a = b = []
c = d = {}

正确的方式

a, b = [], []
# for a lot of var
c, d, e, f = [{} for _ in xrange(4)]

其它int, str, bool等没有此问题,可直接写成

a = b = True

del的时候一次可以删除多个

>>> a = range(3)
>>> del a[2], a[0]
>>> a
[1]

切片操作

可以用-1来反转列表

>>> a = range(7)
>>> a[::-1]
[6, 5, 4, 3, 2, 1, 0]
>>> a[::2]
[0, 2, 4, 6]

用切片删除某一段序列,等同于del a[1:4]

>>> a = [1, 2, 3, 4, 5, 6, 7]
>>> a[1:4] = []
>>> a
[1, 5, 6, 7]

去除偶数索引

>>> a = [0, 1, 2, 3, 4, 5, 6, 7]
>>> del a[::2]
>>> a
[1, 3, 5, 7]

关于省略号

主要用于多维矩阵中,减少定位操作时的复杂度,用得不多,更仔细的说明见这里

>>> class C(object):
...  def __getitem__(self, item):
...   return item
...
>>> C()[1:2, ..., 3]
(slice(1, 2, None), Ellipsis, 3)

文件操作

一次读取整个文件

使用二进制模式,如rb模式, 使用r则只能读取到一部分

with open(path, \'rb\') as f:
    return f.read()

按行读取

将文件对象看错iterator

with open(path, \'r\') as f:
    for line in f:
        print line

相关内容

热门资讯

Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
项目管理和工程管理的区别 项目管理 项目管理,顾名思义就是专注于开发和完成项目的管理,以实现目标并满足成功标准和项目要求。 工...