python: enum列舉的實現
從c系語言過來用python,好不容易適應了寫**不打花括號,突然有一天發現它居然木有列舉……於是stackoverflow了一把,發現神人的列舉(enum)實現到處都是,於是漢化總結過來。
如果是新版python使用者(python 3.4 with pep 435):
from enum import enum
animal = enum('animal', 'ant bee cat dog')
or
class animals(enum):
ant = 1
bee = 2
cat = 3
dog = 4
舊版python使用者可以充分發揮動態語言的優越性來構造列舉,有簡單的:
def enum(**enums):
return type('enum', (), enums)
numbers = enum(one=1, two=2, three='three')
# numbers.one == 1, numbers.two == 2 and numbers.three == 'three'
有複雜的:
def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
return type('enum', (), enums)
numbers = enum('zero', 'one', 'two')
# numbers.zero == 0 and numbers.one == 1
有帶值到名稱對映的:
有用set實現的:
class enum(set):
def __getattr__(self, name):
if name in self:
return name
raise attributeerror
animals = enum(["dog", "cat", "horse"])
print animals.dog
有用range實現的:
dog, cat, rabbit = range(3)
# or
class stationary:
(pen, pencil, eraser) = range(0, 3)
print stationary.pen
有用tuple實現的:
class enum(tuple): __getattr__ = tuple.index
state = enum(['unclaimed', 'claimed'])
print state.claimed
有用namedtuple實現的:
from collections import namedtuple
def enum(*keys):
return namedtuple('enum', keys)(*keys)
myenum = enum('foo', 'bar', 'baz')
# 帶字元數字對映的,像c/c++
def enum(*keys):
return namedtuple('enum', keys)(*range(len(keys)))
# 帶字典對映的,可以對映出各種型別,不侷限於數字
def enum(**kwargs):
return namedtuple('enum', kwargs.keys())(*kwargs.values())
python: enum列舉的實現 MPI 列舉排序實現
dfdfdfssfd.cpp 定義控制台應用程式的入口點。include stdafx.h include stdlib.h include stdio.h include mpi.h void countrank int rank,int perlen,int len,int p,int tota...
可空列舉的實現方法
可空列舉 在使用列舉的時候的,經常希望可以對列舉賦值為null,或者清空列舉值。但是常用的列舉,就是固定的幾項。而且不能對值型別賦值為null。如何來實現可空列舉?要求保留到資料庫中的值,需要為null。這種情況在業務開發中經常出現。儘管問題較小,但是可以 下解決方案,找到一種最優解。方法1 將儲存...
列舉的其他應用 實現介面
列舉可以跟其他類一樣實現介面,但是要求實現介面的時候,要求列舉中的每個物件都必須單獨覆寫好介面中的抽象方法。package 類集 inte ce print enum color implements print green blue public abstract string getcolor ...