关于函数式编程中的概念，请见「**函子 (函数式编程)**」。
在範疇論中，**函子**是範疇間的一類映射。函子也可以解釋為小範疇範疇內的態射。

函子首先現身於代數拓撲學，其中拓撲空間的連續映射給出相應的代數对象（如基本群、同調群或上同調群）的代數同態。在當代數學中，函子被用來描述各種範疇間的關係。「函子」（英文：*Functor*）一詞借自哲學家魯道夫·卡爾納普的用語。卡爾納普使用「函子」這一詞和函數之間的相關來類比謂詞和性質之間的相關。對卡爾納普而言，不同於當代範疇論的用法，函子是個語言學的詞彙。對範疇論者來說，函子則是個特別類型的函數。

定義
--

設*C*和*D*為範疇，從*C*至*D*的**函子**為一映射F:

* 將每個对象X \in C映射至一对象F(X) \in D上，
* 將每個態射f:X\rightarrow Y \in C映射至一態射F(f):F(X) \rightarrow F(Y) \in D上，使之滿足下列條件：
* 對任何對象X \in \mathcal{C}，恆有{\displaystyle F(\mathbf {id} \_{X})=\mathbf {id} \_{F(X)}}。
* 對任何態射f: X \to Y, \; g: Y \to Z，恆有F(g \circ f) = F(g) \circ F(f)。換言之，函子會保持單位態射與態射的複合。

一個由一範疇映射至其自身的函子稱之為「自函子」。

### 協變與反變

數學中有許多構造具有函子的性質，不同之處在於它們將態射的方向「反轉」。為此，我們定義**反變函子**
F: \mathcal{C} \to \mathcal{D}為：

* 將每個对象X \in C映射至一对象F(X) \in D,上。
* 將每個態射f:X\rightarrow Y \in C映射至一態射F(f):F(Y) \rightarrow F(X) \in D上。

使之滿足：

* 對任何對象X \in \mathcal{C}恆有F(\mathbf{id}\_X) = \mathbf{id}\_{F(X)}。
* 對任何\mathcal{C}中的態射f: X \to Y\; g: Y \to Z，恆有 F(g \circ f) = F(f) \circ F(g)。

注意，反變函子反轉了複合的方向。

在此脈絡下，原定義中的函子亦稱之為**協變函子**，以區分和反變函子之間的不同。也可以將反變函子定義為在對偶範疇C^{op}上的「協變」函子。一些作者即較喜好將所有的表示式寫成協變的。亦即，不說F: C\rightarrow D為一反變函子，而簡單寫成F: C^{op} \rightarrow D（或有時為F:C \rightarrow D^{op}），並稱之為函子。

自然變換
----

兩個函子F, G: \mathcal{C} \to \mathcal{D}間的**自然變換**是一族態射

\eta\_X: F(X) \to G(X) \quad (X \in \mathcal{C})
使得任何X, Y \in \mathcal{C}及態射f:X\to Y均滿足下述交換圖：

diagram defining natural transformationsdiagram defining natural transformations
當\eta\_X皆為同構時，可以定義此自然變換之逆(\eta\_X)^{-1}，兩者的合成為恆等自然變換。此時稱\eta\_X為函子F, G之間的同構。

對反變函子也可以類似地定義自然變換。

例子
--

**常數函子**：將每個对象X \in \mathcal{C}映射至一固定对象Y\_0 \in \mathcal{D}中，並將所有態射映射至\mathbf{id}\_{Y\_0}中的函子*C* → *D*。**常數函子**亦之稱為**選擇函子**。

**對角函子**：對角函子被定義為由*D*至函子範疇*D**C*的函子，將每個在*D*內的对象映射至此对象的常數函子上。

**極限函子**：對一固定的指標範疇，若每個函子*J*→*C*都有個極限（即若*C*為完全的），則極限函子*C**J*→*C*即為將每個函子映射至其極限的函子。此類函子的存在性可以由將其理解為對角函子的右伴隨函子，且引入福端伴隨函子定理來證明之。這需要一個適當版本的選擇公理。相似的說法也可應用在上極限函子（其為協變的）之中。

**冪集合**：冪集合函子*P* : **Set** → **Set**將每個集合映射至其冪集合，且將每個函數 f : X \to Y映射至從U \subseteq X至其值域f(U) \subseteq Y的映射。亦可考慮反變冪集合函子，將*f*　映射至從*U*映射至其在*Y*內的逆象。

**對偶向量空間**：此函子將每個向量空間映射至其對偶空間中，並將每個線性映射映射至其對偶映射中，為一個由所有在一固定體上的向量空間所組成的範疇映射至其自身的反變函子。

**基本群**：考慮一個由有點空間（即帶有可區分點的拓樸空間）所組成的範疇，其对象為對 (*X*, *x*0)，其中*X*為一拓樸空間且*x*0為*X*中的一點，由 (*X*,*x*0)至 (*Y*, *y*0)的態射為一連續映射*f* : *X* → *Y*，且滿足*f*(*x*0) = *y*0。

對每個有可區分點*x*0的拓樸空間*X*，可定義一個基於*x*0上的基本群π1(*X*, *x*0)。這個一個基於*x*0上的環的同倫類的群。若*f* : *X* → *Y*是一個有點空間的態射，則每個在*X*內，基於點*x*0上的環即可經由*f*得出一個在*Y*內，基於*y*0的環。此一運算和同倫等價關係及環的複合相符，故可得出一個由π(*X*, *x*0)至π(*Y*, *y*0)的群同態。因此，即可得出一個由有點拓樸空間範疇至群範疇的函子。

在拓樸空間（沒有可區分點）範疇中，可考慮一般曲線的同倫類，但無法複合，除非它們共有一個端點。因此可以有一**基本廣群**，而無法一定有一基本群。

**連續函數的代數**：一個由拓樸空間的範疇（其態射為連續映射）至實結合代數的範疇的反變函子，其將每個拓樸空間*X*映射至此空間上所有實變連續函數的代數C(*X*)上。每個連續映射*f* : *X* → *Y*都可導出一個代數同態C(*f*) : C(*Y*) → C(*X*)，經由讓每個C(*Y*)內的&phi，C(*f*)(φ) = φ o *f*。當空間X帶有更多結構（例如光滑流形、複流形）時，定義可以相應地推廣。

**切叢和餘切叢**：將每個微分流形映射至其切叢中且將每個光滑映射映射至其導數中的映射，為一由微分流形的範疇至向量叢的範疇的協變函子。同樣地，將每個微分流形映射至其餘切叢中且將每個光滑映射映射至其回拉的映射，為一反變函子。

在每個點上做此建構可以給出由有點微分流分的範疇至實向量空間的範疇的協變及反變函子。

**群作用/表示**：每個群*G*都可以被認為帶有單一個对象的範疇。一個由*G*至**Set**的函子只是*G*在一特定集合上的群作用，即一個*G*-集合。同樣地，一個由*G*至向量空間範疇**Vect***K*的函子會是個*G*的線性表示。一般來說，一個函子*G* → *C*可以被認為是*G*在範疇*C*中的一個对象上的「作用」。

**李代數**：將每個實（複）李群映射至其實（複）李代數可定義出一函子。

**張量積**：若*C*為在一固定體上的向量空間的範疇且其態射為線性映射，則張量積V \otimes W可定義出一個函子*C* × *C* → *C*，其中兩個引數都是協變的。

**遺忘函子**：函子*U* : **Grp** → **Set**將群映射至其源集合且將群同態映射至其源函數。此類的函子會「遺忘」部份的結構，因此稱之為「遺忘函子」。另一個例子為函子**Rng** → **Ab**，其將環映射至其源加法阿貝爾群中。在**Rng**中的態射（環同態）則遺忘了其中的乘法，而變成了在**Ab**中的態射（阿貝爾群同態）。其他如體、模、拓樸空間等基於集合的結構也可以取其遺忘函子。

**自由函子**：遺忘函子的反向即為自由函子。自由函子*F* : **Set** → **Grp**將每個集合*X*映射至由*X*產生的自由群，函數則映射至自由群間的群同態。自由函子的建構可存在於許多基於由集合的結構的範疇。詳見自由对象。

**同態群**：對每一對群*A*、*B*，皆可得出一個由所有從*A*至*B*的群同態所組成的阿貝爾群Hom(*A*,*B*)。這是一個其第一個引數為反變，第二個引數為協變的函子，即為一函子**Ab**op × **Ab** → **Ab**（其中的**Ab**為具群同態的阿貝爾群範疇）。若*f* : *A*1 → *A*2且*g* : *B*1 → *B*2為兩個在**Ab**中的態射，則群同態Hom(*f*,*g*) : Hom(*A*2,*B*1) → Hom(*A*1,*B*2)以φ \mapsto *g* o φ o *f*來給定。詳見同態函子。

**表示函子**：可將上述例子廣義化至任一範疇*C*中。即對每一對在*C*中的对象*X*、*Y*，可得出一個由從*X*至*Y*的所有態射所組成的集合Hom(*X*,*Y*)。這會定義出一個映射至**Set**，且其第一個引數為反變，第二個引數為協變的函子，即一函子*C*op × *C* → **Set**。若*f* : *X*1 → *X*2且*g* : *Y*1 → *Y*2為*C*中的態射，則其群同態Hom(*f*,*g*) : Hom(*X*2,*Y*1) → Hom(*X*1,*Y*2)以φ \mapsto *g* o φ o *f*來給定。

此類函子即稱之為表示函子。建構出此函子的一個重要目的在於決定一給定函子是否為可表示的。

**預層**：若*X*為一拓撲空間，則在*X*上的開集會形成一個在包括下的偏序集合Open(*X*)。如同每個偏序開集一般，Open(*X*)會形成一個小範疇，帶有態射*U* → *V*若且唯若U \subseteq V時。在Open(*X*)上的反變函子稱之為在*X*上的「預層」。例如，將每個開集*U*賦值至在*U*上的實變連續函數的結合代數，即可得到一個在*X*上的代數的頂層。

性質
--

從函子的公理中可得出兩個重要的推論：

* *F*將每個在*C*中的交換圖變換成*D*中的一個交換圖；
* 若*f*為*C*中的一個同構，則*F*(*f*)也會為*D*中的一個同構。

若函子F滿足F(f)為同構若且唯若f為同構，則稱之為**保守函子**。

在任意範疇*C*上，可定義一個**單位函子**1*C*，其將每個对象和態射映射至其自身。也可以將函子複合，即若*F*為一由*A*至*B*的函子且*G*為一由*B*至*C*的函子，則可組成一個由*A*至*C*的複合函子。函子的複合依定義是可結合的。這顯示函子可以被認為是範疇的範疇中的態射。

一個只具單一对象的小範疇等同於一個么半群，此一單一对象範疇的態射可被視為是么半群中的元素，且其在範疇中的複合則可以視為是么半群中的運算。此時這類範疇間的函子無非是么半群間的同態。在此意義下，任意範疇間的函子可被視為是么半群同態至多於一個对象的範疇的一種廣義化。

雙函子與多函子
-------

雙函子是函子概念在「雙變元」時的推廣。形式的定義則定義在兩個範疇的積上的函子F: \mathcal{A} \times \mathcal{B} \to \mathcal{C}。

函子\mathrm{Hom}(-,-)是一個自然的例子，它對第一個變元反變，對第二個變元協變。

**雙函子**是有「兩個」引數的函子。同態函子即為一個例子；其第一個引數為反變的，第二個引數則為協變的。

形式上來說，雙函子是一個其定義域為積範疇的函子。例子，同態函子即為*C*op × *C* → **Set**。

**多函子**是將函子的概念廣義化至*n*個引數。而雙函子當然是一個*n*=2的多函子。

與其他範疇論概念的關係
-----------

函子本身亦可視為函子範疇中的對象，該範疇中的態射是函子間的自然變換。近來有以「函子的態射」取代術語「自然變換」的趨勢。

函子也經常以泛性質定義，例子包括了張量積，模或群的直和、直積，自由群與自由模的構造；許多構造可以統合於正極限與逆極限的概念下。

泛建構也往往給出一對伴隨函子。

具特殊性質之函子
--------

* **本質滿射函子**：使得值域中任意對象皆*同構*於某個F(X)的函子。
* **正合函子**：保存有限極限的函子。在阿貝爾範疇中相當於保存正合序列。
* **忠實函子**：使得對任意對象X, Y，\mathrm{Hom}(X,Y) \to \mathrm{Hom}(FX,FY)為單射的函子。
* **完全函子**：使得對任意對象X, Y，\mathrm{Hom}(X,Y) \to \mathrm{Hom}(FX,FY)為滿射的函子。
* **完全忠實函子**：既完全且忠實的函子稱為完全忠實函子。F: \mathcal{C} \to \mathcal{D}是完全忠實函子的充要條件是F: \mathcal{C} \to F(\mathcal{C})是範疇的等價，其中F(\mathcal{C})表示{\mathcal {D}}中由F的像生成的滿子範疇。
* **保守函子**：使得F(f)為同構若且唯若f為同構的函子。
* **加法函子**：指預加法範疇（或加法範疇）中保存同態集（以及雙積）的阿貝爾群結構的函子。
* **伴隨函子**：(F,G)滿足下述條件時稱為一對伴隨函子：\mathrm{Hom}(F(-), -) \simeq \mathrm{Hom}(-,G(-))。