- == is to compare value, is is compare address
- == is to compare by calling object.__eq__()
- list1 = list2, address is assigned, not value. need list1=list2[:]
>>> id(a)
4463753048 <<<< address is 048
>>> a[0] = 11
>>> id(a)
4463753048
>>> a
[11, 2, 3]
>>> a.append(44)
>>> a
[11, 2, 3, 44]
>>> id(a) <<<< can change item and append, address is same
4463753048
>>> b = a
>>> id(b) <<<< list= is point to same address
4463753048
>>> b[0] = 111
>>> a
[111, 2, 3, 44] <<<< change b = change a
>>> c = a[:]
>>> id(c)
4463919328
>>> c[0] = 1234
>>> a
[111, 2, 3, 44]
>>> b
[111, 2, 3, 44]
>>> c
[1234, 2, 3, 44]
>>>
2. keyword argument
>>> def ff(*args, **kwargs):
... print args
... print kwargs
...
>>> ff(1, '22', k1=333, k2='4444')
(1, '22')
{'k2': '4444', 'k1': 333}
>>> d = {'ka':'aaa', 'kb':123}
>>> ff(**d)
()
{'kb': 123, 'ka': 'aaa'}
3. Regexp \符号
https://docs.python.org/3/howto/regex.html
Remove全部的None-Alphanumeric char from string. 应该是
s = re.sub('\W', '', s)
还有记住以下的
\d, \D = [0-9]
\s, \S = [ \t\n\r\v\f]
\w, \W = alphanumeric,[0-9a-bA-Z_]
4. arstCli Script模版
from arstCliLib import *
import sys
dut = sys.argv[1]
openSshOnDut( dut )
setAccessMethod(dut, 'ssh')
cmd = ['show ip int brief | grep " 10\." | grep Vlan']
output = sendCmd(dut, cmd, prompt='enable', raw=True)
print '\n'.join(output)
[solomonyang@syscon] ~ $ python testCli.py
Traceback (most recent call last):
File "testCli.py", line 4, in <module>
from arstCliLib import *
ImportError: No module named arstCliLib
PATH=$PATH:$HOME/bin:$HOME/py
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/git/systest-infra/lib/
PYTHONPATH=$PYTHONPATH:$HOME/git/systest-infra/lib/
export PATH
export LD_LIBRARY_PATH
export PYTHONPATH
5. List vs Tuple, based on stackoverflow post
1. Literal/语法
>>> t = (1,2); l = [1,2]; t[1]; l[0]2
1
2. Size/内存量,区别大概list +12%
>>> t = tuple(range(100000)); l = list(range(100000)); t.__sizeof__(); l.__sizeof__()800024
900088
3. Mutable vs Inmutable/可变 vs 不可变
>>> t = (1,2); l = [1,2]
>>> l[0] = 11; print l
[11, 2]
>>> t[0] = 11; print t
TypeError: 'tuple' object does not support item assignment
4. 都可以增加,但是不同,tuple += (3)是返回一个新的obj,而list.add()是改原来的
>>> t = (1,2); l = [1,2]; id(t); id(l); t+=(3,); l+=[3]; id(t); id(l); l.append(3); id(l)
4306859000 <<<<< t
4307014720 <<<<< 1, 都一个地址
4306913952 <<<<< t +=(3,),新地址
4307014720
4307014720
5. 因为不可变,所以tuple (1,2)可以是Dict[key]
>>> d = {}; d[t] = '1,2'
>>> d = {}; d[l] = '1,2'
TypeError: unhashable type: 'list'
6. 用途
比方说,(10,11)是个bookmark,第10页的第11行,一般没有必要改;而list of bookmark = [ (1,10), (10,11), (22, 1)]
7. Tuple != constant list
http://news.e-scribe.com/397
但是这么了解哪,好像也撮合:-) 好像更多的是字面的了解,tuple = lightweight record,比方说:DB API's fetchmany() 返回的是List of tuple. 每个tuple是一个record,不能改其中一项,改了就没有意义了。
List vs Set
1. Literal/语法/内存量
>>> s = set(range(100000)); s.__sizeof__(); l = list(range(100000)); l.__sizeof__()
4194504
900088
2. Set没有Index, 没有重复,可以数学操作 &, -, ^
>>> s1=set(range(1,20,2)); s2=set(range(10,30)); print 's1->', s1; print 's2->', s2; print '-:', s1 - s2; print '&:', s1&s2; s1^s2
s1-> set([1, 3, 5, 7, 9, 11, 13, 15, 17, 19])
s2-> set([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
-: set([1, 3, 9, 5, 7])
&: set([19, 17, 11, 13, 15])
set([1, 3, 5, 7, 9, 10, 12, 14, 16, 18, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
No comments:
Post a Comment