当前位置:首页 » 编程语言 » python枚举

python枚举

发布时间: 2022-02-09 17:34:04

1. 请教python中枚举线程的问题

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

2. 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())

3. 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'

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

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

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

5. python 有宏定义,或者枚举么

如果那样就如你所说搞一个"头文件",不过在python中可是一个模块文件,里面定义了常量(其实还是变量):如叫constants.pycomplete=12fail=13使用时import
constants
或from
constants
import
*这样就行了。

6. python里面enumerate是枚举吗

更改的是list元素,name变量并没有改变,你print的是name,可以print names[index]

7. 命名参数可以与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

8. python 利用枚举法和二分法求解一元三次方程

第一,用F是为了让你不要搞混,如果错了方便修改
第二 ..{$N+} 是用{}括起来的,在pascal里不进行运行,你用pascal界面打开会发现字的颜色是灰的,这说明了这只起到一个标示作用,去掉也可以
第三 program是用来定义文件名的,在pascal书里有,可以去掉,直接打var

9. python win32api 函数RegEnumValue 枚举注册表报错,错误代码234

具体的代码贴出来看看,你这谁知道什么错误。

10. 如何按行枚举 python enumerate

enumerate()说明

enumerate()是python的内置函数
enumerate在字典上是枚举、列举的意思
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
enumerate多用于在for循环中得到计数
例如对于一个seq,得到:

(0, seq[0]), (1, seq[1]), (2, seq[2])

1
1
enumerate()返回的是一个enumerate对象,例如:

enumerate()使用

如果对一个列表,既要遍历索引又要遍历元素时,首先可以这样写:
list1 = ["这", "是", "一个", "测试"]
for i in range (len(list1)):
print i ,list1[i]123123

上述方法有些累赘,利用enumerate()会更加直接和优美:
list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1):
print index, item
>>>
0 这
1 是
2 一个
3 测试1234567812345678

enumerate还可以接收第二个参数,用于指定索引起始值,如:
list1 = ["这", "是", "一个", "测试"]
for index, item in enumerate(list1, 1):
print index, item
>>>
1 这
2 是
3 一个
4 测试1234567812345678

补充

如果要统计文件的行数,可以这样写:
count = len(open(filepath, 'r').readlines())11

这种方法简单,但是可能比较慢,当文件比较大时甚至不能工作。

可以利用enumerate():
count = -1
for index, line in enumerate(open(filepath,'r')):
count += 1

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:333
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:376
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:610
java用什么软件写 发布:2025-05-18 03:56:19 浏览:31
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:941
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:739
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:802
网卡访问 发布:2025-05-18 03:35:04 浏览:510
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371