python第二天基础1-1
一、作用域
对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用。
- if 1==1:
- name = 'wupeiqi'
- print name
二、三元运算
result
=
值
1
if
条件
else
值
2 如#果条件成立,值1付给result否则值2付给result
如果条件为真:result = 值1
如果条件为假:result = 值2
name = 'sb' if 1==1 else '2b'
- input = raw_input()
- result = '2b' if input =='alex' else 'haoren'
python基础
python里面切皆为对象,对象都是类创建的
例如:li = [11,22,33] ===类
li.append
1 类创建列表
2 类表还能返回这个类
所以说,对象所拥有的方法不是他自己所拥有的,而是从类里面找到的方法而执行的。
可以用type(li)查看对象的类型
1 <type 'list'> 这个list就是创建li的类
2 然后用dir(list) 能看到所有list下的方法---预览
3 help(list) 看详细的python的源码了---都有什么功能
4 help(list.append)---就只看append的方法
5 在pycham上按住ctrl键点在你要看的类上,就可以看了。
类中的方法可分为 1 内置方法(__add__)两头带__,他的执行方式可能有一种,也可能有多种。
2 不是内置方法,只能有一种执行方法,也就是list.append()
一、整数
如: 18、73、84
每一个整数都具备如下功能:
例如:n1 = -9
n1.__abs__()
9
或者直接abs(-9)
- 创建方法:前面两点相同
- i = 10
- i = int(10)
- i = int(“10”,base=2) 创建2进制的字符是10的,
- class int(object):
- """
- int(x=0) -> int or long
- int(x, base=10) -> int or long
- Convert a number or string to an integer, or return 0 if no arguments
- are given. If x is floating point, the conversion truncates towards zero.
- If x is outside the integer range, the function returns a long instead.
- If x is not a number or if base is given, then x must be a string or
- Unicode object representing an integer literal in the given base. The
- literal can be preceded by '+' or '-' and be surrounded by whitespace.
- The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to
- interpret the base from the string as an integer literal.
- >>> int('0b100', base=0)
- 4
- """
- def bit_length(self):
- """ 返回表示该数字的时占用的最少位数 """
- """
- int.bit_length() -> int
- Number of bits necessary to represent self in binary.
- >>> bin(37)
- '0b100101'
- >>> (37).bit_length()
- 6
- """
- return 0
- def conjugate(self, *args, **kwargs): # real signature unknown
- """ 返回该复数的共轭复数 """
- """ Returns self, the complex conjugate of any int. """
- pass
- def __abs__(self):
- """ 返回绝对值 """
- """ x.__abs__() <==> abs(x) """
- pass
- def __add__(self, y):
- """ x.__add__(y) <==> x+y """
- pass
- #age = 18
- #age.__add__(199)==18+199
- def __and__(self, y):
- """ x.__and__(y) <==> x&y """
- pass
- def __cmp__(self, y):
- """ 比较两个数大小 """
- """ x.__cmp__(y) <==> cmp(x,y) """ 大于为1 等于为0 小于为-1
- pass
- def __coerce__(self, y):
- """ 强制生成一个元组 """
- """ x.__coerce__(y) <==> coerce(x, y) """
- pass
def __divmod__(self, y): """ 相除,得到商和余数组成的元组 """网页上分页用 """ x.__divmod__(y) <==> divmod(x, y) """ pass
- def __div__(self, y):
- """ x.__div__(y) <==> x/y """
- pass
- def __float__(self):
- """ 转换为浮点类型 """
- """ x.__float__() <==> float(x) """
- pass
- def __floordiv__(self, y):
- """ x.__floordiv__(y) <==> x//y """ 底板除
- pass
- def __format__(self, *args, **kwargs): # real signature unknown
- pass
- def __getattribute__(self, name):
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getnewargs__(self, *args, **kwargs): # real signature unknown
- """ 内部调用 __new__方法或创建对象时传入参数使用 """
- pass
- def __hash__(self):
- """如果对象object为哈希表类型,返回对象object的哈希值。哈希值为整数。在字典查找中,哈希值用于快速比较字典的键。两个数值如果相等,则哈希值也相等。"""
- """ x.__hash__() <==> hash(x) """
- pass
- def __hex__(self):
- """ 返回当前数的 十六进制 表示 """
- """ x.__hex__() <==> hex(x) """
- pass
- def __index__(self):
- """ 用于切片,数字无意义 """
- """ x[y:z] <==> x[y.__index__():z.__index__()] """
- pass
- def __init__(self, x, base=10): # known special case of int.__init__
- """ 构造方法,执行 x = 123 或 x = int(10) 时,自动调用,暂时忽略 """
- """
- int(x=0) -> int or long
- int(x, base=10) -> int or long
- Convert a number or string to an integer, or return 0 if no arguments
- are given. If x is floating point, the conversion truncates towards zero.
- If x is outside the integer range, the function returns a long instead.
- If x is not a number or if base is given, then x must be a string or
- Unicode object representing an integer literal in the given base. The
- literal can be preceded by '+' or '-' and be surrounded by whitespace.
- The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to
- interpret the base from the string as an integer literal.
- >>> int('0b100', base=0)
- 4
- # (copied from class doc)
- """
- pass
- def __int__(self):
- """ 转换为整数 """
- """ x.__int__() <==> int(x) """
- pass
- def __invert__(self):
- """ x.__invert__() <==> ~x """
- pass
- def __long__(self):
- """ 转换为长整数 """
- """ x.__long__() <==> long(x) """
- pass
- def __lshift__(self, y):
- """ x.__lshift__(y) <==> x<<y """
- pass
- def __mod__(self, y):
- """ x.__mod__(y) <==> x%y """
- pass
- def __mul__(self, y):
- """ x.__mul__(y) <==> x*y """
- pass
- def __neg__(self):
- """ x.__neg__() <==> -x """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more):
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __nonzero__(self):
- """ x.__nonzero__() <==> x != 0 """
- pass
- def __oct__(self):
- """ 返回改值的 八进制 表示 """
- """ x.__oct__() <==> oct(x) """
- pass
- def __or__(self, y):
- """ x.__or__(y) <==> x|y """
- pass
- def __pos__(self):
- """ x.__pos__() <==> +x """
- pass
- def __pow__(self, y, z=None):
- """ 幂,次方 """2**8
- """ x.__pow__(y[, z]) <==> pow(x, y[, z]) """
- pass
- def __radd__(self, y):
- """ x.__radd__(y) <==> y+x """
- pass
- def __rand__(self, y):
- """ x.__rand__(y) <==> y&x """
- pass
- def __rdivmod__(self, y):
- """ x.__rdivmod__(y) <==> divmod(y, x) """
- pass
- def __rdiv__(self, y):
- """ x.__rdiv__(y) <==> y/x """
- pass
- def __repr__(self):
- """转化为解释器可读取的形式 """
- """ x.__repr__() <==> repr(x) """
- pass
- def __str__(self):
- """转换为人阅读的形式,如果没有适于人阅读的解释形式的话,则返回解释器课阅读的形式"""
- """ x.__str__() <==> str(x) """
- pass
- def __rfloordiv__(self, y):
- """ x.__rfloordiv__(y) <==> y//x """
- pass
- def __rlshift__(self, y):
- """ x.__rlshift__(y) <==> y<<x """
- pass
- def __rmod__(self, y):
- """ x.__rmod__(y) <==> y%x """
- pass
- def __rmul__(self, y):
- """ x.__rmul__(y) <==> y*x """
- pass
- def __ror__(self, y):
- """ x.__ror__(y) <==> y|x """
- pass
- def __rpow__(self, x, z=None):
- """ y.__rpow__(x[, z]) <==> pow(x, y[, z]) """
- pass
- def __rrshift__(self, y):
- """ x.__rrshift__(y) <==> y>>x """
- pass
- def __rshift__(self, y):
- """ x.__rshift__(y) <==> x>>y """
- pass
- def __rsub__(self, y):
- """ x.__rsub__(y) <==> y-x """
- pass
- def __rtruediv__(self, y):
- """ x.__rtruediv__(y) <==> y/x """
- pass
- def __rxor__(self, y):
- """ x.__rxor__(y) <==> y^x """
- pass
- def __sub__(self, y):
- """ x.__sub__(y) <==> x-y """
- pass
- def __truediv__(self, y):
- """ x.__truediv__(y) <==> x/y """
- pass
- def __trunc__(self, *args, **kwargs):
- """ 返回数值被截取为整形的值,在整形中无意义 """
- pass
- def __xor__(self, y):
- """ x.__xor__(y) <==> x^y """
- pass
- denominator = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """ 分母 = 1 """
- """the denominator of a rational number in lowest terms"""
- imag = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """ 虚数,无意义 """
- """the imaginary part of a complex number"""
- numerator = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """ 分子 = 数字大小 """
- """the numerator of a rational number in lowest terms"""
- real = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """ 实属,无意义 """
- """the real part of a complex number"""
int
二、长整型
可能如:2147483649、9223372036854775807
每个长整型都具备如下功能:
- class long(object):
- """
- long(x=0) -> long
- long(x, base=10) -> long
- Convert a number or string to a long integer, or return 0L if no arguments
- are given. If x is floating point, the conversion truncates towards zero.
- If x is not a number or if base is given, then x must be a string or
- Unicode object representing an integer literal in the given base. The
- literal can be preceded by '+' or '-' and be surrounded by whitespace.
- The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to
- interpret the base from the string as an integer literal.
- >>> int('0b100', base=0)
- 4L
- """
- def bit_length(self): # real signature unknown; restored from __doc__
- """
- long.bit_length() -> int or long
- Number of bits necessary to represent self in binary.
- >>> bin(37L)
- '0b100101'
- >>> (37L).bit_length()
- 6
- """
- return 0
- def conjugate(self, *args, **kwargs): # real signature unknown
- """ Returns self, the complex conjugate of any long. """
- pass
- def __abs__(self): # real signature unknown; restored from __doc__
- """ x.__abs__() <==> abs(x) """
- pass
- def __add__(self, y): # real signature unknown; restored from __doc__
- """ x.__add__(y) <==> x+y """
- pass
- def __and__(self, y): # real signature unknown; restored from __doc__
- """ x.__and__(y) <==> x&y """
- pass
- def __cmp__(self, y): # real signature unknown; restored from __doc__
- """ x.__cmp__(y) <==> cmp(x,y) """
- pass
- def __coerce__(self, y): # real signature unknown; restored from __doc__
- """ x.__coerce__(y) <==> coerce(x, y) """
- pass
- def __divmod__(self, y): # real signature unknown; restored from __doc__
- """ x.__divmod__(y) <==> divmod(x, y) """
- pass
- def __div__(self, y): # real signature unknown; restored from __doc__
- """ x.__div__(y) <==> x/y """
- pass
- def __float__(self): # real signature unknown; restored from __doc__
- """ x.__float__() <==> float(x) """
- pass
- def __floordiv__(self, y): # real signature unknown; restored from __doc__
- """ x.__floordiv__(y) <==> x//y """
- pass
- def __format__(self, *args, **kwargs): # real signature unknown
- pass
- def __getattribute__(self, name): # real signature unknown; restored from __doc__
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getnewargs__(self, *args, **kwargs): # real signature unknown
- pass
- def __hash__(self): # real signature unknown; restored from __doc__
- """ x.__hash__() <==> hash(x) """
- pass
- def __hex__(self): # real signature unknown; restored from __doc__
- """ x.__hex__() <==> hex(x) """
- pass
- def __index__(self): # real signature unknown; restored from __doc__
- """ x[y:z] <==> x[y.__index__():z.__index__()] """
- pass
- def __init__(self, x=0): # real signature unknown; restored from __doc__
- pass
- def __int__(self): # real signature unknown; restored from __doc__
- """ x.__int__() <==> int(x) """
- pass
- def __invert__(self): # real signature unknown; restored from __doc__
- """ x.__invert__() <==> ~x """
- pass
- def __long__(self): # real signature unknown; restored from __doc__
- """ x.__long__() <==> long(x) """
- pass
- def __lshift__(self, y): # real signature unknown; restored from __doc__
- """ x.__lshift__(y) <==> x<<y """
- pass
- def __mod__(self, y): # real signature unknown; restored from __doc__
- """ x.__mod__(y) <==> x%y """
- pass
- def __mul__(self, y): # real signature unknown; restored from __doc__
- """ x.__mul__(y) <==> x*y """
- pass
- def __neg__(self): # real signature unknown; restored from __doc__
- """ x.__neg__() <==> -x """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more): # real signature unknown; restored from __doc__
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __nonzero__(self): # real signature unknown; restored from __doc__
- """ x.__nonzero__() <==> x != 0 """
- pass
- def __oct__(self): # real signature unknown; restored from __doc__
- """ x.__oct__() <==> oct(x) """
- pass
- def __or__(self, y): # real signature unknown; restored from __doc__
- """ x.__or__(y) <==> x|y """
- pass
- def __pos__(self): # real signature unknown; restored from __doc__
- """ x.__pos__() <==> +x """
- pass
- def __pow__(self, y, z=None): # real signature unknown; restored from __doc__
- """ x.__pow__(y[, z]) <==> pow(x, y[, z]) """
- pass
- def __radd__(self, y): # real signature unknown; restored from __doc__
- """ x.__radd__(y) <==> y+x """
- pass
- def __rand__(self, y): # real signature unknown; restored from __doc__
- """ x.__rand__(y) <==> y&x """
- pass
- def __rdivmod__(self, y): # real signature unknown; restored from __doc__
- """ x.__rdivmod__(y) <==> divmod(y, x) """
- pass
- def __rdiv__(self, y): # real signature unknown; restored from __doc__
- """ x.__rdiv__(y) <==> y/x """
- pass
- def __repr__(self): # real signature unknown; restored from __doc__
- """ x.__repr__() <==> repr(x) """
- pass
- def __rfloordiv__(self, y): # real signature unknown; restored from __doc__
- """ x.__rfloordiv__(y) <==> y//x """
- pass
- def __rlshift__(self, y): # real signature unknown; restored from __doc__
- """ x.__rlshift__(y) <==> y<<x """
- pass
- def __rmod__(self, y): # real signature unknown; restored from __doc__
- """ x.__rmod__(y) <==> y%x """
- pass
- def __rmul__(self, y): # real signature unknown; restored from __doc__
- """ x.__rmul__(y) <==> y*x """
- pass
- def __ror__(self, y): # real signature unknown; restored from __doc__
- """ x.__ror__(y) <==> y|x """
- pass
- def __rpow__(self, x, z=None): # real signature unknown; restored from __doc__
- """ y.__rpow__(x[, z]) <==> pow(x, y[, z]) """
- pass
- def __rrshift__(self, y): # real signature unknown; restored from __doc__
- """ x.__rrshift__(y) <==> y>>x """
- pass
- def __rshift__(self, y): # real signature unknown; restored from __doc__
- """ x.__rshift__(y) <==> x>>y """
- pass
- def __rsub__(self, y): # real signature unknown; restored from __doc__
- """ x.__rsub__(y) <==> y-x """
- pass
- def __rtruediv__(self, y): # real signature unknown; restored from __doc__
- """ x.__rtruediv__(y) <==> y/x """
- pass
- def __rxor__(self, y): # real signature unknown; restored from __doc__
- """ x.__rxor__(y) <==> y^x """
- pass
- def __sizeof__(self, *args, **kwargs): # real signature unknown
- """ Returns size in memory, in bytes """
- pass
- def __str__(self): # real signature unknown; restored from __doc__
- """ x.__str__() <==> str(x) """
- pass
- def __sub__(self, y): # real signature unknown; restored from __doc__
- """ x.__sub__(y) <==> x-y """
- pass
- def __truediv__(self, y): # real signature unknown; restored from __doc__
- """ x.__truediv__(y) <==> x/y """
- pass
- def __trunc__(self, *args, **kwargs): # real signature unknown
- """ Truncating an Integral returns itself. """
- pass
- def __xor__(self, y): # real signature unknown; restored from __doc__
- """ x.__xor__(y) <==> x^y """
- pass
- denominator = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """the denominator of a rational number in lowest terms"""
- imag = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """the imaginary part of a complex number"""
- numerator = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """the numerator of a rational number in lowest terms"""
- real = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """the real part of a complex number"""
- 复制代码
long
三、浮点型
如:3.14、2.88
每个浮点型都具备如下功能:
- class float(object):
- """
- float(x) -> floating point number
- Convert a string or number to a floating point number, if possible.
- """
- def as_integer_ratio(self):
- """ 获取改值的最简比 """
- """
- float.as_integer_ratio() -> (int, int)
- Return a pair of integers, whose ratio is exactly equal to the original
- float and with a positive denominator.
- Raise OverflowError on infinities and a ValueError on NaNs.
- >>> (10.0).as_integer_ratio()
- (10, 1)
- >>> (0.0).as_integer_ratio()
- (0, 1)
- >>> (-.25).as_integer_ratio()
- (-1, 4)
- """
- pass
- def conjugate(self, *args, **kwargs): # real signature unknown
- """ Return self, the complex conjugate of any float. """
- pass
- def fromhex(self, string):
- """ 将十六进制字符串转换成浮点型 """
- """
- float.fromhex(string) -> float
- Create a floating-point number from a hexadecimal string.
- >>> float.fromhex('0x1.ffffp10')
- 2047.984375
- >>> float.fromhex('-0x1p-1074')
- -4.9406564584124654e-324
- """
- return 0.0
- def hex(self):
- """ 返回当前值的 16 进制表示 """
- """
- float.hex() -> string
- Return a hexadecimal representation of a floating-point number.
- >>> (-0.1).hex()
- '-0x1.999999999999ap-4'
- >>> 3.14159.hex()
- '0x1.921f9f01b866ep+1'
- """
- return ""
- def is_integer(self, *args, **kwargs): # real signature unknown
- """ Return True if the float is an integer. """
- pass
- def __abs__(self):
- """ x.__abs__() <==> abs(x) """
- pass
- def __add__(self, y):
- """ x.__add__(y) <==> x+y """
- pass
- def __coerce__(self, y):
- """ x.__coerce__(y) <==> coerce(x, y) """
- pass
- def __divmod__(self, y):
- """ x.__divmod__(y) <==> divmod(x, y) """
- pass
- def __div__(self, y):
- """ x.__div__(y) <==> x/y """
- pass
- def __eq__(self, y):
- """ x.__eq__(y) <==> x==y """
- pass
- def __float__(self):
- """ x.__float__() <==> float(x) """
- pass
- def __floordiv__(self, y):
- """ x.__floordiv__(y) <==> x//y """
- pass
- def __format__(self, format_spec):
- """
- float.__format__(format_spec) -> string
- Formats the float according to format_spec.
- """
- return ""
- def __getattribute__(self, name):
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getformat__(self, typestr):
- """
- float.__getformat__(typestr) -> string
- You probably don't want to use this function. It exists mainly to be
- used in Python's test suite.
- typestr must be 'double' or 'float'. This function returns whichever of
- 'unknown', 'IEEE, big-endian' or 'IEEE, little-endian' best describes the
- format of floating point numbers used by the C type named by typestr.
- """
- return ""
- def __getnewargs__(self, *args, **kwargs): # real signature unknown
- pass
- def __ge__(self, y):
- """ x.__ge__(y) <==> x>=y """
- pass
- def __gt__(self, y):
- """ x.__gt__(y) <==> x>y """
- pass
- def __hash__(self):
- """ x.__hash__() <==> hash(x) """
- pass
- def __init__(self, x):
- pass
- def __int__(self):
- """ x.__int__() <==> int(x) """
- pass
- def __le__(self, y):
- """ x.__le__(y) <==> x<=y """
- pass
- def __long__(self):
- """ x.__long__() <==> long(x) """
- pass
- def __lt__(self, y):
- """ x.__lt__(y) <==> x<y """
- pass
- def __mod__(self, y):
- """ x.__mod__(y) <==> x%y """
- pass
- def __mul__(self, y):
- """ x.__mul__(y) <==> x*y """
- pass
- def __neg__(self):
- """ x.__neg__() <==> -x """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more):
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __ne__(self, y):
- """ x.__ne__(y) <==> x!=y """
- pass
- def __nonzero__(self):
- """ x.__nonzero__() <==> x != 0 """
- pass
- def __pos__(self):
- """ x.__pos__() <==> +x """
- pass
- def __pow__(self, y, z=None):
- """ x.__pow__(y[, z]) <==> pow(x, y[, z]) """
- pass
- def __radd__(self, y):
- """ x.__radd__(y) <==> y+x """
- pass
- def __rdivmod__(self, y):
- """ x.__rdivmod__(y) <==> divmod(y, x) """
- pass
- def __rdiv__(self, y):
- """ x.__rdiv__(y) <==> y/x """
- pass
- def __repr__(self):
- """ x.__repr__() <==> repr(x) """
- pass
- def __rfloordiv__(self, y):
- """ x.__rfloordiv__(y) <==> y//x """
- pass
- def __rmod__(self, y):
- """ x.__rmod__(y) <==> y%x """
- pass
- def __rmul__(self, y):
- """ x.__rmul__(y) <==> y*x """
- pass
- def __rpow__(self, x, z=None):
- """ y.__rpow__(x[, z]) <==> pow(x, y[, z]) """
- pass
- def __rsub__(self, y):
- """ x.__rsub__(y) <==> y-x """
- pass
- def __rtruediv__(self, y):
- """ x.__rtruediv__(y) <==> y/x """
- pass
- def __setformat__(self, typestr, fmt):
- """
- float.__setformat__(typestr, fmt) -> None
- You probably don't want to use this function. It exists mainly to be
- used in Python's test suite.
- typestr must be 'double' or 'float'. fmt must be one of 'unknown',
- 'IEEE, big-endian' or 'IEEE, little-endian', and in addition can only be
- one of the latter two if it appears to match the underlying C reality.
- Override the automatic determination of C-level floating point type.
- This affects how floats are converted to and from binary strings.
- """
- pass
- def __str__(self):
- """ x.__str__() <==> str(x) """
- pass
- def __sub__(self, y):
- """ x.__sub__(y) <==> x-y """
- pass
- def __truediv__(self, y):
- """ x.__truediv__(y) <==> x/y """
- pass
- def __trunc__(self, *args, **kwargs): # real signature unknown
- """ Return the Integral closest to x between 0 and x. """
- pass
- imag = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """the imaginary part of a complex number"""
- real = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """the real part of a complex number"""
float
四、字符串
如:'wupeiqi'、'alex'
怎样创建字符串:
1 str1 = “Alex”
2 str1 = str(“Alex”) 用str类创建了str1
解码与编码
gbk ---->utf-8
str1,decode(‘gbk’).encode(‘utf-8’) (先解码成unicode在编码成utf-8)
字符串的格式化方法:
1
2
3
可以传递一个类表或者数组进去,例如:
name = ”i am {0},age {1}”
li = [11,22]
name.format(*li) 在列表前一定要加一个*,就是这个规定的。
4
可以传递一个字典进去,例如
name = “i an {ss},age {dd}”
dic = {‘ss’:123,’dd’:456}
name.format(**dic) 传递字典要在前面加**。
- print('{}{}'.format('name','age'))
print ('{name}'.format(name='sun'))
print('{0}{1}{0}'.format('sun','bo'))
5 字符串切片,记住顾头不顾尾原则.
msg= 12345
print msg[0:4]
1234
每个字符串都具备如下功能:
- class str(basestring):
- """
- str(object='') -> string
- Return a nice string representation of the object.
- If the argument is a string, the return value is the same object.
- """
- def capitalize(self):
- """ 首字母变大写 """
- """
- S.capitalize() -> string
- Return a copy of the string S with only its first character
- capitalized.
- """
- return ""
- def center(self, width, fillchar=None):
- """ 内容居中,width:总长度;fillchar:空白处填充内容,默认无 """
- """
- S.center(width[, fillchar]) -> string
- Return S centered in a string of length width. Padding is
- done using the specified fill character (default is a space)
- """
- return ""
- def count(self, sub, start=None, end=None):
- """ 子序列个数 start其实就是下标的意思 """
- """
- S.count(sub[, start[, end]]) -> int
- Return the number of non-overlapping occurrences of substring sub in
- string S[start:end]. Optional arguments start and end are interpreted
- as in slice notation.
- """
- return 0
- def decode(self, encoding=None, errors=None):
- """ 解码 """
- """
- S.decode([encoding[,errors]]) -> object
- Decodes S using the codec registered for encoding. encoding defaults
- to the default encoding. errors may be given to set a different error
- handling scheme. Default is 'strict' meaning that encoding errors raise
- a UnicodeDecodeError. Other possible values are 'ignore' and 'replace'
- as well as any other name registered with codecs.register_error that is
- able to handle UnicodeDecodeErrors.
- """
- return object()
- def encode(self, encoding=None, errors=None):
- """ 编码,针对unicode """
- """
- S.encode([encoding[,errors]]) -> object
- Encodes S using the codec registered for encoding. encoding defaults
- to the default encoding. errors may be given to set a different error
- handling scheme. Default is 'strict' meaning that encoding errors raise
- a UnicodeEncodeError. Other possible values are 'ignore', 'replace' and
- 'xmlcharrefreplace' as well as any other name registered with
- codecs.register_error that is able to handle UnicodeEncodeErrors.
- """
- return object()
- def endswith(self, suffix, start=None, end=None):
- """ 是否以 xxx 结束 """
- """
- S.endswith(suffix[, start[, end]]) -> bool
- Return True if S ends with the specified suffix, False otherwise.
- With optional start, test S beginning at that position.
- With optional end, stop comparing S at that position.
- suffix can also be a tuple of strings to try.
- """
- return False
- def expandtabs(self, tabsize=None):
- """ 将tab转换成空格,默认一个tab转换成8个空格 """
- """
- S.expandtabs([tabsize]) -> string
- Return a copy of S where all tab characters are expanded using spaces.
- If tabsize is not given, a tab size of 8 characters is assumed.
- """
- return ""
- def find(self, sub, start=None, end=None):
- """ 寻找子序列位置,如果没找到,返回 -1 """
- 如果找的是两个字母,则找到的结果以第一个字母为准 """
- S.find(sub [,start [,end]]) -> int
- Return the lowest index in S where substring sub is found,
- such that sub is contained within S[start:end]. Optional
- arguments start and end are interpreted as in slice notation.
- Return -1 on failure.
- """
- return 0
- def format(*args, **kwargs): # known special case of str.format
- """ 字符串格式化,动态参数,将函数式编程时细说 """
- """
- S.format(*args, **kwargs) -> string
- Return a formatted version of S, using substitutions from args and kwargs.
- The substitutions are identified by braces ('{' and '}').
- """
- pass
- def index(self, sub, start=None, end=None):
- """ 子序列位置,如果没找到,报错 """
- S.index(sub [,start [,end]]) -> int
- Like S.find() but raise ValueError when the substring is not found.
- """
- return 0
- def isalnum(self):
- """ 是否是字母和数字 """
- """
- S.isalnum() -> bool
- Return True if all characters in S are alphanumeric
- and there is at least one character in S, False otherwise.
- """
- return False
- def isalpha(self):
- """ 是否是字母 """
- """
- S.isalpha() -> bool
- Return True if all characters in S are alphabetic
- and there is at least one character in S, False otherwise.
- """
- return False
- def isdigit(self):
- """ 是否是数字 """
- """
- S.isdigit() -> bool
- Return True if all characters in S are digits
- and there is at least one character in S, False otherwise.
- """
- return False
- def islower(self):
- """ 是否小写 """
- """
- S.islower() -> bool
- Return True if all cased characters in S are lowercase and there is
- at least one cased character in S, False otherwise.
- """
- return False
- def isspace(self):
- """
- S.isspace() -> bool
- 是否是空格
- Return True if all characters in S are whitespace
- and there is at least one character in S, False otherwise.
- """
- return False
- def istitle(self):
- """ 是否是标题
- S.istitle() -> bool
- Return True if S is a titlecased string and there is at least one
- character in S, i.e. uppercase characters may only follow uncased
- characters and lowercase characters only cased ones. Return False
- otherwise.
- """
- return False
- def isupper(self):
- """
- 是不是全是大写
- S.isupper() -> bool
- Return True if all cased characters in S are uppercase and there is
- at least one cased character in S, False otherwise.
- """
- return False
- def join(self, iterable):
- """ 连接 """
- """
- S.join(iterable) -> string
- li = [‘s1’,’s2’]
- ‘_’.join(li)
- ‘s1_s2’
- Return a string which is the concatenation of the strings in the
- iterable. The separator between elements is S.
- """
- return ""
- def ljust(self, width, fillchar=None):
- """ 内容左对齐,右侧填充 """
- """
- S.ljust(width[, fillchar]) -> string
- Return S left-justified in a string of length width. Padding is
- done using the specified fill character (default is a space).
- """
- return ""
- def lower(self):
""" 变小写 """
- """
- S.lower() -> string
- Return a copy of the string S converted to lowercase.
- """
- return ""
- def lstrip(self, chars=None):
- """ 移除左侧空白 """
- """
- S.lstrip([chars]) -> string or unicode
- Return a copy of the string S with leading whitespace removed.
- If chars is given and not None, remove characters in chars instead.
- If chars is unicode, S will be converted to unicode before stripping
- """
- return ""
- def partition(self, sep):
- """ 分割,前,中,后三部分 """
- """
- S.partition(sep) -> (head, sep, tail)
- Search for the separator sep in S, and return the part before it,
- the separator itself, and the part after it. If the separator is not
- found, return S and two empty strings.
- """
- pass
- def replace(self, old, new, count=None):
- """ 替换 """
- """
- S.replace(old, new[, count]) -> string
- Return a copy of string S with all occurrences of substring
- old replaced by new. If the optional argument count is
- given, only the first count occurrences are replaced.
- """
- return ""
- def rfind(self, sub, start=None, end=None):
- """
- S.rfind(sub [,start [,end]]) -> int
- Return the highest index in S where substring sub is found,
- such that sub is contained within S[start:end]. Optional
- arguments start and end are interpreted as in slice notation.
- Return -1 on failure.
- """
- return 0
- def rindex(self, sub, start=None, end=None):
- """
- S.rindex(sub [,start [,end]]) -> int
- Like S.rfind() but raise ValueError when the substring is not found.
- """
- return 0
- def rjust(self, width, fillchar=None):
- """
- S.rjust(width[, fillchar]) -> string
- Return S right-justified in a string of length width. Padding is
- done using the specified fill character (default is a space)
- """
- return ""
- def rpartition(self, sep):
- """
- S.rpartition(sep) -> (head, sep, tail)
- Search for the separator sep in S, starting at the end of S, and return
- the part before it, the separator itself, and the part after it. If the
- separator is not found, return two empty strings and S.
- """
- pass
- def rsplit(self, sep=None, maxsplit=None):
- """
- S.rsplit([sep [,maxsplit]]) -> list of strings
- Return a list of the words in the string S, using sep as the
- delimiter string, starting at the end of the string and working
- to the front. If maxsplit is given, at most maxsplit splits are
- done. If sep is not specified or is None, any whitespace string
- is a separator.
- """
- return []
- def rstrip(self, chars=None):
- """
- S.rstrip([chars]) -> string or unicode
- Return a copy of the string S with trailing whitespace removed.
- If chars is given and not None, remove characters in chars instead.
- If chars is unicode, S will be converted to unicode before stripping
- """
- return ""
- def split(self, sep=None, maxsplit=None):
- """ 分割, maxsplit最多分割几次 """
- """
- S.split([sep [,maxsplit]]) -> list of strings
- Return a list of the words in the string S, using sep as the
- delimiter string. If maxsplit is given, at most maxsplit
- splits are done. If sep is not specified or is None, any
- whitespace string is a separator and empty strings are removed
- from the result.
- """
- return []
- def splitlines(self, keepends=False):
- """ 根据换行分割 """
- """
- S.splitlines(keepends=False) -> list of strings
- Return a list of the lines in S, breaking at line boundaries.
- Line breaks are not included in the resulting list unless keepends
- is given and true.
- """
- return []
- def startswith(self, prefix, start=None, end=None):
- """ 是否起始 """
- """
- S.startswith(prefix[, start[, end]]) -> bool
- Return True if S starts with the specified prefix, False otherwise.
- With optional start, test S beginning at that position.
- With optional end, stop comparing S at that position.
- prefix can also be a tuple of strings to try.
- """
- return False
- def strip(self, chars=None):
- """ 移除两段空白 """
- """
- S.strip([chars]) -> string or unicode
- Return a copy of the string S with leading and trailing
- whitespace removed.
- If chars is given and not None, remove characters in chars instead.
- If chars is unicode, S will be converted to unicode before stripping
- """
- return ""
- def swapcase(self):
- """ 大写变小写,小写变大写 """
- """
- S.swapcase() -> string
- Return a copy of the string S with uppercase characters
- converted to lowercase and vice versa.
- """
- return ""
- def title(self):
- """
- S.title() -> string
- 变成标题格式
- Return a titlecased version of S, i.e. words start with uppercase
- characters, all remaining cased characters have lowercase.
- """
- return ""
- def translate(self, table, deletechars=None):
- """
- 转换,需要先做一个对应表,最后一个表示删除字符集合
- import string
- intab = "aeiou"
- outtab = ""
- trantab = string.maketrans(intab, outtab)
- str = "this is string example....wow!!!"
- print str.translate(trantab, 'xm')
- """
- 先删在转换
- """
- S.translate(table [,deletechars]) -> string
- Return a copy of the string S, where all characters occurring
- in the optional argument deletechars are removed, and the
- remaining characters have been mapped through the given
- translation table, which must be a string of length 256 or None.
- If the table argument is None, no translation is applied and
- the operation simply removes the characters in deletechars.
- """
- return ""
- def upper(self):
- """
- S.upper() -> string
- Return a copy of the string S converted to uppercase.
- """
- return ""
- def zfill(self, width):
- """方法返回指定长度的字符串,原字符串右对齐,前面填充0。"""
- """
- S.zfill(width) -> string
- Pad a numeric string S with zeros on the left, to fill a field
- of the specified width. The string S is never truncated.
- """
- return ""
- def _formatter_field_name_split(self, *args, **kwargs): # real signature unknown
- pass
- def _formatter_parser(self, *args, **kwargs): # real signature unknown
- pass
- def __add__(self, y):
- """ x.__add__(y) <==> x+y """
- pass
- def __contains__(self, y):
- """ x.__contains__(y) <==> y in x """
- pass
- def __eq__(self, y):
- """ x.__eq__(y) <==> x==y """
- pass
- def __format__(self, format_spec):
- """
- S.__format__(format_spec) -> string
- Return a formatted version of S as described by format_spec.
- """
- return ""
- def __getattribute__(self, name):
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getitem__(self, y):
- """ x.__getitem__(y) <==> x[y] """
- pass
- def __getnewargs__(self, *args, **kwargs): # real signature unknown
- pass
- def __getslice__(self, i, j):
- """
- x.__getslice__(i, j) <==> x[i:j]
- Use of negative indices is not supported.
- """
- pass
- def __ge__(self, y):
- """ x.__ge__(y) <==> x>=y """
- pass
- def __gt__(self, y):
- """ x.__gt__(y) <==> x>y """
- pass
- def __hash__(self):
- """ x.__hash__() <==> hash(x) """
- pass
- def __init__(self, string=''): # known special case of str.__init__
- """
- str(object='') -> string
- Return a nice string representation of the object.
- If the argument is a string, the return value is the same object.
- # (copied from class doc)
- """
- pass
- def __len__(self):
- """ x.__len__() <==> len(x) """
- pass
- def __le__(self, y):
- """ x.__le__(y) <==> x<=y """
- pass
- def __lt__(self, y):
- """ x.__lt__(y) <==> x<y """
- pass
- def __mod__(self, y):
- """ x.__mod__(y) <==> x%y """
- pass
- def __mul__(self, n):
- """ x.__mul__(n) <==> x*n """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more):
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __ne__(self, y):
- """ x.__ne__(y) <==> x!=y """
- pass
- def __repr__(self):
- """ x.__repr__() <==> repr(x) """
- pass
- def __rmod__(self, y):
- """ x.__rmod__(y) <==> y%x """
- pass
- def __rmul__(self, n):
- """ x.__rmul__(n) <==> n*x """
- pass
- def __sizeof__(self):
- """ S.__sizeof__() -> size of S in memory, in bytes """
- pass
- def __str__(self):
- """ x.__str__() <==> str(x) """
- pass
- str
str
注:编码;字符串的乘法;字符串和格式化
作业:
多级字典:
- # -*- coding: utf-8 -*-
- menu = {
- '北京':{
- '海淀':{
- '五道口':{
- 'soho':{},
- '网易':{},
- 'google':{}
- },
- '中关村':{
- '爱奇艺':{},
- '汽车之家':{},
- 'youku':{},
- },
- '上地':{
- '百度':{},
- },
- },
- '昌平':{
- '沙河':{
- '老男孩':{},
- '北航':{},
- },
- '天通苑':{},
- '回龙观':{},
- },
- '朝阳':{},
- '东城':{},
- },
- '上海':{
- '闵行':{
- "人民广场":{
- '炸鸡店':{}
- }
- },
- '闸北':{
- '火车战':{
- '携程':{}
- }
- },
- '浦东':{},
- },
- '山东':{},
- }
- current_level=menu###当前层
- last_level=[] ##父亲层
- while True:
- for key in current_level:
- print(key)
- choice=input(">>>:").strip()
- if len(choice)==0:continue
- if choice=="quit":
- #if not last_level:break ###和一下行是一个意思
- if len(last_level)==0:break##最后一层,就退出程序
- current_level=last_level[-1]##把当前层改成父亲层,下一次循环就回到上一次层
- last_level.pop()
- if choice not in current_level:continue###如果输入的不在里边,从新输入
- last_level.append(current_level)###记住当前层,
- current_level=current_level[choice]##进入下一层
代码
运算符
算数运算
比较运算
赋值运算
逻辑运算
成员运算
身份运算
位运算
运算符的优先级
布尔值:
非零数字自带的布尔值都是true
非空字符串自带的布尔值都是true
五、列表
如:[11,22,33]、['wupeiqi', 'alex']
每个列表都具备如下功能:
- class list(object):
- """
- list() -> new empty list
- list(iterable) -> new list initialized from iterable's items
- """
- def append(self, p_object): # real signature unknown; restored from __doc__
- """ L.append(object) -- append object to end 把值添加到列表的后面"""
- pass
- def count(self, value): # real signature unknown; restored from __doc__
- """ L.count(value) -> integer -- return number of occurrences of value 出现的值的次数 """
- return 0
- def extend(self, iterable): # real signature unknown; restored from __doc__
- """ L.extend(iterable) -- extend list by appending elements from the iterable 扩展类表,在原列表中可以扩展 li.extend([‘rice’]) id 不变 """
- pass
- def index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__
- """
- L.index(value, [start, [stop]]) -> integer -- return first index of value.
- Raises ValueError if the value is not present.
- """
- return 0
- def insert(self, index, p_object): # real signature unknown; restored from __doc__
- """ L.insert(index, object) -- insert object before index 在列表指定位置插入"""
- pass
- def pop(self, index=None): # real signature unknown; restored from __doc__
- """
- L.pop([index]) -> item -- remove and return item at index (default last).
- Raises IndexError if list is empty or index is out of range.
- """
- 删除并返回指定下标的值,如果没有指定,默认是最后一个值
- li = [111,222,333]
- name = li.pop()
- name
- 333
- pass
- def remove(self, value): # real signature unknown; restored from __doc__
- """
- L.remove(value) -- remove first occurrence of value.
- Raises ValueError if the value is not present.
- """ 移除类表的中元素,这是指定值的,只移除第一个 li.remove(222)
- pass
- def reverse(self): # real signature unknown; restored from __doc__
- """ L.reverse() -- reverse *IN PLACE* 翻转 ,也就是顺序颠倒一下"""
- pass
- def sort(self, cmp=None, key=None, reverse=False): # real signature unknown; restored from __doc__
- """
- L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;
- cmp(x, y) -> -1, 0, 1
- """ 数字--大小比较 字符----ak吗 中文—ncode
- pass
- def __add__(self, y): # real signature unknown; restored from __doc__
- """ x.__add__(y) <==> x+y """
- pass
- def __contains__(self, y): # real signature unknown; restored from __doc__
- """ x.__contains__(y) <==> y in x """
- pass
- def __delitem__(self, y): # real signature unknown; restored from __doc__
- """ x.__delitem__(y) <==> del x[y] """
- pass del li[1]默认就会调用这个delitem这个方法
- def __delslice__(self, i, j): # real signature unknown; restored from __doc__
- """
- x.__delslice__(i, j) <==> del x[i:j]
- Use of negative indices is not supported.
- """
- pass
- def __eq__(self, y): # real signature unknown; restored from __doc__
- """ x.__eq__(y) <==> x==y """
- pass
- def __getattribute__(self, name): # real signature unknown; restored from __doc__
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getitem__(self, y): # real signature unknown; restored from __doc__
- """ x.__getitem__(y) <==> x[y] """
- pass
- def __getslice__(self, i, j): # real signature unknown; restored from __doc__
- """
- x.__getslice__(i, j) <==> x[i:j]
- Use of negative indices is not supported.
- """
- pass
- def __ge__(self, y): # real signature unknown; restored from __doc__
- """ x.__ge__(y) <==> x>=y """
- pass
- def __gt__(self, y): # real signature unknown; restored from __doc__
- """ x.__gt__(y) <==> x>y """
- pass
- def __iadd__(self, y): # real signature unknown; restored from __doc__
- """ x.__iadd__(y) <==> x+=y """
- pass
- def __imul__(self, y): # real signature unknown; restored from __doc__
- """ x.__imul__(y) <==> x*=y """
- pass
- def __init__(self, seq=()): # known special case of list.__init__
- """
- list() -> new empty list
- list(iterable) -> new list initialized from iterable's items
- # (copied from class doc)
- """
- pass
- def __iter__(self): # real signature unknown; restored from __doc__
- """ x.__iter__() <==> iter(x) """
- pass
- def __len__(self): # real signature unknown; restored from __doc__
- """ x.__len__() <==> len(x) """
- pass
- def __le__(self, y): # real signature unknown; restored from __doc__
- """ x.__le__(y) <==> x<=y """
- pass
- def __lt__(self, y): # real signature unknown; restored from __doc__
- """ x.__lt__(y) <==> x<y """
- pass
- def __mul__(self, n): # real signature unknown; restored from __doc__
- """ x.__mul__(n) <==> x*n """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more): # real signature unknown; restored from __doc__
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __ne__(self, y): # real signature unknown; restored from __doc__
- """ x.__ne__(y) <==> x!=y """
- pass
- def __repr__(self): # real signature unknown; restored from __doc__
- """ x.__repr__() <==> repr(x) """
- pass
- def __reversed__(self): # real signature unknown; restored from __doc__
- """ L.__reversed__() -- return a reverse iterator over the list """
- pass
- def __rmul__(self, n): # real signature unknown; restored from __doc__
- """ x.__rmul__(n) <==> n*x """
- pass
- def __setitem__(self, i, y): # real signature unknown; restored from __doc__
- """ x.__setitem__(i, y) <==> x[i]=y """
- pass
- def __setslice__(self, i, j, y): # real signature unknown; restored from __doc__
- """
- x.__setslice__(i, j, y) <==> x[i:j]=y
- Use of negative indices is not supported.
- """
- pass
- def __sizeof__(self): # real signature unknown; restored from __doc__
- """ L.__sizeof__() -- size of L in memory, in bytes """
- pass
- __hash__ = None
list
- 列表的循环
- name = [["gaolong",29],["wangyuangeng",26],["sunlixue",21],["sunbo",30],["tiansuli",23]]
for i,ele in enumerate(name):
print (i,".",ele[0],ele[1])
0 . gaolong
1 . wangyuangeng
2 . sunlixue
3 . sunbo
4 . tiansuli
注:排序;
六、元组
如:(11,22,33)、('wupeiqi', 'alex') 不可修改----元组的元素不能被修改,元组的元素的元素是可以被修改的
每个元组都具备如下功能:
- class tuple(object):
- """
- tuple() -> empty tuple
- tuple(iterable) -> tuple initialized from iterable's items
- If the argument is a tuple, the return value is the same object.
- """
- def count(self, value): # real signature unknown; restored from __doc__
- """ T.count(value) -> integer -- return number of occurrences of value """
- return 0
- def index(self, value, start=None, stop=None): # real signature unknown; restored from __doc__
- """
- T.index(value, [start, [stop]]) -> integer -- return first index of value.
- Raises ValueError if the value is not present.
- """
- return 0
- def __add__(self, y): # real signature unknown; restored from __doc__
- """ x.__add__(y) <==> x+y """
- pass
- def __contains__(self, y): # real signature unknown; restored from __doc__
- """ x.__contains__(y) <==> y in x """
- pass
- def __eq__(self, y): # real signature unknown; restored from __doc__
- """ x.__eq__(y) <==> x==y """
- pass
- def __getattribute__(self, name): # real signature unknown; restored from __doc__
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getitem__(self, y): # real signature unknown; restored from __doc__
- """ x.__getitem__(y) <==> x[y] """
- pass
- def __getnewargs__(self, *args, **kwargs): # real signature unknown
- pass
- def __getslice__(self, i, j): # real signature unknown; restored from __doc__
- """
- x.__getslice__(i, j) <==> x[i:j]
- Use of negative indices is not supported.
- """
- pass
- def __ge__(self, y): # real signature unknown; restored from __doc__
- """ x.__ge__(y) <==> x>=y """
- pass
- def __gt__(self, y): # real signature unknown; restored from __doc__
- """ x.__gt__(y) <==> x>y """
- pass
- def __hash__(self): # real signature unknown; restored from __doc__
- """ x.__hash__() <==> hash(x) """
- pass
- def __init__(self, seq=()): # known special case of tuple.__init__
- """
- tuple() -> empty tuple
- tuple(iterable) -> tuple initialized from iterable's items
- If the argument is a tuple, the return value is the same object.
- # (copied from class doc)
- """
- pass
- def __iter__(self): # real signature unknown; restored from __doc__
- """ x.__iter__() <==> iter(x) """
- pass
- def __len__(self): # real signature unknown; restored from __doc__
- """ x.__len__() <==> len(x) """
- pass
- def __le__(self, y): # real signature unknown; restored from __doc__
- """ x.__le__(y) <==> x<=y """
- pass
- def __lt__(self, y): # real signature unknown; restored from __doc__
- """ x.__lt__(y) <==> x<y """
- pass
- def __mul__(self, n): # real signature unknown; restored from __doc__
- """ x.__mul__(n) <==> x*n """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more): # real signature unknown; restored from __doc__
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __ne__(self, y): # real signature unknown; restored from __doc__
- """ x.__ne__(y) <==> x!=y """
- pass
- def __repr__(self): # real signature unknown; restored from __doc__
- """ x.__repr__() <==> repr(x) """
- pass
- def __rmul__(self, n): # real signature unknown; restored from __doc__
- """ x.__rmul__(n) <==> n*x """
- pass
- def __sizeof__(self): # real signature unknown; restored from __doc__
- """ T.__sizeof__() -- size of T in memory, in bytes """
- pass
tuple
七、字典
- name={
395159623:{'age':29,'shengao':185,'sex':"man"},
917643002:{'age':30,'shengao':160,'sex':"woman"}
}
print (name.get(395159623).get('age'))
如:{'name': 'wupeiqi', 'age': 18} 、{'host': '2.2.2.2', 'port': 80]}
ps:循环时,默认循环key
每个字典都具备如下功能:字典的key是不可以重复的,他是无位置的,无序的。
什么可以当做字典的key呢?
数字,字符串,类的实例 不可以变的,时间也行
ipmort datatime
a = datatime.datatime.now()
如何判断是不是一个字典? type(name_dic) is dict
大的数据循环字典,应该这样:
for k in b:
print k,b[k]
这样比较好,因为正常的循环字典会一次性的把字典中的所有值都提出来,放到内存中,比较耗内存。
copy: 浅copy
D.copy() #拷贝字典 ,他是一个浅的拷贝,在副本中替换值的时候,原始字段不受影响,但是修改了某个值时(原地修改,不是替换)原始字典也会改变(我理解的还是第一层的对象是不会发生变化的,而里边的其他层就会随之变化),对应的还有深拷贝,我们得借助模块了。data4 = copy.deepcopy(data),就是把所有层级都copy了, 也就是完全独立了。
x = {'username':'admin','machines':['foo','bar','baz']}
y = x.copy()
y['username']='mih'
y['machines'].remove('bar')
print x
print y
{'username': 'admin', 'machines': ['foo', 'baz']}
{'username': 'mih', 'machines': ['foo', 'baz']
这个例子是这样解释的,y copy了x ,其实是在内存中第一层数据是独立,尔第二层数据其实用的是一份,其实就指针指向了同一块内存地址,这样我改第一层数据的时候,x y是不会同时变化的,而我改第二层数据的时候,他们其实用的是同一块地址,那么数据就会一同改变。而deepcopy是产生了一份完完全全独立的数据。
- class dict(object):
- """
- dict() -> new empty dictionary
- dict(mapping) -> new dictionary initialized from a mapping object's
- (key, value) pairs
- dict(iterable) -> new dictionary initialized as if via:
- d = {}
- for k, v in iterable:
- d[k] = v
- dict(**kwargs) -> new dictionary initialized with the name=value pairs
- in the keyword argument list. For example: dict(one=1, two=2)
- """
- def clear(self): # real signature unknown; restored from __doc__
- """ 清除内容 """
- """ D.clear() -> None. Remove all items from D. """
- pass
- def copy(self): # real signature unknown; restored from __doc__
- """ 浅拷贝 """
- """ D.copy() -> a shallow copy of D """
- pass
- @staticmethod # known case
- def fromkeys(S, v=None): # real signature unknown; restored from __doc__
- """
- dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
- v defaults to None.
- """
- pass
- a.formkeys([1,2,3],’t’)
- {1:’t’,2:’t’,3:’t’}
- def get(self, k, d=None): # real signature unknown; restored from __doc__
- """ 根据key获取值,d是默认值 """
- """ D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None. """
- pass
- dic = {‘k1’:1234}
- disc[‘k1’]
- dic.get(‘k2’)这样也可以获取元素,没有这个值,也不会报错。
- dic.get(‘k2’,’ok’)
- ok
- def has_key(self, k): # real signature unknown; restored from __doc__
- """ 是否有key """
- """ D.has_key(k) -> True if D has a key k, else False """
- return False
- def items(self): # real signature unknown; restored from __doc__
- """ 所有项的列表形式 """
- """ D.items() -> list of D's (key, value) pairs, as 2-tuples """
- return []
- def iteritems(self): # real signature unknown; restored from __doc__
- """ 项可迭代 """
- """ D.iteritems() -> an iterator over the (key, value) items of D """
- pass
- def iterkeys(self): # real signature unknown; restored from __doc__
- """ key可迭代 """
- """ D.iterkeys() -> an iterator over the keys of D """
- pass
- def itervalues(self): # real signature unknown; restored from __doc__
- """ value可迭代 """
- """ D.itervalues() -> an iterator over the values of D """
- pass
- def keys(self): # real signature unknown; restored from __doc__
- """ 所有的key列表 """
- """ D.keys() -> list of D's keys """
- return []
- def pop(self, k, d=None): # real signature unknown; restored from __doc__
- """ 获取并在字典中移除 ,指定key"""还可以这样 del b[1]
- """
- D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
- If key is not found, d is returned if given, otherwise KeyError is raised
- """
- pass
- def popitem(self): # real signature unknown; restored from __doc__
- """ 获取并在字典中移除 """---删掉内存中的数据因为字典是无序,所以不好控制。
- """
- D.popitem() -> (k, v), remove and return some (key, value) pair as a
- 2-tuple; but raise KeyError if D is empty.
- """
- pass
- def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
- """ 如果key不存在,则创建,如果存在,则返回已存在的值且不修改 """
- """ D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
- pass
- def update(self, E=None, **F): # known special case of dict.update
- """ 更新
- {'name':'alex', 'age': 18000}
- [('name','sbsbsb'),]
- """
- """ 把两个字典中的元素整合到一个字典中,c.update(d) 循环d,把d中的付给c
- D.update([E, ]**F) -> None. Update D from dict/iterable E and F.
- If E present and has a .keys() method, does: for k in E: D[k] = E[k]
- If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v
- In either case, this is followed by: for k in F: D[k] = F[k]
- """
- pass
- def values(self): # real signature unknown; restored from __doc__
- """ 所有的值 """
- """ D.values() -> list of D's values """
- return []
- def viewitems(self): # real signature unknown; restored from __doc__
- """ 所有项,只是将内容保存至view对象中 """
- """ D.viewitems() -> a set-like object providing a view on D's items """
- pass
- def viewkeys(self): # real signature unknown; restored from __doc__
- """ D.viewkeys() -> a set-like object providing a view on D's keys """
- pass
- def viewvalues(self): # real signature unknown; restored from __doc__
- """ D.viewvalues() -> an object providing a view on D's values """
- pass
- def __cmp__(self, y): # real signature unknown; restored from __doc__
- """ x.__cmp__(y) <==> cmp(x,y) """
- pass
- def __contains__(self, k): # real signature unknown; restored from __doc__
- """ D.__contains__(k) -> True if D has a key k, else False """
- return False
- def __delitem__(self, y): # real signature unknown; restored from __doc__
- """ x.__delitem__(y) <==> del x[y] """
- pass
- def __eq__(self, y): # real signature unknown; restored from __doc__
- """ x.__eq__(y) <==> x==y """
- pass
- def __getattribute__(self, name): # real signature unknown; restored from __doc__
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getitem__(self, y): # real signature unknown; restored from __doc__
- """ x.__getitem__(y) <==> x[y] """
- pass
- def __ge__(self, y): # real signature unknown; restored from __doc__
- """ x.__ge__(y) <==> x>=y """
- pass
- def __gt__(self, y): # real signature unknown; restored from __doc__
- """ x.__gt__(y) <==> x>y """
- pass
- def __init__(self, seq=None, **kwargs): # known special case of dict.__init__
- """
- dict() -> new empty dictionary
- dict(mapping) -> new dictionary initialized from a mapping object's
- (key, value) pairs
- dict(iterable) -> new dictionary initialized as if via:
- d = {}
- for k, v in iterable:
- d[k] = v
- dict(**kwargs) -> new dictionary initialized with the name=value pairs
- in the keyword argument list. For example: dict(one=1, two=2)
- # (copied from class doc)
- """
- pass
- def __iter__(self): # real signature unknown; restored from __doc__
- """ x.__iter__() <==> iter(x) """
- pass
- def __len__(self): # real signature unknown; restored from __doc__
- """ x.__len__() <==> len(x) """
- pass
- def __le__(self, y): # real signature unknown; restored from __doc__
- """ x.__le__(y) <==> x<=y """
- pass
- def __lt__(self, y): # real signature unknown; restored from __doc__
- """ x.__lt__(y) <==> x<y """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more): # real signature unknown; restored from __doc__
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __ne__(self, y): # real signature unknown; restored from __doc__
- """ x.__ne__(y) <==> x!=y """
- pass
- def __repr__(self): # real signature unknown; restored from __doc__
- """ x.__repr__() <==> repr(x) """
- pass
- def __setitem__(self, i, y): # real signature unknown; restored from __doc__
- """ x.__setitem__(i, y) <==> x[i]=y """
- pass
- def __sizeof__(self): # real signature unknown; restored from __doc__
- """ D.__sizeof__() -> size of D in memory, in bytes """
- pass
- __hash__ = None
dict
1
2
3
|
练习:元素分类 有如下值集合 [ 11 , 22 , 33 , 44 , 55 , 66 , 77 , 88 , 99 , 90. ..],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 即: { 'k1' : 大于 66 , 'k2' : 小于 66 } |
- 方法1
- li = [11,22,33,44,55,66,77,88,99,90]
- dic = {'k1':[],'k2':[]}
- for item in li:
- if item>66:
- dic['k2'].append(item)
- else:
- dic['k1'].append(item)
- 方法2:
- li = [11,22,33,44,55,66,77,88,99,90]
- dic = {}
- for item in li:
- if item > 66:
- if 'k2' in dic.keys():
- dic['k2'].append(item)
- else:
- #创建只有一项元素的列表
- dic['k2'] = [item,]
- else:
- if item > 66:
- if 'k2' in dic.keys():
- dic['k2'].append(item)
- else:
- dic['k2'] = [item,]
方法
- alex|123|1
- sun|123|1
- bo|123|1
- 变成这样的字典
- dic = {
- 'alex':[123,1],
- 'bo':[123,1],
- 'sun':[123,1],
- }
- dic = {}
- #打开文件,读取文件
- obj = file('log','r')
- line_list = obj.readlines()
- obj.close()
- for line in line_list:
- line = line.strip() #去掉换行和空格
- ele_list = line.split('|') #分割['alex','123','1']
- dic[ele_list[0]] = ele_list[1:]
文件格式化
字典的操作
##key定义规则,1,不可变:数字,字符串,元组 (可以用作key)
2 可变的:列表,字典
##value定义规则:任意类型
增(字典是无序的)
- dic = {'name':'sun','age':29}
print (dic)
dic['sex']='man'
print(dic)
删
- del dic['name']
print(dic)
改(只能改vlaue,key不能改)
- dic = {'name':'sun','age':29}
print (dic)
dic['name']='zhaoyue'
print(dic)
查
- name={
395159623:{'age':29,'shengao':185,'sex':"man"},
917643002:{'age':30,'shengao':160,'sex':"woman"}
}
print (name.get(395159623).get('age'))
字典的循环方式
- dis={'name':'sunbo','age':18}###多用这种方式
for key in dis:
print(key,dis[key])- for k,v in dis.items():###items得先把字典转化成列表,效率不高.
print(k,v)
八、set集合
重要功能:去重 比较
set是一个无序且不重复的元素集合
a = range(5,10)
b = range(7,12)
c = set(a)
d = set(b)
c & d 交集
c|d 并集
c ^d 取反
c – d c里面有d里面没有的
===========================
a & b #求交集 a.intersection(b)
a | b #求并集 a.union(b)
a – b # 求差集 a.difference(b)
a ^ b #求对称差集 a.symmetric_difference(b)
a.issubset(b) #a 是b 的子集
a.issuperset(b) # a 是否包含b
============================
- class set(object):
- """
- set() -> new empty set object
- set(iterable) -> new set object
- Build an unordered collection of unique elements.
- """
- def add(self, *args, **kwargs): # real signature unknown
- """ 添加 """
- """
- Add an element to a set.
- This has no effect if the element is already present.
- """
- pass
- def clear(self, *args, **kwargs): # real signature unknown
- """ Remove all elements from this set. """
- pass
- def copy(self, *args, **kwargs): # real signature unknown
- """ Return a shallow copy of a set. """
- pass
- def difference(self, *args, **kwargs): # real signature unknown
- """
- Return the difference of two or more sets as a new set.
- (i.e. all elements that are in this set but not the others.)
- """
- pass
- def difference_update(self, *args, **kwargs): # real signature unknown
- """ 删除当前set中的所有包含在 new set 里的元素 """
- """ Remove all elements of another set from this set. """
- pass
- def discard(self, *args, **kwargs): # real signature unknown
- """ 移除元素 """
- """
- Remove an element from a set if it is a member.
- If the element is not a member, do nothing.
- """
- pass
- def intersection(self, *args, **kwargs): # real signature unknown
- """ 取交集,新创建一个set """
- """
- Return the intersection of two or more sets as a new set.
- (i.e. elements that are common to all of the sets.)
- """
- pass
- def intersection_update(self, *args, **kwargs): # real signature unknown
- """ 取交集,修改原来set """
- """ Update a set with the intersection of itself and another. """
- pass
- def isdisjoint(self, *args, **kwargs): # real signature unknown
- """ 如果没有交集,返回true """
- """ Return True if two sets have a null intersection. """
- pass
- def issubset(self, *args, **kwargs): # real signature unknown
- """ 是否是子集 """
- """ Report whether another set contains this set. """
- pass
- def issuperset(self, *args, **kwargs): # real signature unknown
- """ 是否是父集 """
- """ Report whether this set contains another set. """
- pass
- def pop(self, *args, **kwargs): # real signature unknown
- """ 移除 """
- """
- Remove and return an arbitrary set element.
- Raises KeyError if the set is empty.
- """
- pass
- def remove(self, *args, **kwargs): # real signature unknown
- """ 移除 """
- """
- Remove an element from a set; it must be a member.
- If the element is not a member, raise a KeyError.
- """
- pass
- def symmetric_difference(self, *args, **kwargs): # real signature unknown
- """ 差集,创建新对象"""
- """
- Return the symmetric difference of two sets as a new set.
- (i.e. all elements that are in exactly one of the sets.)
- """
- pass
- def symmetric_difference_update(self, *args, **kwargs): # real signature unknown
- """ 差集,改变原来 """
- """ Update a set with the symmetric difference of itself and another. """
- pass
- def union(self, *args, **kwargs): # real signature unknown
- """ 并集 """
- """
- Return the union of sets as a new set.
- (i.e. all elements that are in either set.)
- """
- pass
- def update(self, *args, **kwargs): # real signature unknown
- """ 更新 """
- """ Update a set with the union of itself and others. """
- pass
- def __and__(self, y): # real signature unknown; restored from __doc__
- """ x.__and__(y) <==> x&y """
- pass
- def __cmp__(self, y): # real signature unknown; restored from __doc__
- """ x.__cmp__(y) <==> cmp(x,y) """
- pass
- def __contains__(self, y): # real signature unknown; restored from __doc__
- """ x.__contains__(y) <==> y in x. """
- pass
- def __eq__(self, y): # real signature unknown; restored from __doc__
- """ x.__eq__(y) <==> x==y """
- pass
- def __getattribute__(self, name): # real signature unknown; restored from __doc__
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __ge__(self, y): # real signature unknown; restored from __doc__
- """ x.__ge__(y) <==> x>=y """
- pass
- def __gt__(self, y): # real signature unknown; restored from __doc__
- """ x.__gt__(y) <==> x>y """
- pass
- def __iand__(self, y): # real signature unknown; restored from __doc__
- """ x.__iand__(y) <==> x&=y """
- pass
- def __init__(self, seq=()): # known special case of set.__init__
- """
- set() -> new empty set object
- set(iterable) -> new set object
- Build an unordered collection of unique elements.
- # (copied from class doc)
- """
- pass
- def __ior__(self, y): # real signature unknown; restored from __doc__
- """ x.__ior__(y) <==> x|=y """
- pass
- def __isub__(self, y): # real signature unknown; restored from __doc__
- """ x.__isub__(y) <==> x-=y """
- pass
- def __iter__(self): # real signature unknown; restored from __doc__
- """ x.__iter__() <==> iter(x) """
- pass
- def __ixor__(self, y): # real signature unknown; restored from __doc__
- """ x.__ixor__(y) <==> x^=y """
- pass
- def __len__(self): # real signature unknown; restored from __doc__
- """ x.__len__() <==> len(x) """
- pass
- def __le__(self, y): # real signature unknown; restored from __doc__
- """ x.__le__(y) <==> x<=y """
- pass
- def __lt__(self, y): # real signature unknown; restored from __doc__
- """ x.__lt__(y) <==> x<y """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more): # real signature unknown; restored from __doc__
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __ne__(self, y): # real signature unknown; restored from __doc__
- """ x.__ne__(y) <==> x!=y """
- pass
- def __or__(self, y): # real signature unknown; restored from __doc__
- """ x.__or__(y) <==> x|y """
- pass
- def __rand__(self, y): # real signature unknown; restored from __doc__
- """ x.__rand__(y) <==> y&x """
- pass
- def __reduce__(self, *args, **kwargs): # real signature unknown
- """ Return state information for pickling. """
- pass
- def __repr__(self): # real signature unknown; restored from __doc__
- """ x.__repr__() <==> repr(x) """
- pass
- def __ror__(self, y): # real signature unknown; restored from __doc__
- """ x.__ror__(y) <==> y|x """
- pass
- def __rsub__(self, y): # real signature unknown; restored from __doc__
- """ x.__rsub__(y) <==> y-x """
- pass
- def __rxor__(self, y): # real signature unknown; restored from __doc__
- """ x.__rxor__(y) <==> y^x """
- pass
- def __sizeof__(self): # real signature unknown; restored from __doc__
- """ S.__sizeof__() -> size of S in memory, in bytes """
- pass
- def __sub__(self, y): # real signature unknown; restored from __doc__
- """ x.__sub__(y) <==> x-y """
- pass
- def __xor__(self, y): # real signature unknown; restored from __doc__
- """ x.__xor__(y) <==> x^y """
- pass
- __hash__ = None
set
练习:寻找差异
# 数据库中原有
old_dict
=
{
"#1"
:{
'hostname'
:c1,
'cpu_count'
:
2
,
'mem_capicity'
:
80
},
"#2"
:{
'hostname'
:c1,
'cpu_count'
:
2
,
'mem_capicity'
:
80
}
"#3"
:{
'hostname'
:c1,
'cpu_count'
:
2
,
'mem_capicity'
:
80
}
}
# cmdb 新汇报的数据
new_dict
=
{
"#1"
:{
'hostname'
:c1,
'cpu_count'
:
2
,
'mem_capicity'
:
800
},
"#3"
:{
'hostname'
:c1,
'cpu_count'
:
2
,
'mem_capicity'
:
80
}
"#4"
:{
'hostname'
:c2,
'cpu_count'
:
2
,
'mem_capicity'
:
80
}
}
需要删除:?
需要新建:?
需要更新:? 注意:无需考虑内部元素是否改变,只要原来存在,新汇报也存在,就是需要更新
- old_set = set(old_dict.keys())
- update_list = list(old_set.intersection(new_dict.keys()))
- new_list = []
- del_list = []
- for i in new_dict.keys():
- if i not in update_list:
- new_list.append(i)
- for i in old_dict.keys():
- if i not in update_list:
- del_list.append(i)
- print update_list,new_list,del_list
九、collection系列
1、计数器(counter)
Counter是对字典类型的补充,用于追踪值的出现次数。
ps:具备字典的所有功能 + 自己的功能
引入collections模块
- import collections
- collections.Counter('aaabbcc')
- c1 = collections.Counter('aabb')
- c2 = collections.Counter('aacc')
- c1.update(c2)
- c = Counter('abcdeabcdabcaba')
- print c
- 输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}
- ########################################################################
- ### Counter
- ########################################################################
- class Counter(dict): #当前扩展的字典
- '''Dict subclass for counting hashable items. Sometimes called a bag
- or multiset. Elements are stored as dictionary keys and their counts
- are stored as dictionary values.
- >>> c = Counter('abcdeabcdabcaba') # count elements from a string
- >>> c.most_common(3) # three most common elements后面的参数的意思是至少出现3次
- [('a', 5), ('b', 4), ('c', 3)]
- >>> sorted(c) # list all unique elements
- ['a', 'b', 'c', 'd', 'e']
- >>> ''.join(sorted(c.elements())) # list elements with repetitions
- 'aaaaabbbbcccdde'
- >>> sum(c.values()) # total of all counts
- >>> c['a'] # count of letter 'a'
- >>> for elem in 'shazam': # update counts from an iterable
- ... c[elem] += 1 # by adding 1 to each element's count
- >>> c['a'] # now there are seven 'a'
- >>> del c['b'] # remove all 'b'
- >>> c['b'] # now there are zero 'b'
- >>> d = Counter('simsalabim') # make another counter
- >>> c.update(d) # add in the second counter把d加入到c中。
- >>> c['a'] # now there are nine 'a'
- >>> c.clear() # empty the counter
- >>> c
- Counter()
- Note: If a count is set to zero or reduced to zero, it will remain
- in the counter until the entry is deleted or the counter is cleared:
- >>> c = Counter('aaabbc')
- >>> c['b'] -= 2 # reduce the count of 'b' by two
- >>> c.most_common() # 'b' is still in, but its count is zero
- [('a', 3), ('c', 1), ('b', 0)]
- '''
- # References:
- # http://en.wikipedia.org/wiki/Multiset
- # http://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html
- # http://www.demo2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm
- # http://code.activestate.com/recipes/259174/
- # Knuth, TAOCP Vol. II section 4.6.3
- def __init__(self, iterable=None, **kwds):
- '''Create a new, empty Counter object. And if given, count elements
- from an input iterable. Or, initialize the count from another mapping
- of elements to their counts.
- >>> c = Counter() # a new, empty counter
- >>> c = Counter('gallahad') # a new counter from an iterable
- >>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping
- >>> c = Counter(a=4, b=2) # a new counter from keyword args
- '''
- super(Counter, self).__init__()
- self.update(iterable, **kwds)
- def __missing__(self, key):
- """ 对于不存在的元素,返回计数器为0 """
- 'The count of elements not in the Counter is zero.'
- # Needed so that self[missing_item] does not raise KeyError
- return 0
- def most_common(self, n=None):
- """ 列出前几位的元素"""
- '''List the n most common elements and their counts from the most
- common to the least. If n is None, then list all element counts.
- >>> Counter('abcdeabcdabcaba').most_common(3)
- [('a', 5), ('b', 4), ('c', 3)]
- '''
- # Emulate Bag.sortedByCount from Smalltalk
- if n is None:
- return sorted(self.iteritems(), key=_itemgetter(1), reverse=True)
- return _heapq.nlargest(n, self.iteritems(), key=_itemgetter(1))
- def elements(self):
- """ 计数器中的所有元素,注:此处非所有元素集合,而是包含所有元素集合的迭代器 """
- '''Iterator over elements repeating each as many times as its count.
- >>> c = Counter('ABCABC')
- >>> sorted(c.elements())
- ['A', 'A', 'B', 'B', 'C', 'C']
- # Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1
- >>> prime_factors = Counter({2: 2, 3: 3, 17: 1})
- >>> product = 1
- >>> for factor in prime_factors.elements(): # loop over factors
- ... product *= factor # and multiply them
- >>> product
- Note, if an element's count has been set to zero or is a negative
- number, elements() will ignore it.
- '''
- # Emulate Bag.do from Smalltalk and Multiset.begin from C++.
- return _chain.from_iterable(_starmap(_repeat, self.iteritems()))
- # Override dict methods where necessary
- @classmethod
- def fromkeys(cls, iterable, v=None):
- # There is no equivalent method for counters because setting v=1
- # means that no element can have a count greater than one.
- raise NotImplementedError(
- 'Counter.fromkeys() is undefined. Use Counter(iterable) instead.')
- def update(self, iterable=None, **kwds):
- """ 更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一 """
- '''Like dict.update() but add counts instead of replacing them.
- Source can be an iterable, a dictionary, or another Counter instance.
- >>> c = Counter('which')
- >>> c.update('witch') # add elements from another iterable
- >>> d = Counter('watch')
- >>> c.update(d) # add elements from another counter
- >>> c['h'] # four 'h' in which, witch, and watch
- '''
- # The regular dict.update() operation makes no sense here because the
- # replace behavior results in the some of original untouched counts
- # being mixed-in with all of the other counts for a mismash that
- # doesn't have a straight-forward interpretation in most counting
- # contexts. Instead, we implement straight-addition. Both the inputs
- # and outputs are allowed to contain zero and negative counts.
- if iterable is not None:
- if isinstance(iterable, Mapping):
- if self:
- self_get = self.get
- for elem, count in iterable.iteritems():
- self[elem] = self_get(elem, 0) + count
- else:
- super(Counter, self).update(iterable) # fast path when counter is empty
- else:
- self_get = self.get
- for elem in iterable:
- self[elem] = self_get(elem, 0) + 1
- if kwds:
- self.update(kwds)
- def subtract(self, iterable=None, **kwds):
- """ 相减,原来的计数器中的每一个元素的数量减去后添加的元素的数量 """
- '''Like dict.update() but subtracts counts instead of replacing them.
- Counts can be reduced below zero. Both the inputs and outputs are
- allowed to contain zero and negative counts.
- Source can be an iterable, a dictionary, or another Counter instance.
- >>> c = Counter('which')
- >>> c.subtract('witch') # subtract elements from another iterable
- >>> c.subtract(Counter('watch')) # subtract elements from another counter
- >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch
- >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch
- -1
- '''
- if iterable is not None:
- self_get = self.get
- if isinstance(iterable, Mapping):
- for elem, count in iterable.items():
- self[elem] = self_get(elem, 0) - count
- else:
- for elem in iterable:
- self[elem] = self_get(elem, 0) - 1
- if kwds:
- self.subtract(kwds)
- def copy(self):
- """ 拷贝 """
- 'Return a shallow copy.'
- return self.__class__(self)
- def __reduce__(self):
- """ 返回一个元组(类型,元组) """
- return self.__class__, (dict(self),)
- def __delitem__(self, elem):
- """ 删除元素 """
- 'Like dict.__delitem__() but does not raise KeyError for missing values.'
- if elem in self:
- super(Counter, self).__delitem__(elem)
- def __repr__(self):
- if not self:
- return '%s()' % self.__class__.__name__
- items = ', '.join(map('%r: %r'.__mod__, self.most_common()))
- return '%s({%s})' % (self.__class__.__name__, items)
- # Multiset-style mathematical operations discussed in:
- # Knuth TAOCP Volume II section 4.6.3 exercise 19
- # and at http://en.wikipedia.org/wiki/Multiset
- #
- # Outputs guaranteed to only include positive counts.
- #
- # To strip negative and zero counts, add-in an empty counter:
- # c += Counter()
- def __add__(self, other):
- '''Add counts from two counters.
- >>> Counter('abbb') + Counter('bcc')
- Counter({'b': 4, 'c': 2, 'a': 1})
- '''
- if not isinstance(other, Counter):
- return NotImplemented
- result = Counter()
- for elem, count in self.items():
- newcount = count + other[elem]
- if newcount > 0:
- result[elem] = newcount
- for elem, count in other.items():
- if elem not in self and count > 0:
- result[elem] = count
- return result
- def __sub__(self, other):
- ''' Subtract count, but keep only results with positive counts.
- >>> Counter('abbbc') - Counter('bccd')
- Counter({'b': 2, 'a': 1})
- '''
- if not isinstance(other, Counter):
- return NotImplemented
- result = Counter()
- for elem, count in self.items():
- newcount = count - other[elem]
- if newcount > 0:
- result[elem] = newcount
- for elem, count in other.items():
- if elem not in self and count < 0:
- result[elem] = 0 - count
- return result
- def __or__(self, other):
- '''Union is the maximum of value in either of the input counters.
- >>> Counter('abbb') | Counter('bcc')
- Counter({'b': 3, 'c': 2, 'a': 1})
- '''
- if not isinstance(other, Counter):
- return NotImplemented
- result = Counter()
- for elem, count in self.items():
- other_count = other[elem]
- newcount = other_count if count < other_count else count
- if newcount > 0:
- result[elem] = newcount
- for elem, count in other.items():
- if elem not in self and count > 0:
- result[elem] = count
- return result
- def __and__(self, other):
- ''' Intersection is the minimum of corresponding counts.
- >>> Counter('abbb') & Counter('bcc')
- Counter({'b': 1})
- '''
- if not isinstance(other, Counter):
- return NotImplemented
- result = Counter()
- for elem, count in self.items():
- other_count = other[elem]
- newcount = count if count < other_count else other_count
- if newcount > 0:
- result[elem] = newcount
- return result
- Counter
Counter
2、有序字典(orderedDict )
orderdDict是对字典类型的补充,他记住了字典元素添加的顺序
- o1 = collections.OrderedDict()
- o1['k1'] = 1
- o1['k2'] = 2
- o1['k3'] = 3
有序字典其实内部有一个列表,等以后去数据的时候,就会根据类表的顺序去取得。
- class OrderedDict(dict):
- 'Dictionary that remembers insertion order'
- # An inherited dict maps keys to values.
- # The inherited dict provides __getitem__, __len__, __contains__, and get.
- # The remaining methods are order-aware.
- # Big-O running times for all methods are the same as regular dictionaries.
- # The internal self.__map dict maps keys to links in a doubly linked list.
- # The circular doubly linked list starts and ends with a sentinel element.
- # The sentinel element never gets deleted (this simplifies the algorithm).
- # Each link is stored as a list of length three: [PREV, NEXT, KEY].
- def __init__(self, *args, **kwds):
- '''Initialize an ordered dictionary. The signature is the same as
- regular dictionaries, but keyword arguments are not recommended because
- their insertion order is arbitrary.
- '''
- if len(args) > 1:
- raise TypeError('expected at most 1 arguments, got %d' % len(args))
- try:
- self.__root
- except AttributeError:
- self.__root = root = [] # sentinel node
- root[:] = [root, root, None]
- self.__map = {}
- self.__update(*args, **kwds)
- def __setitem__(self, key, value, dict_setitem=dict.__setitem__):
- 'od.__setitem__(i, y) <==> od[i]=y'
- # Setting a new item creates a new link at the end of the linked list,
- # and the inherited dictionary is updated with the new key/value pair.
- if key not in self:
- root = self.__root
- last = root[0]
- last[1] = root[0] = self.__map[key] = [last, root, key]
- return dict_setitem(self, key, value)
- def __delitem__(self, key, dict_delitem=dict.__delitem__):
- 'od.__delitem__(y) <==> del od[y]'
- # Deleting an existing item uses self.__map to find the link which gets
- # removed by updating the links in the predecessor and successor nodes.
- dict_delitem(self, key)
- link_prev, link_next, _ = self.__map.pop(key)
- link_prev[1] = link_next # update link_prev[NEXT]
- link_next[0] = link_prev # update link_next[PREV]
- def __iter__(self):
- 'od.__iter__() <==> iter(od)'
- # Traverse the linked list in order.
- root = self.__root
- curr = root[1] # start at the first node
- while curr is not root:
- yield curr[2] # yield the curr[KEY]
- curr = curr[1] # move to next node
- def __reversed__(self):
- 'od.__reversed__() <==> reversed(od)'
- # Traverse the linked list in reverse order.
- root = self.__root
- curr = root[0] # start at the last node
- while curr is not root:
- yield curr[2] # yield the curr[KEY]
- curr = curr[0] # move to previous node
- def clear(self):
- 'od.clear() -> None. Remove all items from od.'
- root = self.__root
- root[:] = [root, root, None]
- self.__map.clear()
- dict.clear(self)
- # -- the following methods do not depend on the internal structure --
- def keys(self):
- 'od.keys() -> list of keys in od'
- return list(self)
- def values(self):
- 'od.values() -> list of values in od'
- return [self[key] for key in self]
- def items(self):
- 'od.items() -> list of (key, value) pairs in od'
- return [(key, self[key]) for key in self]
- def iterkeys(self):
- 'od.iterkeys() -> an iterator over the keys in od'
- return iter(self)
- def itervalues(self):
- 'od.itervalues -> an iterator over the values in od'
- for k in self:
- yield self[k]
- def iteritems(self):
- 'od.iteritems -> an iterator over the (key, value) pairs in od'
- for k in self:
- yield (k, self[k])
- update = MutableMapping.update
- __update = update # let subclasses override update without breaking __init__
- __marker = object()
- def pop(self, key, default=__marker):
- '''od.pop(k[,d]) -> v, remove specified key and return the corresponding
- value. If key is not found, d is returned if given, otherwise KeyError
- is raised.
- '''
- if key in self:
- result = self[key]
- del self[key]
- return result
- if default is self.__marker:
- raise KeyError(key)
- return default
- def setdefault(self, key, default=None):
- 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
- if key in self:
- return self[key]
- self[key] = default
- return default
- def popitem(self, last=True):
- '''od.popitem() -> (k, v), return and remove a (key, value) pair.
- Pairs are returned in LIFO order if last is true or FIFO order if false.
- '''
- if not self:
- raise KeyError('dictionary is empty')
- key = next(reversed(self) if last else iter(self))
- value = self.pop(key)
- return key, value
- def __repr__(self, _repr_running={}):
- 'od.__repr__() <==> repr(od)'
- call_key = id(self), _get_ident()
- if call_key in _repr_running:
- return '...'
- _repr_running[call_key] = 1
- try:
- if not self:
- return '%s()' % (self.__class__.__name__,)
- return '%s(%r)' % (self.__class__.__name__, self.items())
- finally:
- del _repr_running[call_key]
- def __reduce__(self):
- 'Return state information for pickling'
- items = [[k, self[k]] for k in self]
- inst_dict = vars(self).copy()
- for k in vars(OrderedDict()):
- inst_dict.pop(k, None)
- if inst_dict:
- return (self.__class__, (items,), inst_dict)
- return self.__class__, (items,)
- def copy(self):
- 'od.copy() -> a shallow copy of od'
- return self.__class__(self)
- @classmethod
- def fromkeys(cls, iterable, value=None):
- '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S.
- If not specified, the value defaults to None.
- '''
- self = cls()
- for key in iterable:
- self[key] = value
- return self
- def __eq__(self, other):
- '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
- while comparison to a regular mapping is order-insensitive.
- '''
- if isinstance(other, OrderedDict):
- return dict.__eq__(self, other) and all(_imap(_eq, self, other))
- return dict.__eq__(self, other)
- def __ne__(self, other):
- 'od.__ne__(y) <==> od!=y'
- return not self == other
- # -- the following methods support python 3.x style dictionary views --
- def viewkeys(self):
- "od.viewkeys() -> a set-like object providing a view on od's keys"
- return KeysView(self)
- def viewvalues(self):
- "od.viewvalues() -> an object providing a view on od's values"
- return ValuesView(self)
- def viewitems(self):
- "od.viewitems() -> a set-like object providing a view on od's items"
- return ItemsView(self)
OrderedDict
3、默认字典(defaultdict) ---默认所有的字典的value都为空的列表
也就是为你字典的值设置一个默认类型
my_dict = defaultdict(dict)----也可以自己设置字典里的values时字典
学前需求:
- 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
- 即: {'k1': 大于66 , 'k2': 小于66}
- values = [11, 22, 33,44,55,66,77,88,99,90]
- my_dict = {}
- for value in values:
- if value>66:
- if my_dict.has_key('k1'):
- my_dict['k1'].append(value)
- else:
- my_dict['k1'] = [value]
- else:
- if my_dict.has_key('k2'):
- my_dict['k2'].append(value)
- else:
- my_dict['k2'] = [value]
原生字典解决方法
- from collections import defaultdict
- values = [11, 22, 33,44,55,66,77,88,99,90]
- my_dict = defaultdict(list)
- for value in values:
- if value>66:
- my_dict['k1'].append(value)
- else:
- my_dict['k2'].append(value)
defaultdict字典解决方法
defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。
- class defaultdict(dict):
- """
- defaultdict(default_factory[, ...]) --> dict with default factory
- The default factory is called without arguments to produce
- a new value when a key is not present, in __getitem__ only.
- A defaultdict compares equal to a dict with the same items.
- All remaining arguments are treated the same as if they were
- passed to the dict constructor, including keyword arguments.
- """
- def copy(self): # real signature unknown; restored from __doc__
- """ D.copy() -> a shallow copy of D. """
- pass
- def __copy__(self, *args, **kwargs): # real signature unknown
- """ D.copy() -> a shallow copy of D. """
- pass
- def __getattribute__(self, name): # real signature unknown; restored from __doc__
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __init__(self, default_factory=None, **kwargs): # known case of _collections.defaultdict.__init__
- """
- defaultdict(default_factory[, ...]) --> dict with default factory
- The default factory is called without arguments to produce
- a new value when a key is not present, in __getitem__ only.
- A defaultdict compares equal to a dict with the same items.
- All remaining arguments are treated the same as if they were
- passed to the dict constructor, including keyword arguments.
- # (copied from class doc)
- """
- pass
- def __missing__(self, key): # real signature unknown; restored from __doc__
- """
- __missing__(key) # Called by __getitem__ for missing key; pseudo-code:
- if self.default_factory is None: raise KeyError((key,))
- self[key] = value = self.default_factory()
- return value
- """
- pass
- def __reduce__(self, *args, **kwargs): # real signature unknown
- """ Return state information for pickling. """
- pass
- def __repr__(self): # real signature unknown; restored from __doc__
- """ x.__repr__() <==> repr(x) """
- pass
- default_factory = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """Factory for default value called by __missing__()."""
defaultdict
4、可命名元组(namedtuple)
根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型。
- import collections
- Mytuple = collections.namedtuple('Mytuple',['x', 'y', 'z'])
如何使用:
1 首先要创建类:创建我自己的类,这个类是对我原生tuple
- Mytuple = collections.namedtuple('Mytuple',['x', 'y', 'z'])
2 根据类创建对象 new = Mytuple(1,2)
3 使用对象 new =====Mytuple(x=1,y=2) n.x n.y
- class Mytuple(__builtin__.tuple)---对tuple进行扩展,也叫作基础
- | Mytuple(x, y)
- |
- | Method resolution order:
- | Mytuple
- | __builtin__.tuple
- | __builtin__.object
- |
- | Methods defined here:
- |
- | __getnewargs__(self)
- | Return self as a plain tuple. Used by copy and pickle.
- |
- | __getstate__(self)
- | Exclude the OrderedDict from pickling
- |
- | __repr__(self)
- | Return a nicely formatted representation string
- |
- | _asdict(self)
- | Return a new OrderedDict which maps field names to their values
- |
- | _replace(_self, **kwds)
- | Return a new Mytuple object replacing specified fields with new values
- |
- | ----------------------------------------------------------------------
- | Class methods defined here:
- |
- | _make(cls, iterable, new=<built-in method __new__ of type object>, len=<built-in function len>) from __builtin__.type
- | Make a new Mytuple object from a sequence or iterable
- |
- | ----------------------------------------------------------------------
- | Static methods defined here:
- |
- | __new__(_cls, x, y)
- | Create new instance of Mytuple(x, y)
- |
- | ----------------------------------------------------------------------
- | Data descriptors defined here:
- |
- | __dict__
- | Return a new OrderedDict which maps field names to their values
- |
- | x
- | Alias for field number 0
- |
- | y
- | Alias for field number 1
- |
- | ----------------------------------------------------------------------
- | Data and other attributes defined here:
- |
- | _fields = ('x', 'y')
- |
- | ----------------------------------------------------------------------
- | Methods inherited from __builtin__.tuple:
- |
- | __add__(...)
- | x.__add__(y) <==> x+y
- |
- | __contains__(...)
- | x.__contains__(y) <==> y in x
- |
- | __eq__(...)
- | x.__eq__(y) <==> x==y
- |
- | __ge__(...)
- | x.__ge__(y) <==> x>=y
- |
- | __getattribute__(...)
- | x.__getattribute__('name') <==> x.name
- |
- | __getitem__(...)
- | x.__getitem__(y) <==> x[y]
- |
- | __getslice__(...)
- | x.__getslice__(i, j) <==> x[i:j]
- |
- | Use of negative indices is not supported.
- |
- | __gt__(...)
- | x.__gt__(y) <==> x>y
- |
- | __hash__(...)
- | x.__hash__() <==> hash(x)
- |
- | __iter__(...)
- | x.__iter__() <==> iter(x)
- |
- | __le__(...)
- | x.__le__(y) <==> x<=y
- |
- | __len__(...)
- | x.__len__() <==> len(x)
- |
- | __lt__(...)
- | x.__lt__(y) <==> x<y
- |
- | __mul__(...)
- | x.__mul__(n) <==> x*n
- |
- | __ne__(...)
- | x.__ne__(y) <==> x!=y
- |
- | __rmul__(...)
- | x.__rmul__(n) <==> n*x
- |
- | __sizeof__(...)
- | T.__sizeof__() -- size of T in memory, in bytes
- |
- | count(...)
- | T.count(value) -> integer -- return number of occurrences of value
- |
- | index(...)
- | T.index(value, [start, [stop]]) -> integer -- return first index of value.
- | Raises ValueError if the value is not present.
- Mytuple
Mytuple
5、双向队列(deque)---任意从两边插入和取走元素
一个线程安全的双向队列:类似于加一个锁,防止冲突。
- class deque(object):
- """
- deque([iterable[, maxlen]]) --> deque object
- Build an ordered collection with optimized access from its endpoints.
- """
- def append(self, *args, **kwargs): # real signature unknown
- """ Add an element to the right side of the deque. """
- pass
- def appendleft(self, *args, **kwargs): # real signature unknown
- """ Add an element to the left side of the deque. """
- pass
- def clear(self, *args, **kwargs): # real signature unknown
- """ Remove all elements from the deque. """
- pass
- def count(self, value): # real signature unknown; restored from __doc__
- """ D.count(value) -> integer -- return number of occurrences of value """
- return 0
- def extend(self, *args, **kwargs): # real signature unknown
- """ Extend the right side of the deque with elements from the iterable """
- pass
- def extendleft(self, *args, **kwargs): # real signature unknown
- """ Extend the left side of the deque with elements from the iterable """
- pass
- def pop(self, *args, **kwargs): # real signature unknown
- """ Remove and return the rightmost element. """
- pass ###在队列中取最右边的值,并在队列中删除这个值
- def popleft(self, *args, **kwargs): # real signature unknown
- """ Remove and return the leftmost element. """
- pass
- def remove(self, value): # real signature unknown; restored from __doc__
- """ D.remove(value) -- remove first occurrence of value. """
- pass
- def reverse(self): # real signature unknown; restored from __doc__
- """ D.reverse() -- reverse *IN PLACE* """
- pass
- def rotate(self, *args, **kwargs): # real signature unknown
- """ Rotate the deque n steps to the right (default n=1). If n is negative, rotates left. """
- pass
- def __copy__(self, *args, **kwargs): # real signature unknown
- """ Return a shallow copy of a deque. """
- pass
- def __delitem__(self, y): # real signature unknown; restored from __doc__
- """ x.__delitem__(y) <==> del x[y] """
- pass
- def __eq__(self, y): # real signature unknown; restored from __doc__
- """ x.__eq__(y) <==> x==y """
- pass
- def __getattribute__(self, name): # real signature unknown; restored from __doc__
- """ x.__getattribute__('name') <==> x.name """
- pass
- def __getitem__(self, y): # real signature unknown; restored from __doc__
- """ x.__getitem__(y) <==> x[y] """
- pass
- def __ge__(self, y): # real signature unknown; restored from __doc__
- """ x.__ge__(y) <==> x>=y """
- pass
- def __gt__(self, y): # real signature unknown; restored from __doc__
- """ x.__gt__(y) <==> x>y """
- pass
- def __iadd__(self, y): # real signature unknown; restored from __doc__
- """ x.__iadd__(y) <==> x+=y """
- pass
- def __init__(self, iterable=(), maxlen=None): # known case of _collections.deque.__init__
- """
- deque([iterable[, maxlen]]) --> deque object
- Build an ordered collection with optimized access from its endpoints.
- # (copied from class doc)
- """
- pass
- def __iter__(self): # real signature unknown; restored from __doc__
- """ x.__iter__() <==> iter(x) """
- pass
- def __len__(self): # real signature unknown; restored from __doc__
- """ x.__len__() <==> len(x) """
- pass
- def __le__(self, y): # real signature unknown; restored from __doc__
- """ x.__le__(y) <==> x<=y """
- pass
- def __lt__(self, y): # real signature unknown; restored from __doc__
- """ x.__lt__(y) <==> x<y """
- pass
- @staticmethod # known case of __new__
- def __new__(S, *more): # real signature unknown; restored from __doc__
- """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
- pass
- def __ne__(self, y): # real signature unknown; restored from __doc__
- """ x.__ne__(y) <==> x!=y """
- pass
- def __reduce__(self, *args, **kwargs): # real signature unknown
- """ Return state information for pickling. """
- pass
- def __repr__(self): # real signature unknown; restored from __doc__
- """ x.__repr__() <==> repr(x) """
- pass
- def __reversed__(self): # real signature unknown; restored from __doc__
- """ D.__reversed__() -- return a reverse iterator over the deque """
- pass
- def __setitem__(self, i, y): # real signature unknown; restored from __doc__
- """ x.__setitem__(i, y) <==> x[i]=y """
- pass
- def __sizeof__(self): # real signature unknown; restored from __doc__
- """ D.__sizeof__() -- size of D in memory, in bytes """
- pass
- maxlen = property(lambda self: object(), lambda self, v: None, lambda self: None) # default
- """maximum size of a deque or None if unbounded"""
- __hash__ = None
deque
注:既然有双向队列,也有单项队列(先进先出 FIFO )
单项队列,在queue这个类中
引用: import queue
创建 q = Queue.Queue(10) #队列长度10
存入: q.put(1)
提取:q.get()
- class Queue:
- """Create a queue object with a given maximum size.
- If maxsize is <= 0, the queue size is infinite.
- """
- def __init__(self, maxsize=0):
- self.maxsize = maxsize
- self._init(maxsize)
- # mutex must be held whenever the queue is mutating. All methods
- # that acquire mutex must release it before returning. mutex
- # is shared between the three conditions, so acquiring and
- # releasing the conditions also acquires and releases mutex.
- self.mutex = _threading.Lock()
- # Notify not_empty whenever an item is added to the queue; a
- # thread waiting to get is notified then.
- self.not_empty = _threading.Condition(self.mutex)
- # Notify not_full whenever an item is removed from the queue;
- # a thread waiting to put is notified then.
- self.not_full = _threading.Condition(self.mutex)
- # Notify all_tasks_done whenever the number of unfinished tasks
- # drops to zero; thread waiting to join() is notified to resume
- self.all_tasks_done = _threading.Condition(self.mutex)
- self.unfinished_tasks = 0
- def task_done(self):
- """Indicate that a formerly enqueued task is complete.
- Used by Queue consumer threads. For each get() used to fetch a task,
- a subsequent call to task_done() tells the queue that the processing
- on the task is complete.
- If a join() is currently blocking, it will resume when all items
- have been processed (meaning that a task_done() call was received
- for every item that had been put() into the queue).
- Raises a ValueError if called more times than there were items
- placed in the queue.
- """
- self.all_tasks_done.acquire()
- try:
- unfinished = self.unfinished_tasks - 1
- if unfinished <= 0:
- if unfinished < 0:
- raise ValueError('task_done() called too many times')
- self.all_tasks_done.notify_all()
- self.unfinished_tasks = unfinished
- finally:
- self.all_tasks_done.release()
- def join(self):
- """Blocks until all items in the Queue have been gotten and processed.
- The count of unfinished tasks goes up whenever an item is added to the
- queue. The count goes down whenever a consumer thread calls task_done()
- to indicate the item was retrieved and all work on it is complete.
- When the count of unfinished tasks drops to zero, join() unblocks.
- """
- self.all_tasks_done.acquire()
- try:
- while self.unfinished_tasks:
- self.all_tasks_done.wait()
- finally:
- self.all_tasks_done.release()
- def qsize(self):
- """Return the approximate size of the queue (not reliable!)."""
- self.mutex.acquire()
- n = self._qsize()
- self.mutex.release()
- return n
- def empty(self):
- """Return True if the queue is empty, False otherwise (not reliable!)."""
- self.mutex.acquire()
- n = not self._qsize()
- self.mutex.release()
- return n
- def full(self):
- """Return True if the queue is full, False otherwise (not reliable!)."""
- self.mutex.acquire()
- n = 0 < self.maxsize == self._qsize()
- self.mutex.release()
- return n
- def put(self, item, block=True, timeout=None):
- """Put an item into the queue.
- If optional args 'block' is true and 'timeout' is None (the default),
- block if necessary until a free slot is available. If 'timeout' is
- a non-negative number, it blocks at most 'timeout' seconds and raises
- the Full exception if no free slot was available within that time.
- Otherwise ('block' is false), put an item on the queue if a free slot
- is immediately available, else raise the Full exception ('timeout'
- is ignored in that case).
- """
- self.not_full.acquire()
- try:
- if self.maxsize > 0:
- if not block:
- if self._qsize() == self.maxsize:
- raise Full
- elif timeout is None:
- while self._qsize() == self.maxsize:
- self.not_full.wait()
- elif timeout < 0:
- raise ValueError("'timeout' must be a non-negative number")
- else:
- endtime = _time() + timeout
- while self._qsize() == self.maxsize:
- remaining = endtime - _time()
- if remaining <= 0.0:
- raise Full
- self.not_full.wait(remaining)
- self._put(item)
- self.unfinished_tasks += 1
- self.not_empty.notify()
- finally:
- self.not_full.release()
- def put_nowait(self, item):
- """Put an item into the queue without blocking.
- Only enqueue the item if a free slot is immediately available.
- Otherwise raise the Full exception.
- """
- return self.put(item, False)
- def get(self, block=True, timeout=None):
- """Remove and return an item from the queue.
- If optional args 'block' is true and 'timeout' is None (the default),
- block if necessary until an item is available. If 'timeout' is
- a non-negative number, it blocks at most 'timeout' seconds and raises
- the Empty exception if no item was available within that time.
- Otherwise ('block' is false), return an item if one is immediately
- available, else raise the Empty exception ('timeout' is ignored
- in that case).
- """
- self.not_empty.acquire()
- try:
- if not block:
- if not self._qsize():
- raise Empty
- elif timeout is None:
- while not self._qsize():
- self.not_empty.wait()
- elif timeout < 0:
- raise ValueError("'timeout' must be a non-negative number")
- else:
- endtime = _time() + timeout
- while not self._qsize():
- remaining = endtime - _time()
- if remaining <= 0.0:
- raise Empty
- self.not_empty.wait(remaining)
- item = self._get()
- self.not_full.notify()
- return item
- finally:
- self.not_empty.release()
- def get_nowait(self):
- """Remove and return an item from the queue without blocking.
- Only get an item if one is immediately available. Otherwise
- raise the Empty exception.
- """
- return self.get(False)
- # Override these methods to implement other queue organizations
- # (e.g. stack or priority queue).
- # These will only be called with appropriate locks held
- # Initialize the queue representation
- def _init(self, maxsize):
- self.queue = deque()
- def _qsize(self, len=len):
- return len(self.queue)
- # Put a new item in the queue
- def _put(self, item):
- self.queue.append(item)
- # Get an item from the queue
- def _get(self):
- return self.queue.popleft()
Queue.Queue
队列:先进先出(fifo)
栈:像弹夹一样,子弹先进去后出来。
四.标准数据类型特性总结
按存值个数区分
标量/原子类型 | 数字,字符串 |
容器类型 | 列表,元组,字典 |
按可变不可变区分
可变 | 列表,字典 |
不可变 | 数字,字符串,元组 |
按访问顺序区分
直接访问 | 数字 |
顺序访问(序列类型) | 字符串,列表,元组 |
key值访问(映射类型) |
字典 |
迭代器和生成器
一、迭代器
对于Python 列表的 for 循环,他的内部原理:查看下一个元素是否存在,如果存在,则取出,如果不存在,则报异常 StopIteration。(python内部对异常已处理)
- class listiterator(object)
- | Methods defined here:
- |
- | __getattribute__(...)
- | x.__getattribute__('name') <==> x.name
- |
- | __iter__(...)
- | x.__iter__() <==> iter(x)
- |
- | __length_hint__(...)
- | Private method returning an estimate of len(list(it)).
- |
- | next(...)####必须要有这个方法,才能循环取值
- | x.next() -> the next value, or raise StopIteration
二、生成器
类似于数据库中的线程池一样,我先不提供链接,等有访问过来,我在生产连接,也就是什么时候用我就什么时候产生。
生成器内部基于yield创建,即:对于生成器只有使用时才创建,从而不避免内存浪费
range不是生成器 和 xrange 是生成器
readlines不是生成器 和 xreadlines 是生成器
- >>> print range(10)
- [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- >>> print xrange(10)
- xrange(10)
通过range循环一个列表---下标式循环
- li = [11,22,33,44,55,66]
- for i in range(6):
- print li[i]
- ........
- ......
- 11
- 22
- 33
- 44
- 55
- 66
下标循环 len(li)
- 练习:<br>有如下列表:
- [13, 22, 6, 99, 11]
- 请按照一下规则计算:
- 13 和 22 比较,将大的值放在右侧,即:[13, 22, 6, 99, 11]
- 22 和 6 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
- 22 和 99 比较,将大的值放在右侧,即:[13, 6, 22, 99, 11]
- 99 和 42 比较,将大的值放在右侧,即:[13, 6, 22, 11, 99,]
- 13 和 6 比较,将大的值放在右侧,即:[6, 13, 22, 11, 99,]
- 这其实就是一个冒泡算法
li = [13, 22, 6, 99, 11]- for m in range(len(li)-1):
- for n in range(m+1, len(li)):
- if li[m]> li[n]:
- temp = li[n]
- li[n] = li[m]
- li[m] = temp
- print li
深浅拷贝
为什么要拷贝?
当进行修改时,想要保留原来的数据和修改后的数据
数字字符串 和 集合 在修改时的差异? (深浅拷贝不同的终极原因)
在修改数据时:
数字字符串:在内存中新建一份数据
集合:修改内存中的同一份数据
python第二天基础1-1的更多相关文章
- selenium webdriver (python) 第二版
前言 对于大多软件测试人员来讲缺乏编程经验(指项目开发经验,大学的C 语言算很基础的编程知识)一直是难以逾越的鸿沟,并不是说测试比开发人员智商低,是国内的大多测试岗位是功能测试为主,在工作时间中,我们 ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Day1 Python 介绍及基础
******************本文目录******************一.Pyhon基本介绍 1.Why Python? 2. Python 是一门什么样的语言? 3.Python的优缺点: ...
- python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)
python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程 并行与并发 同步与异步 阻塞与非阻塞 CPU密集型与IO密集型 线程与进程 进 ...
- 知了课堂 Python Flask零基础 笔记整理
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
- 孤荷凌寒自学python第二十九天python的datetime.time模块
孤荷凌寒自学python第二十九天python的datetime.time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.time模块是专门用来表示纯时间部分的类. ...
- 孤荷凌寒自学python第二十八天python的datetime.date模块
孤荷凌寒自学python第二十八天python的datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.toordinal() 此方法将访问从公元1年1月1日至当 ...
- 孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块
孤荷凌寒自学python第二十七天python的datetime模块及初识datetime.date模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.datetime模块 dateti ...
- 孤荷凌寒自学python第二十六天python的time模块的相关方法
孤荷凌寒自学python第二十六天python的time模块的相关方法 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 要使用time模块的相关方法,必须在文件顶端引用: import tim ...
随机推荐
- splinter(python操作浏览器魔魁啊)
from splinter import Browser def main(): browser = Browser() browser.visit('http://google.com') brow ...
- 在线api地址
J2SE1.7英文api地址: http://download.oracle.com/javase/7/docs/api/J2SE1.6英文api地址: http://download.oracle ...
- Makefile <网络转载>
陈皓 (CSDN)概述——什 么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和 professional的 ...
- 打造一个有感觉的vim(四)
今天要介绍的VIM插件的名字叫做surround,这个插件的主要作用是将一个VIM的tex-objects(文本对象)添加或者取消包裹(单引号,双引号,XML标签等等)下载地址如下:https://g ...
- IOS学习之路--OC的基础知识
1.项目经验 2.基础问题 3.指南认识 4.解决思路 ios开发三大块: 1.Oc基础 2.CocoaTouch框架 3.Xcode使用 -------------------- CocoaTouc ...
- c++多态
#include <cstdio> using namespace std; class Base { public: virtual void A() { puts("Base ...
- 更新lispbox中的ccl和slime版本
首先C-x C-f然后输入~,找到.emacs文件,根据slime官方文档说明的添加如下代码到文件末尾,重启一下emacs,slime就编译好了,然后这段代码就可以删除.否则每次启动emacs就算不用 ...
- java规范(二)
常量命名 不允许使用任何魔法值(未定义的常量)直接出现在代码中 反例: String key="Id#taobao_"+tradeId: cache.put(key, value) ...
- List<Object> to JSONArray一
package com.beijxing.TestMain; import java.util.ArrayList; import java.util.List; import com.beijxin ...
- 关于$.fn.*的使用
这个案例是我封装了一个树形插件,也是别人写好的,但是对于我来说调用起来不是很方便,就对他的初始化方法又进行了一次封装,总的来说显得比较麻烦,不过我是新手嘛 DEMO 封装一个jcTree的方法$.fn ...