导航:首页 > 编程语言 > python嵌套枚举

python嵌套枚举

发布时间:2022-05-28 13:10:53

A. python的枚举实现中`type,enums`是什么意思

type 这种三个参数的调用,其结果是返回一个“类”,就跟用 class 定义是一样的。
所以, type('Enum', (), {'ONE': 1, 'TWO': 2}) 就相当于:

class Enum(object):
ONE = 1
TWO = 2

B. python 枚举类型什么意思

枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、状态等。Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通过很多方法来实现它,例如字典、类等:

WEEKDAY = {

'MON': 1,

'TUS': 2,

'WEN': 3,

'THU': 4,

'FRI': 5

}

class Color:

RED = 0

GREEN = 1

BLUE = 2

上面两种方法可以看做是简单的枚举类型的实现,如果只在局部范围内用到了这样的枚举变量是没有问题的,但问题在于它们都是可变的(mutable),也就是说可以在其它地方被修改从而影响其正常使用:

WEEKDAY['MON'] = WEEKDAY['FRI']

print(WEEKDAY)

{'FRI': 5, 'TUS': 2, 'MON': 5, 'WEN': 3, 'THU': 4}

通过类定义的枚举甚至可以实例化,变得不伦不类:

c = Color()

print(c.RED)

Color.RED = 2

print(c.RED)

0

2

当然也可以使用不可变类型(immutable),例如元组,但是这样就失去了枚举类型的本意,将标签退化为无意义的变量:

COLOR = ('R', 'G', 'B')

print(COLOR[0], COLOR[1], COLOR[2])

R G B

为了提供更好的解决方案,Python 通过 PEP 435 在 3.4 版本中添加了 enum 标准库,3.4 之前的版本也可以通过 pip install enum 下载兼容支持的库。enum 提供了 Enum/IntEnum/unique 三个工具,用法也非常简单,可以通过继承 Enum/IntEnum 定义枚举类型,其中 IntEnum 限定枚举成员必须为(或可以转化为)整数类型,而 unique 方法可以作为修饰器限定枚举成员的值不可重复:

from enum import Enum, IntEnum, uniquetry:

@unique

class WEEKDAY(Enum):

MON = 1

TUS = 2

WEN = 3

THU = 4

FRI = 1

except ValueError as e:

print(e)

plicate values found in : FRI -> MON

try:

class Color(IntEnum):

RED = 0

GREEN = 1

BLUE = 'b'

except ValueError as e:

print(e)

invalid literal for int() with base 10: 'b'

C. python 怎么通过枚举的值

从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

有带值到名称映射的:

def enum(*sequential, **named):
enums = dict(zip(sequential, range(len(sequential))), **named)
reverse = dict((value, key) for key, value in enums.iteritems())
enums['reverse_mapping'] = reverse
return type('Enum', (), enums)

# Numbers.reverse_mapping['three'] == 'THREE'

有用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())

D. 命名参数可以与Python枚举一起使用吗

虽然不能像枚举那样使用命名参数,但是可以通过namedtuple混音:
from collections import namedtuple
from enum import Enum
Body = namedtuple("Body", ["mass", "radius"])
class Planet(Body, Enum):
MERCURY = Body(mass=3.303e+23, radius=2.4397e6)
VENUS = Body(mass=4.869e+24, radius=6.0518e6)
EARTH = Body(mass=5.976e+24, radius=3.3972e6)
# ... etc.
你不必写一个__init__方法。
示例使用:
>>> Planet.MERCURY
<Planet.MERCURY: Body(mass=3.303e+23, radius=2439700.0)>
>>> Planet.EARTH.mass
5.976e+24
>>> Planet.VENUS.radius
6051800.0

E. 请教Python中枚举线程的问题

python提供了两个模块来实现多线程thread 和threading ,thread 有一些缺点,在threading 得到了弥补,为了不浪费你和时间,所以我们直接学习threading 就可以了。

F. 关于python 函数嵌套

因为最后的那句return nested。

tester()()会自动调用它的返回值,而此时的返回值为nested,即def nested()这个函数,所以自然而然执行到了里面的print语句。
你可以试试把最后那就return nested改成其他的如return nestedxxx,再tester()()时就会报错了。
另外,在python里对于方法ester和nested是没有tester().nested()这种用法的,所以这样输入肯定报错的,如果ester和nested是类(class)的话才有这种写法。

希望对你有所帮助~~

G. python有没有类似枚举类型的

Python 3.4新增了enum模块。
如果不是Python 3.4,可以看看pypi上的enum34模块,好像和3.4的enum模块一样。

H. python列表的嵌套该怎麽理解

这个List Comprehension相当于一个嵌套循环,外层循环变量是i,内层循环变量是row。
把列表的外层循环改为普通for循环的话,等价于:
temp_list = []
for i in range(4):
temp_list.append([row[i] for row in matrix])
把列表的两层循环都改为普通for循环写法,大致相当于:
temp_list = []
for i in range(4):
temp_list.append([])
for row in matrix:
temp_list[-1].append(row[i])

I. 关于Python列表嵌套问题

这个叫元组的拆包或解包。
list1迭代返回的是元组,那么for循环内就是
m,n = ('c',1)
m,n = ('Python',2)
...

J. 请教python列表嵌套问题

可以这样写:

l=[{'name':'张三','性别':'男','年龄':12,'成绩':60},{'name':'张三','性别':'女','年龄':12,'成绩':80},{'name':'李四','性别':'男','年龄':13,'成绩':75},{'name':'王五','性别':'男','年龄':12,'成绩':20}]

l=list(filter(lambda d:d['name']=='张三',l))

print(l)

这是运行截图:

阅读全文

与python嵌套枚举相关的资料

热点内容
word转换成pdf转换器免费下载 浏览:608
群体智能基本算法 浏览:370
可编程软件分为哪两种 浏览:340
格林什么app可以看 浏览:697
飞卢app仙侠热卖推荐怎么样 浏览:722
飞秋上传文件到共享文件夹 浏览:691
服务器的共享文件夹如何访问 浏览:232
复盛螺杆压缩机讲解 浏览:332
柱在基础插筋需要加密吗 浏览:80
51单片机中断寄存器 浏览:65
压缩文件后有病毒怎么办 浏览:618
苹果ipad怎么登安卓王者账号 浏览:862
街头足球服务器已满是什么意思 浏览:462
androidspeex回音消除 浏览:133
加密会议什么意思 浏览:34
ubuntu命令行联网 浏览:7
37选7中奖概率及算法 浏览:593
加密狗哪个版本好 浏览:619
cisco命令手册 浏览:502
omp算法c 浏览:129