自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python面向對象編程實戰(zhàn)讓你輕松掌握

開發(fā) 后端
本篇博客將介紹Python面向對象編程的一些實戰(zhàn)知識,包括單例模式、多線程編程、內置函數和模塊和包等方面的內容。

Python面向對象編程實戰(zhàn)

在Python中,面向對象編程是一種非常重要的編程范式。通過面向對象編程,可以更好地組織和管理代碼,提高代碼的復用性和可維護性。本篇博客將介紹Python面向對象編程的一些實戰(zhàn)知識,包括單例模式、多線程編程、內置函數和模塊和包等方面的內容。

1、單例模式(續(xù))

單例模式是一種常用的設計模式,它可以保證一個類只有一個實例,并提供一個全局訪問點。在Python中,單例模式的實現方式有很多,包括使用模塊、使用裝飾器、使用元類等。下面我們將繼續(xù)介紹單例模式的優(yōu)缺點和應用場景。

單例模式的優(yōu)缺點

單例模式的優(yōu)點包括:

  1. 保證只有一個實例,節(jié)省了系統(tǒng)資源。
  2. 提供了一個全局訪問點,方便了系統(tǒng)的調用和管理。

單例模式的缺點包括:

  1. 單例模式會增加系統(tǒng)的復雜度,代碼的可讀性和可維護性可能會降低。
  2. 單例模式會增加系統(tǒng)的耦合度,對代碼的擴展和修改可能會造成一定的困難。

單例模式的應用場景

單例模式適用于以下場景:

  1. 需要頻繁創(chuàng)建和銷毀的對象。
  2. 需要全局唯一的對象。
  3. 需要對資源進行統(tǒng)一管理的對象。

例如,數據庫連接池、線程池、配置文件管理器等都可以使用單例模式來實現。

2、多線程編程(續(xù))

多線程編程是一種常用的編程方式,它可以提高程序的運行效率和響應速度。在Python中,多線程編程的實現方式有很多,包括使用threading模塊、使用multiprocessing模塊、使用異步編程等。下面我們將繼續(xù)介紹多線程編程的一些實現和應用。

線程的創(chuàng)建和啟動

Python中可以使用threading模塊來創(chuàng)建和啟動線程。下面是一個簡單的示例:

import threading

def worker():
    print('Hello, world!')

t = threading.Thread(target=worker)
t.start()

在上面的代碼中,我們首先定義了一個worker函數,然后創(chuàng)建了一個線程t,并將worker函數作為線程的執(zhí)行函數。最后,我們調用了start方法來啟動線程。

線程同步和互斥

在多線程編程中,線程同步和互斥是非常重要的問題。Python中可以使用鎖來實現線程同步和互斥。下面是一個簡單的示例:

import threading

count = 0
lock = threading.Lock()

def worker():
    global count
    with lock:
        for i in range(100000):
            count += 1

threads = []
for i in range(10):
    t = threading.Thread(target=worker)
    threads.append(t)
    t.start()

for t in threads:
    t.join()

print(count)

在上面的代碼中,我們首先定義了一個全局變量count和一個鎖對象lock。然后,我們定義了一個worker函數,該函數使用with語句來獲取鎖對象,并對全局變量count進行加一操作。最后,我們創(chuàng)建了10個線程,并啟動這些線程,等待它們全部執(zhí)行完畢后,輸出全局變量count的值。

線程池的實現

在多線程編程中,線程池是一種常用的技術,它可以提高程序的性能和穩(wěn)定性。Python中可以使用ThreadPoolExecutor類來實現線程池。下面是一個簡單的示例:

from concurrent.futures import ThreadPoolExecutor

def worker(num):
    print('Worker %d is running' % num)

with ThreadPoolExecutor(max_workers=3) as executor:
    for i in range(5):
        executor.submit(worker, i)

在上面的代碼中,我們首先定義了一個worker函數,該函數接受一個數字參數,并輸出相應的信息。然后,我們使用ThreadPoolExecutor類創(chuàng)建了一個最大工作線程數為3的線程池對象executor。最后,我們使用submit方法向線程池中提交了5個任務,每個任務都是調用worker函數,并傳遞一個數字參數。

3、內置函數

在Python中,內置函數是一種非常重要的語言特性。內置函數是由解釋器提供的一組函數,它們可以直接在程序中使用,無需進行導入或者其他操作。下面我們將介紹Python內置函數的一些概念和使用。

內置函數的概念和使用

Python內置函數是指可以直接在程序中使用的函數,無需進行導入或者其他操作。Python內置函數有很多,包括數學函數、字符串函數、列表函數、字典函數、集合函數等等。下面是一些常用的內置函數:

  1. abs:返回一個數的絕對值。
  2. len:返回一個序列的長度。
  3. range:生成一個指定范圍的整數序列。
  4. map:將一個函數作用于一個序列的每個元素,并返回一個新的序列。
  5. filter:過濾一個序列中不符合條件的元素,并返回一個新的序列。
  6. sorted:對一個序列進行排序,并返回一個新的序列。
  7. sum:對一個序列中的元素求和,并返回結果。

常用的內置函數

下面是一些常用的內置函數的使用示例:

# abs
a = -10
print(abs(a))  # 輸出:10

# len
lst = [1, 2, 3, 4, 5]
print(len(lst))  # 輸出:5

# range
for i in range(5):
    print(i)  # 輸出:0 1 2 3 4

# map
lst = [1, 2, 3, 4, 5]
result = map(lambda x: x * 2, lst)
print(list(result))  # 輸出:[2, 4, 6, 8, 10]

# filter
lst = [1, 2, 3, 4, 5]
result = filter(lambda x: x % 2 == 0, lst)
print(list(result))  # 輸出:[2, 4]

# sorted
lst = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
result = sorted(lst)
print(result)  # 輸出:[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

# sum
lst = [1, 2, 3, 4, 5]
result = sum(lst)
print(result)  # 輸出:15

4、模塊和包

在Python中,模塊是一個包含Python代碼的文件。模塊可以包含函數、變量和類等,還可以導入其他模塊,從而擴展Python的功能。包是一個包含模塊的文件夾,包可以嵌套子包,從而形成一個層次結構。

模塊的概念和使用

為了使用模塊中的函數、變量和類等,我們需要使用Python內置的import語句將模塊導入到當前的命名空間中。例如,假設我們有一個名為my_module的模塊,其中包含一個名為my_function的函數,我們可以使用以下代碼將該模塊導入到當前的命名空間中:

import my_module

result = my_module.my_function()

在上面的代碼中,我們首先使用import語句將my_module模塊導入到當前的命名空間中,然后使用my_module前綴來調用該模塊中的my_function函數。

如果我們只想導入模塊中的某些函數、變量或類,可以使用from語句和import語句的組合。例如,假設我們只想導入my_module模塊中的my_function函數,我們可以使用以下代碼:

from my_module import my_function

result = my_function()

在上面的代碼中,我們使用from my_module import my_function語句將my_module模塊中的my_function函數導入到當前的命名空間中,然后直接調用該函數即可。

包的概念和使用

包是一個包含模塊的文件夾,包可以嵌套子包,從而形成一個層次結構。包中必須包含一個名為__init__.py的文件,該文件可以為空文件,也可以包含包的初始化代碼。

為了使用包中的模塊,我們可以使用與導入模塊類似的方法。假設我們有一個名為my_package的包,其中包含一個名為my_module的模塊,我們可以使用以下代碼將該模塊導入到當前的命名空間中:

import my_package.my_module

result = my_package.my_module.my_function()

在上面的代碼中,我們首先使用import語句將my_package.my_module模塊導入到當前的命名空間中,然后使用my_package.my_module前綴來調用該模塊中的my_function函數。

如果我們只想導入包中的某些模塊,可以使用from語句和import語句的組合。例如,假設我們只想導入my_package包中的my_module模塊,我們可以使用以下代碼:

from my_package import my_module

result = my_module.my_function()

在上面的代碼中,我們使用from my_package import my_module語句將my_package包中的my_module模塊導入到當前的命名空間中,然后直接調用該模塊中的my_function函數即可。

模塊和包的管理

Python中有許多工具可用于管理模塊和包,例如pip、conda、virtualenv等。這些工具可以幫助我們安裝、升級、刪除模塊和包,以及管理Python環(huán)境。

pip是Python的包管理器,可以用于安裝、升級、刪除Python模塊和包。例如,我們可以使用以下命令來安裝requests模塊:

pip install requests

conda是一種用于數據科學的Python環(huán)境管理器,可以用于安裝、升級、刪除Python模塊和包,以及管理Python環(huán)境。例如,我們可以使用以下命令來創(chuàng)建一個名為my_env的Python環(huán)境,并在其中安裝numpy模塊:

conda create --name my_env
conda activate my_env
conda install numpy

virtualenv是一種輕量級的Python環(huán)境管理器,可以用于創(chuàng)建多個獨立的Python環(huán)境。例如,我們可以使用以下命令來創(chuàng)建一個名為my_env的Python環(huán)境,并在其中安裝numpy模塊:

virtualenv my_env
source my_env/bin/activate
pip install numpy

5、代碼示例

在本節(jié)中,我們將演示如何使用Python實現單例模式、多線程編程、內置函數、模塊和包等功能。

單例模式的實現

單例模式是一種創(chuàng)建對象的設計模式,它確保一個類只有一個實例,并提供了一個全局訪問點。在Python中,可以通過使用裝飾器或元類等方式來實現單例模式。

以下是使用裝飾器實現單例模式的示例代碼:

def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

@singleton
class MyClass:
    pass

a = MyClass()
b = MyClass()
print(a is b)  # True

在上面的代碼中,我們定義了一個名為singleton的裝飾器函數,該函數接受一個類作為參數,并返回一個新的函數。該新函數維護一個字典instances,用于存儲每個類的實例。如果字典中不存在該類的實例,則創(chuàng)建一個新的實例并將其存儲在字典中,否則返回已有的實例。

我們使用@singleton語法將MyClass類裝飾為單例模式,然后創(chuàng)建兩個類的實例a和b,并檢查它們是否相等。

以下是使用元類實現單例模式的示例代碼:

class Singleton(type):
    _instances = {}
    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

class MyClass(metaclass=Singleton):
    pass

a = MyClass()
b = MyClass()
print(a is b)  # True

在上面的代碼中,我們定義了一個名為Singleton的元類,該元類維護一個字典_instances,用于存儲每個類的實例。如果字典中不存在該類的實例,則創(chuàng)建一個新的實例并將其存儲在字典中,否則返回已有的實例。

我們使用metaclass=Singleton語法將MyClass類的元類設置為Singleton,然后創(chuàng)建兩個類的實例a和b,并檢查它們是否相等。

多線程編程的實現

多線程編程是一種同時執(zhí)行多個線程的編程模式,可以提高程序的性能和響應性。在Python中,可以使用內置的threading模塊來實現多線程編程。

以下是使用threading模塊實現多線程編程的示例代碼:

import threading

def worker():
    print("Worker thread started")
    # do some work here
    print("Worker thread finished")

t = threading.Thread(target=worker)
t.start()

print("Main thread finished")

在上面的代碼中,我們首先定義了一個名為worker的函數,用于在工作線程中執(zhí)行一些任務。然后創(chuàng)建一個名為t的新線程,并將worker函數作為目標傳遞給該線程。最后啟動線程并等待其完成。

內置函數的使用

Python中有許多內置函數可用于處理字符串、列表、字典等數據類型。以下是一些常用的內置函數:

  • len():返回一個序列的長度。
  • range():生成一個等差數列。
  • min():返回一個序列中的最小值。
  • max():返回一個序列中的最大值。
  • sum():返回一個序列中所有元素的和。
  • sorted():對一個序列進行排序。
  • enumerate():將一個序列轉換為一個枚舉對象,可以同時獲取元素的下標和值。
  • zip():將多個序列打包成一個元組序列。
  • map():將一個函數應用于一個序列中的每個元素,并返回一個新序列。
  • filter():過濾一個序列中的元素,只保留符合條件的元素。

以下是一些內置函數的示例代碼:

# len()
s = "Hello, world!"
print(len(s))  # 13

# range()
for i in range(1, 10, 2):
    print(i)  # 1 3 5 7 9

# min() and max()
a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print(min(a))  # 1
print(max(a))  # 9

# sum()
a = [1, 2, 3, 4, 5]
print(sum(a))  # 15

# sorted()
a = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
print(sorted(a))  # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

# enumerate()
a = ["apple", "banana", "orange"]
for i, fruit in enumerate(a):
    print(i, fruit)
# 0 apple
# 1 banana
# 2 orange

# zip()
a = [1, 2, 3]
b = ["one", "two", "three"]
for x, y in zip(a, b):
    print(x, y)
# 1 one
# 2 two
# 3 three

# map()
a = [1, 2, 3]
b = list(map(lambda x: x + 1, a))
print(b)  # [2, 3, 4]

# filter()
a = [1, 2, 3, 4, 5]
b = list(filter(lambda x: x % 2 == 0, a))
print(b)  # [2, 4]

模塊和包的實現

在Python中,可以使用模塊和包來組織代碼,并提供代碼的復用和擴展性。以下是一些模塊和包的示例代碼:

# 模塊的實現
# my_module.py
def my_function():
    print("Hello, world!")

# main.py
import my_module

my_module.my_function()

# 包的實現
# my_package/__init__.py
from .my_module import my_function

# my_package/my_module.py
def my_function():
    print("Hello, world!")

# main.py
from my_package import my_function

my_function()

在上面的代碼中,我們首先定義了一個名為my_function的函數,并將其保存在一個名為my_module的模塊中。我們可以使用import語句將該模塊導入到另一個文件中,并調用其中的函數。

然后,我們定義了一個名為my_package的包,并在其中創(chuàng)建了一個名為my_module的模塊。我們可以使用相對導入的方式將該模塊導入到__init__.py文件中,并將其中的函數作為包的接口暴露出來。最后,在另一個文件中,我們可以使用from ... import ...語句將該函數導入到當前的命名空間中,并直接調用它。

6、進階使用技巧

在Python中,除了基礎語法和常用模塊的使用之外,還有一些進階的使用技巧,可以讓我們的代碼更加高效、簡潔、易讀。以下是一些常見的進階使用技巧。

單例模式的高級用法

單例模式是一種設計模式,用于保證一個類只有一個實例,并提供一個全局的訪問點。在Python中,可以使用元類(metaclass)來實現單例模式。元類是一種類的類,可以用于控制類的創(chuàng)建過程。

以下是一個使用元類實現單例模式的示例代碼:

class SingletonMeta(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

class MyClass(metaclass=SingletonMeta):
    pass

a = MyClass()
b = MyClass()
print(a is b)  # True

在上面的代碼中,我們定義了一個名為SingletonMeta的元類,它維護了一個字典_instances,用于保存實例對象。在元類的__call__方法中,我們檢查該類是否已經存在于字典中,如果不存在,則使用super().__call__方法創(chuàng)建一個新的實例,并將其保存到字典中;如果存在,則直接返回保存的實例對象。

然后,我們定義了一個名為MyClass的類,它使用SingletonMeta作為元類。由于元類的作用,MyClass類只能有一個實例,我們可以通過創(chuàng)建兩個對象并比較它們的引用來驗證這一點。

多線程編程的最佳實踐

在Python中,多線程編程可以提高代碼的執(zhí)行效率和并發(fā)性。然而,多線程編程也可能引入一些問題,例如線程安全問題、死鎖等。以下是一些多線程編程的最佳實踐:

  • 使用線程池:線程池可以重用線程,避免了線程創(chuàng)建和銷毀的開銷,同時可以控制線程數量,避免線程過多導致系統(tǒng)負載過高。
  • 使用鎖:鎖可以用于保護共享資源,避免多個線程同時訪問和修改同一個資源,從而引發(fā)線程安全問題。Python中提供了多種鎖的實現,例如threading.Lock、threading.RLock、threading.Semaphore等。
  • 避免死鎖:死鎖是指兩個或多個線程互相等待對方釋放資源,導致所有線程都無法繼續(xù)執(zhí)行。為了避免死鎖,可以使用以下方法:避免嵌套鎖;按照相同的順序獲取鎖;使用超時機制等。
  • 使用線程安全的數據結構:Python中的一些數據結構,例如list、dict、set等,在多線程環(huán)境下可能會引發(fā)線程安全問題。為了避免這種問題,可以使用線程安全的數據結構,例如queue.Queue、threading.local等。
  • 避免全局變量:全局變量可能會導致多個線程同時訪問和修改同一個變量,從而引發(fā)線程安全問題。為了避免這種問題,可以使用局部變量或者將變量封裝在對象中,以避免多個線程同時訪問和修改。

內置函數的高級用法

Python中的內置函數可以幫助我們更加方便地進行編程。除了基本的用法之外,還有一些高級用法可以提高我們的編程效率和代碼質量。以下是一些常見的內置函數的高級用法。

  • map():可以使用map()函數將一個函數應用于一個序列中的每個元素,并返回一個新序列。除了傳遞一個函數作為參數之外,還可以傳遞多個序列作為參數,并在函數中進行計算。
  • filter():可以使用filter()函數過濾一個序列中的元素,只保留符合條件的元素。除了傳遞一個函數作為參數之外,還可以使用lambda表達式來定義過濾條件。
  • reduce():可以使用reduce()函數對一個序列中的元素進行累積計算。需要傳遞一個函數作為參數,該函數接受兩個參數,并返回一個值,用于累積計算。在Python 3中,reduce()函數已經移動到了functools模塊中。
  • zip():可以使用zip()函數將多個序列打包成一個元組序列。如果序列的長度不相等,則會以最短序列的長度為準。
  • enumerate():可以使用enumerate()函數將一個序列轉換為一個枚舉對象,可以同時獲取元素的下標和值。默認情況下,枚舉對象的下標從0開始,但是可以通過傳遞一個可選參數來指定起始下標。

模塊和包的高級應用

模塊和包是Python中組織代碼的重要方式,可以提高代碼的可維護性和擴展性。除了基本的用法之外,還有一些高級應用可以幫助我們更好地組織和管理代碼。以下是一些常見的模塊和包的高級應用。

  • 使用命名空間:可以使用命名空間來避免名稱沖突和重復。在Python中,每個模塊都有自己的命名空間,可以通過import語句來訪問其中的變量和函數。
  • 使用相對導入:可以使用相對導入來引用同一個包中的其他模塊。相對導入使用點號.和雙點號..來表示當前包和父包,可以避免絕對導入的路徑問題。
  • 使用包數據:可以在包中添加一個名為__init__.py的文件,并在其中定義一些數據和函數,可以在導入包時自動執(zhí)行。這可以用于初始化包的狀態(tài)、定義包的接口等。
  • 使用包管理工具:可以使用第三方包管理工具,例如pip、conda等,來管理Python中的包和依賴。這可以方便地安裝、升級、卸載包,并自動處理依賴關系。

7、常見問題

在Python編程過程中,可能會遇到一些常見的問題和錯誤。以下是一些常見問題和解決方案。

如何實現單例模式

如前所述,可以使用元類來實現單例模式。以下是一個使用元類實現單例模式的示例代碼:

class SingletonMeta(type):
    _instances = {}

    def __call__(cls, *args, **kwargs):
        if cls not in cls._instances:
            cls._instances[cls] = super().__call__(*args, **kwargs)
        return cls._instances[cls]

class MyClass(metaclass=SingletonMeta):
    pass

a = MyClass()
b = MyClass()
print(a is b)  # True

在上面的代碼中,我們定義了一個名為SingletonMeta的元類,它維護了一個字典_instances,用于保存實例對象。在元類的__call__方法中,我們檢查該類是否已經存在于字典中,如果不存在,則使用super().__call__方法創(chuàng)建一個新的實例,并將其保存到字典中;如果存在,則直接返回保存的實例對象。

然后,我們定義了一個名為MyClass的類,它使用SingletonMeta作為元類。由于元類的作用,MyClass類只能有一個實例,我們可以通過創(chuàng)建兩個對象并比較它們的引用來驗證這一點。

如何創(chuàng)建和啟動線程

在Python中,可以使用threading模塊來創(chuàng)建和啟動線程。以下是一個創(chuàng)建和啟動線程的示例代碼:

import threading

def worker():
    print("Worker thread started.")
    # do some work...
    print("Worker thread finished.")

t = threading.Thread(target=worker)
t.start()
print("Main thread finished.")

在上面的代碼中,我們定義了一個名為worker的函數,它會在一個新的線程中運行。然后,我們使用threading.Thread類創(chuàng)建一個新的線程,并將worker函數作為目標函數傳遞給它。最后,我們調用線程對象的start()方法啟動線程,這會在一個新的線程中執(zhí)行worker函數。

注意,創(chuàng)建線程并不會阻塞主線程,主線程會繼續(xù)執(zhí)行后面的代碼。如果希望等待線程執(zhí)行完成后再繼續(xù)執(zhí)行主線程,可以調用線程對象的join()方法。

如何使用內置函數

Python中有很多內置函數,可以幫助我們更加方便地進行編程。以下是一些常見的內置函數的用法。

  • print():可以使用print()函數輸出一些信息到控制臺或者文件中。除了輸出字符串之外,還可以使用格式化字符串、指定分隔符和結束符、重定向輸出等。
  • len():可以使用len()函數獲取一個序列或者字符串的長度。
  • range():可以使用range()函數生成一個整數序列,可以用于迭代和循環(huán)。在Python 2中,range()函數返回一個列表,而在Python 3中,range()函數返回一個迭代器。
  • open():可以使用open()函數打開一個文件,并返回一個文件對象??梢允褂梦募ο筮M行讀寫操作,并在操作完成后關閉文件。
  • input():可以使用input()函數從控制臺獲取用戶輸入。注意,input()函數返回的是一個字符串,需要進行類型轉換才能使用。

如何管理模塊和包

在Python中,模塊和包是組織代碼的重要方式。以下是一些常見的模塊和包的管理方法。

  • 導入模塊:可以使用import語句導入一個模塊,并使用模塊中的變量和函數??梢允褂胒rom ... import ...語句導入模塊中的部分內容,并直接使用其中的變量和函數。
  • 創(chuàng)建包:可以在一個目錄中創(chuàng)建一個名為__init__.py的文件,將其作為一個包??梢栽诎袆?chuàng)建多個模塊,并在其中定義變量和函數。
  • 導入包:可以使用import語句導入一個包,并使用其中的模塊和變量??梢允褂胒rom ... import ...語句導入包中的部分內容,并直接使用其中的變量和函數。
  • 包中的相對導入:可以使用相對導入來引用同一個包中的其他模塊。相對導入使用點號.和雙點號..來表示當前包和父包,可以避免絕對導入的路徑問題。
  • 包管理工具:可以使用第三方包管理工具,例如pip、conda等,來管理Python中的包和依賴。這可以方便地安裝、升級、卸載包,并自動處理依賴關系。
  • 包的文檔:可以在包中添加一個README文件,用于描述包的使用方法和功能??梢允褂胐ocstring來為每個模塊、函數和類添加文檔注釋,方便其他開發(fā)人員理解和使用代碼。
  • 包的測試:可以在包中添加一個tests目錄,用于存放測試代碼??梢允褂胾nittest或pytest等單元測試框架來編寫測試代碼,用于測試代碼的正確性和可靠性。
責任編輯:姜華 來源: 今日頭條
相關推薦

2023-08-04 09:43:16

Socket編程Python

2019-03-26 10:50:22

Python面向對象編程語言

2023-01-10 09:06:17

2023-12-11 15:32:30

面向對象編程OOPpython

2014-10-30 16:34:28

編程技術算法

2014-10-30 16:41:14

編程技術算法

2014-10-30 16:12:55

編程技術算法

2023-07-03 09:58:00

Python對象編程

2017-04-21 09:07:39

JavaScript對象編程

2012-01-17 09:34:52

JavaScript

2023-06-09 07:55:09

2023-09-27 23:28:28

Python編程

2023-04-26 00:15:32

python面向對象java

2010-11-17 11:31:22

Scala基礎面向對象Scala

2023-12-11 18:18:24

Python編程線程

2022-07-30 23:41:53

面向過程面向對象面向協(xié)議編程

2024-01-12 16:06:55

2023-07-04 08:33:46

Python對象編程

2012-12-13 11:01:42

IBMdW

2010-02-26 14:40:15

Python應用程序
點贊
收藏

51CTO技術棧公眾號