欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python中的枚舉函數(shù),Python枚舉法

python 枚舉類型什么意思

枚舉類型可以看作是一種標(biāo)簽或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期、月份、狀態(tài)等。Python 的原生類型(Built-in types)里并沒有專門的枚舉類型,但是我們可以通過很多方法來實(shí)現(xiàn)它,例如字典、類等:

創(chuàng)新互聯(lián)公司長期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為石家莊企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站制作,石家莊網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

WEEKDAY = {

'MON': 1,

'TUS': 2,

'WEN': 3,

'THU': 4,

'FRI': 5

}

class Color:

RED = 0

GREEN = 1

BLUE = 2

上面兩種方法可以看做是簡單的枚舉類型的實(shí)現(xiàn),如果只在局部范圍內(nèi)用到了這樣的枚舉變量是沒有問題的,但問題在于它們都是可變的(mutable),也就是說可以在其它地方被修改從而影響其正常使用:

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

print(WEEKDAY)

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

通過類定義的枚舉甚至可以實(shí)例化,變得不倫不類:

c = Color()

print(c.RED)

Color.RED = 2

print(c.RED)

2

當(dāng)然也可以使用不可變類型(immutable),例如元組,但是這樣就失去了枚舉類型的本意,將標(biāo)簽退化為無意義的變量:

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

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

R G B

為了提供更好的解決方案,Python 通過 PEP 435 在 3.4 版本中添加了 enum 標(biāo)準(zhǔn)庫,3.4 之前的版本也可以通過 pip install enum 下載兼容支持的庫。enum 提供了 Enum/IntEnum/unique 三個(gè)工具,用法也非常簡單,可以通過繼承 Enum/IntEnum 定義枚舉類型,其中 IntEnum 限定枚舉成員必須為(或可以轉(zhuǎn)化為)整數(shù)類型,而 unique 方法可以作為修飾器限定枚舉成員的值不可重復(fù):

from enum import Enum, IntEnum, unique

try:

@unique

class WEEKDAY(Enum):

MON = 1

TUS = 2

WEN = 3

THU = 4

FRI = 1

except ValueError as e:

print(e)

duplicate 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'

python中l(wèi)s【】【】是什么意思?

【CSDN 編者按】Python 風(fēng)頭正盛,未來一段時(shí)間內(nèi)想必也會(huì)是熱門編程語言之一。因此,熟練掌握 Python 對(duì)開發(fā)者來說極其重要,說不定能給作為開發(fā)者的你帶來意想不到的財(cái)富。

作者 | Sebastian Opa?czyński

編譯 | 彎月 責(zé)編 | 張文

出品 | CSDN(ID:CSDNnews)

在本文中,我們來看一看日常工作中經(jīng)常使用的一些 Python 小技巧。

集合

開發(fā)人員常常忘記 Python 也有集合數(shù)據(jù)類型,大家都喜歡使用列表處理一切。

集合(set)是什么?簡單來說就是:集合是一組無序事物的匯集,不包含重復(fù)元素。

如果你熟練掌握集合及其邏輯,那么很多問題都可以迎刃而解。舉個(gè)例子,如何獲取一個(gè)單詞中出現(xiàn)的字母?

myword = "NanananaBatman"set(myword){'N', 'm', 'n', 'B', 'a', 't'}

就這么簡單,問題解決了,這個(gè)例子就來自 Python 的官方文檔,大可不必過于驚訝。

再舉一個(gè)例子,如何獲取一個(gè)列表的各個(gè)元素,且不重復(fù)?

# first you can easily change set to list and other way aroundmylist = ["a", "b", "c","c"]# let's make a set out of itmyset = set(mylist)# myset will be:{'a', 'b', 'c'}# and, it's already iterable so you can do:for element in myset:print(element)# but you can also convert it to list again:mynewlist = list(myset)# and mynewlist will be:['a', 'b', 'c']

我們可以看到,“c”元素不再重復(fù)出現(xiàn)了。只有一個(gè)地方你需要注意,mylist 與 mynewlist 之間的元素順序可能會(huì)有所不同:

mylist = ["c", "c", "a","b"]mynewlist = list(set(mylist))# mynewlist is:['a', 'b', 'c']

可以看出,兩個(gè)列表的元素順序不同。

下面,我們來進(jìn)一步深入。

假設(shè)某些實(shí)體之間有一對(duì)多的關(guān)系,舉個(gè)更加具體的例子:用戶與權(quán)限。通常,一個(gè)用戶可以擁有多個(gè)權(quán)限。現(xiàn)在假設(shè)某人想要修改多個(gè)權(quán)限,即同時(shí)添加和刪除某些權(quán)限,應(yīng)當(dāng)如何解決這個(gè)問題?

# this is the set of permissions before change;original_permission_set = {"is_admin","can_post_entry", "can_edit_entry", "can_view_settings"}# this is new set of permissions;new_permission_set = {"can_edit_settings","is_member", "can_view_entry", "can_edit_entry"}# now permissions to add will be:new_permission_set.difference(original_permission_set)# which will result:{'can_edit_settings', 'can_view_entry', 'is_member'}# As you can see can_edit_entry is in both sets; so we do notneed# to worry about handling it# now permissions to remove will be:original_permission_set.difference(new_permission_set)# which will result:{'is_admin', 'can_view_settings', 'can_post_entry'}# and basically it's also true; we switched admin to member, andadd# more permission on settings; and removed the post_entrypermission

總的來說,不要害怕使用集合,它們能幫助你解決很多問題,更多詳情,請(qǐng)參考 Python 官方文檔。

日歷

當(dāng)開發(fā)與日期和時(shí)間有關(guān)的功能時(shí),有些信息可能非常重要,比如某一年的這個(gè)月有多少天。這個(gè)問題看似簡單,但是我相信日期和時(shí)間是一個(gè)非常有難度的話題,而且我覺得日歷的實(shí)現(xiàn)問題非常多,簡直就是噩夢(mèng),因?yàn)槟阈枰紤]大量的極端情況。

那么,究竟如何才能找出某個(gè)月有多少天呢?

import calendarcalendar.monthrange(2020, 12)# will result:(1, 31)# BUT! you need to be careful here, why? Let's read thedocumentation:help(calendar.monthrange)# Help on function monthrange in module calendar:# monthrange(year, month)# Return weekday (0-6~ Mon-Sun) and number of days (28-31) for# year, month.# As you can see the first value returned in tuple is a weekday,# not the number of the first day for a given month; let's try# to get the same for 2021calendar.monthrange(2021, 12)(2, 31)# So this basically means that the first day of December 2021 isWed# and the last day of December 2021 is 31 (which is obvious,cause# December always has 31 days)# let's play with Februarycalendar.monthrange(2021, 2)(0, 28)calendar.monthrange(2022, 2)(1, 28)calendar.monthrange(2023, 2)(2, 28)calendar.monthrange(2024, 2)(3, 29)calendar.monthrange(2025, 2)(5, 28)# as you can see it handled nicely the leap year;

某個(gè)月的第一天當(dāng)然非常簡單,就是 1 號(hào)。但是,“某個(gè)月的第一天是周X”,如何使用這條信息呢?你可以很容易地查到某一天是周幾:

calendar.monthrange(2024, 2)(3, 29)# means that February 2024 starts on Thursday# let's define simple helper:weekdays = ["Monday", "Tuesday","Wednesday", "Thursday", "Friday","Saturday", "Sunday"]# now we can do something like:weekdays[3]# will result in:'Thursday'# now simple math to tell what day is 15th of February 2020:offset = 3 # it's thefirst value from monthrangefor day in range(1, 29):print(day,weekdays[(day + offset - 1) % 7])1 Thursday2 Friday3 Saturday4 Sunday...18 Sunday19 Monday20 Tuesday21 Wednesday22 Thursday23 Friday24 Saturday...28 Wednesday29 Thursday# which basically makes sense;

也許這段代碼不適合直接用于生產(chǎn),因?yàn)槟憧梢允褂?datetime 更容易地查找星期:

from datetime import datetimemydate = datetime(2024, 2, 15)datetime.weekday(mydate)# will result:3# or:datetime.strftime(mydate, "%A")'Thursday'

總的來說,日歷模塊有很多有意思的地方,值得慢慢學(xué)習(xí):

# checking if year is leap:calendar.isleap(2021) #Falsecalendar.isleap(2024) #True# or checking how many days will be leap days for given yearspan:calendar.leapdays(2021, 2026) # 1calendar.leapdays(2020, 2026) # 2# read the help here, as range is: [y1, y2), meaning that second# year is not included;calendar.leapdays(2020, 2024) # 1

枚舉有第二個(gè)參數(shù)

是的,枚舉有第二個(gè)參數(shù),可能很多有經(jīng)驗(yàn)的開發(fā)人員都不知道。下面我們來看一個(gè)例子:

mylist = ['a', 'b', 'd', 'c', 'g', 'e']for i, item in enumerate(mylist):print(i, item)# Will give:0 a1 b2 d3 c4 g5 e# but, you can add a start for enumeration:for i, item in enumerate(mylist, 16):print(i, item)# and now you will get:16 a17 b18 d19 c20 g21 e

第二個(gè)參數(shù)可以指定枚舉開始的地方,比如上述代碼中的 enumerate(mylist,16)。如果你需要處理偏移量,則可以考慮這個(gè)參數(shù)。

if-else 邏輯

你經(jīng)常需要根據(jù)不同的條件,處理不同的邏輯,經(jīng)驗(yàn)不足的開發(fā)人員可能會(huì)編寫出類似下面的代碼:

OPEN = 1IN_PROGRESS = 2CLOSED = 3def handle_open_status():print('Handling openstatus')def handle_in_progress_status():print('Handling inprogress status')def handle_closed_status():print('Handling closedstatus')def handle_status_change(status):if status == OPEN:handle_open_status()elif status ==IN_PROGRESS:handle_in_progress_status()elif status == CLOSED:handle_closed_status()handle_status_change(1) #Handling open statushandle_status_change(2) #Handling in progress statushandle_status_change(3) #Handling closed status

雖然這段代碼看上去也沒有那么糟,但是如果有 20 多個(gè)條件呢?

那么,究竟應(yīng)該怎樣處理呢?

from enum import IntEnumclass StatusE(IntEnum):OPEN = 1IN_PROGRESS = 2CLOSED = 3def handle_open_status():print('Handling openstatus')def handle_in_progress_status():print('Handling inprogress status')def handle_closed_status():print('Handling closedstatus')handlers = {StatusE.OPEN.value:handle_open_status,StatusE.IN_PROGRESS.value: handle_in_progress_status,StatusE.CLOSED.value:handle_closed_status}def handle_status_change(status):if status not inhandlers:raiseException(f'No handler found for status: {status}')handler =handlers[status]handler()handle_status_change(StatusE.OPEN.value) # Handling open statushandle_status_change(StatusE.IN_PROGRESS.value) # Handling in progress statushandle_status_change(StatusE.CLOSED.value) # Handling closed statushandle_status_change(4) #Will raise the exception

在 Python 中這種模式很常見,它可以讓代碼看起來更加整潔,尤其是當(dāng)方法非常龐大,而且需要處理大量條件時(shí)。

enum 模塊

enum 模塊提供了一系列處理枚舉的工具函數(shù),最有意思的是 Enum 和 IntEnum。我們來看個(gè)例子:

from enum import Enum, IntEnum, Flag, IntFlagclass MyEnum(Enum):FIRST ="first"SECOND ="second"THIRD ="third"class MyIntEnum(IntEnum):ONE = 1TWO = 2THREE = 3# Now we can do things like:MyEnum.FIRST ## it has value and name attributes, which are handy:MyEnum.FIRST.value #'first'MyEnum.FIRST.name #'FIRST'# additionally we can do things like:MyEnum('first') #, get enum by valueMyEnum['FIRST'] #, get enum by name

使用 IntEnum 編寫的代碼也差不多,但是有幾個(gè)不同之處:

MyEnum.FIRST == "first" # False# butMyIntEnum.ONE == 1 # True# to make first example to work:MyEnum.FIRST.value == "first" # True

在中等規(guī)模的代碼庫中,enum 模塊在管理常量方面可以提供很大的幫助。

enum 的本地化可能有點(diǎn)棘手,但也可以實(shí)現(xiàn),我用django快速演示一下:

from enum import Enumfrom django.utils.translation import gettext_lazy as _class MyEnum(Enum):FIRST ="first"SECOND ="second"THIRD ="third"@classmethoddef choices(cls):return [(cls.FIRST.value, _('first')),(cls.SECOND.value, _('second')),(cls.THIRD.value, _('third'))# And later in eg. model definiton:some_field = models.CharField(max_length=10,choices=MyEnum.choices())

iPython

iPython 就是交互式 Python,它是一個(gè)交互式的命令行 shell,有點(diǎn)像 Python 解釋器。

首先,你需要安裝 iPython:

pip install ipython

接下來,你只需要在輸入命令的時(shí)候,將 Python 換成 ipython:

# you should see something like this after you start:Python 3.8.5 (default, Jul 28 2020, 12:59:40)Type 'copyright', 'credits' or 'license' for more informationIPython 7.18.1 -- An enhanced Interactive Python. Type '?' forhelp.In [1]:

ipython 支持很多系統(tǒng)命令,比如 ls 或 cat,tab 鍵可以顯示提示,而且你還可以使用上下鍵查找前面用過的命令。更多具體信息,請(qǐng)參見官方文檔。

參考鏈接:

python之枚舉類型

枚舉是在 Python3.4 添加的新功能。Python3.4 之前的版本可以使用,但是不能直接使用,使用之前需要先用 pip install enum 安裝。

1.1什么是枚舉?

枚舉可看作是一系列符號(hào)名稱的集合,集合中每一個(gè)元素要保證唯一性和不可變,因此我們可以對(duì)枚舉中元素進(jìn)行恒等比較,通俗來講枚舉就是一系列常量的集合,枚舉是可迭代的。

1.2枚舉有什么作用?

枚舉具有不可變的特性,所以枚舉的主要作用就是用來定義常量的。

2.1 創(chuàng)建

枚舉語法與 class 語法相同:枚舉的定義可以通過繼承 Enum 的方式來實(shí)現(xiàn), 看一下示例:

2.2 訪問

枚舉成員及屬性的訪問如下所示:

枚舉的迭代也很簡單,如下所示:

2.3 比較

枚舉成員及屬性可以使用 is 進(jìn)行對(duì)象比較,還可以使用 == 進(jìn)行值比較,看下示例:

枚舉成員不能進(jìn)行大小比較,如下所示:

2.4 確保枚舉值唯一

我們定義枚舉時(shí),成員名稱是不可以重復(fù)的,但成員值是可以重復(fù)的,如果想要保證成員值不可重復(fù),可以通過裝飾器 @unique 來實(shí)現(xiàn),如下所示:

參考:

Python學(xué)習(xí)日記

如何按行枚舉 python enumerate

enumerate()說明

enumerate()是python的內(nèi)置函數(shù)

enumerate在字典上是枚舉、列舉的意思

對(duì)于一個(gè)可迭代的(iterable)/可遍歷的對(duì)象(如列表、字符串),enumerate將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值

enumerate多用于在for循環(huán)中得到計(jì)數(shù)

例如對(duì)于一個(gè)seq,得到:

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

1

1

enumerate()返回的是一個(gè)enumerate對(duì)象,例如:

enumerate()使用

如果對(duì)一個(gè)列表,既要遍歷索引又要遍歷元素時(shí),首先可以這樣寫:

list1 = ["這", "是", "一個(gè)", "測(cè)試"]

for i in range (len(list1)):

print i ,list1[i]123123

上述方法有些累贅,利用enumerate()會(huì)更加直接和優(yōu)美:

list1 = ["這", "是", "一個(gè)", "測(cè)試"]

for index, item in enumerate(list1):

print index, item

0 這

1 是

2 一個(gè)

3 測(cè)試1234567812345678

enumerate還可以接收第二個(gè)參數(shù),用于指定索引起始值,如:

list1 = ["這", "是", "一個(gè)", "測(cè)試"]

for index, item in enumerate(list1, 1):

print index, item

1 這

2 是

3 一個(gè)

4 測(cè)試1234567812345678

補(bǔ)充

如果要統(tǒng)計(jì)文件的行數(shù),可以這樣寫:

count = len(open(filepath, 'r').readlines())11

這種方法簡單,但是可能比較慢,當(dāng)文件比較大時(shí)甚至不能工作。

可以利用enumerate():

count = -1

for index, line in enumerate(open(filepath,'r')):

count += 1

干貨 - 一文搞定Python 枚舉

enum 是一組綁定到唯一常數(shù)值的符號(hào)名稱,并且具備可迭代性和可比較性的特性。我們可以使用 enum 創(chuàng)建具有良好定義的標(biāo)識(shí)符,而不是直接使用魔法字符串或整數(shù),也便于開發(fā)工程師的代碼維護(hù)。

我們可以使用 class 語法創(chuàng)建一個(gè)枚舉類型,方便我們進(jìn)行讀寫,另外,根據(jù)函數(shù) API 的描述定義,我們可以創(chuàng)建一個(gè) enum 的子類,如下:

enum 自帶屬性 name 和 value ,日常工作中使用最多的也是這兩個(gè)屬性,我們打印看看結(jié)果:

枚舉支持迭代和遍歷順序。舉個(gè)例子:

打印結(jié)果:

可以看出,遍歷的每一個(gè) status 是一個(gè)獨(dú)立的枚舉成員,擁有 name 和 value 屬性。

另外,我們也可以使用如下形式來進(jìn)行枚舉遍歷:

上 面我們創(chuàng)建的枚舉類中, value 值是可以重復(fù)的,如果我們不想枚舉類中的值重復(fù)可以是用裝飾器 @unique ,舉例如下:

我們運(yùn)行后,報(bào)如下異常:

我們查看源代碼,發(fā)現(xiàn)加入此裝飾器的枚舉類型, unique 方法會(huì)將其 __members__.items() 進(jìn)行遍歷,追加到 duplicates 列表中,如果發(fā)現(xiàn)列表不為空,則拋出如上異常信息。

此功能用于我們?cè)谑褂妹杜e時(shí),只在意枚舉的標(biāo)識(shí)符的含義而不在意值的情況下,但是如果需要與字符串或整數(shù)混合使用就要額外注意。下面貼上官方的示例:

可以發(fā)現(xiàn),使用 auto() 得到的是整數(shù)自增型,如果我們需要?jiǎng)e的方式,只需要在我們的枚舉類中,重寫 _generate_next_value_ 方法。

枚舉對(duì)象可以進(jìn)行比較,但是不能進(jìn)行值比較,如果需要進(jìn)行值比較則需要枚舉對(duì)象繼承 IntEnum 對(duì)象,舉個(gè)例子:

上 面的測(cè)試?yán)赢?dāng)中,我們創(chuàng)建了兩個(gè)繼承類型不一樣的枚舉類,可以看到繼承了 IntEnum 的 Season 可以進(jìn)行值的比較,而繼承了 Enum 的 Part 則不能進(jìn)行值比較,并且 IntEnum 類型與 Enum 類型也不能進(jìn)行比較,即使屬性和值一樣。

枚舉中可以定義枚舉類自身特有的方法,也可以復(fù)寫一些已經(jīng)在基類中定義好的方法,比如: __init__ , __str__ , __repr__ , __hash__ , __format__ 等。舉個(gè)例子:

上面我們定義了一個(gè)枚舉類,其中 value 是一個(gè)枚舉類型,我們可以定義 __init__ 方法去對(duì)應(yīng)元組中的值,我們也復(fù)寫了 __str__ 方法。

打印方法看看效果:

從輸出結(jié)果看,我們自定義和復(fù)寫的方法都已經(jīng)成功的應(yīng)用到了 Mood 類中。

不同于 java 中的枚舉類, python 中的枚舉類是可以被繼承的,但是被繼承的枚舉類規(guī)定其不能定義任何成員,但可以定義抽象方法。舉例如下:

測(cè)試用例可以完美運(yùn)行,我們可以發(fā)現(xiàn):第一個(gè)方法中,拋出了 TypeError 的異常;第二個(gè)測(cè)試方法中, MoreColor 繼承了 Color , Color 繼承了 Shade , 并且我們可以通過子類調(diào)用父類中的方法。

主要介紹了 enum 模塊的基礎(chǔ)知識(shí),包含枚舉的創(chuàng)建、枚舉成員和屬性的訪問、枚舉方法的創(chuàng)建、枚舉的繼承等。其中新版中的 _ignore_ 、 _order_ 、 _missing_ 等可以學(xué)習(xí)官網(wǎng)的例子,另外 enum 的子類 IntEnum 、 IntFlag 等也是我們比較常用的枚舉基類,本文中簡單的介紹了 IntEnum , 而 IntFlag 相比與 IntEnum 多了 , |, ^, ~ 的操作,其他的子類大家感興趣也可以了解。

python常用函數(shù)

1、complex()

返回一個(gè)形如?a+bj?的復(fù)數(shù),傳入?yún)?shù)分為三種情況:

參數(shù)為空時(shí),返回0j;參數(shù)為字符串時(shí),將字符串表達(dá)式解釋為復(fù)數(shù)形式并返回;參數(shù)為兩個(gè)整數(shù)(a,b)時(shí),返回?a+bj;參數(shù)只有一個(gè)整數(shù) a 時(shí),虛部 b 默認(rèn)為0,函數(shù)返回?a+0j。

2、dir()

不提供參數(shù)時(shí),返回當(dāng)前本地范圍內(nèi)的名稱列表;提供一個(gè)參數(shù)時(shí),返回該對(duì)象包含的全部屬性。

3、divmod(a,b)

a -- 代表被除數(shù),整數(shù)或浮點(diǎn)數(shù);b -- 代表除數(shù),整數(shù)或浮點(diǎn)數(shù);根據(jù) 除法運(yùn)算 計(jì)算 a,b 之間的商和余數(shù),函數(shù)返回一個(gè)元組(p,q)?,p 代表商?a//b?,q 代表余數(shù)?a%b。

4、enumerate(iterable,start=0)

iterable -- 一個(gè)可迭代對(duì)象,列表、元組序列等;start -- 計(jì)數(shù)索引值,默認(rèn)初始為0‘該函數(shù)返回枚舉對(duì)象是個(gè)迭代器,利用 next() 方法依次返回元素值,每個(gè)元素以元組形式存在,包含一個(gè)計(jì)數(shù)元素(起始為 start )和 iterable 中對(duì)應(yīng)的元素值。

本文題目:python中的枚舉函數(shù),Python枚舉法
分享地址:http://chinadenli.net/article44/dsihsee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器網(wǎng)站策劃網(wǎng)站制作響應(yīng)式網(wǎng)站搜索引擎優(yōu)化網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司