国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

我在VScode學(xué)Python(Python函數(shù),Python模塊導(dǎo)入)

這篇具有很好參考價(jià)值的文章主要介紹了我在VScode學(xué)Python(Python函數(shù),Python模塊導(dǎo)入)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

我的個(gè)人博客主頁:如果’'真能轉(zhuǎn)義1??說1??的博客主頁
(1)關(guān)于Python基本語法學(xué)習(xí)---->可以參考我的這篇博客《我在VScode學(xué)Python》
(2)pip是必須的在我們學(xué)習(xí)python這門語言的過程中Python ---->> PiP 的重要性

本篇補(bǔ)充《我在VScode學(xué)Python》的內(nèi)容

Py函數(shù)

def user_info(name, age, gender="未知"):
    print(f"您的名字是: {name},年齡是: {age},性別是: {gender}")
print(type(user_info))

我在VScode學(xué)Python(Python函數(shù),Python模塊導(dǎo)入),Python學(xué)習(xí),vscode,python,ide

函數(shù)是一段可重用的代碼塊,用于執(zhí)行特定的任務(wù)或完成特定的操作。函數(shù)可以接收輸入?yún)?shù),對(duì)其進(jìn)行處理,并返回輸出結(jié)果。

函數(shù)是模塊化編程的重要概念,它可以將復(fù)雜的程序拆分成多個(gè)小的、獨(dú)立的部分,每個(gè)部分都完成自己的工作。函數(shù)可以提高代碼的可讀性、可維護(hù)性和可重用性。

在Python中,函數(shù)是一類對(duì)象,可以傳遞給其他函數(shù)、嵌套在其他函數(shù)中、賦值給變量等。Python中的函數(shù)還支持默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)等高級(jí)特性,可以更靈活地滿足不同的需求。

Chat:

在Python中,函數(shù)是一等公民(First-class Citizens),這意味著函數(shù)可以像其他數(shù)據(jù)類型(整數(shù)、字符串、列表等)一樣,作為參數(shù)傳遞給其他函數(shù)。將函數(shù)作為參數(shù)傳遞給其他函數(shù),是一種常見的函數(shù)式編程技巧,它使得代碼更加靈活、模塊化,能夠更好地支持抽象和重用。

讓我們通過一個(gè)例子來說明函數(shù)作為參數(shù)傳遞的概念。假設(shè)我們有一個(gè)函數(shù)apply_operation,它接受兩個(gè)參數(shù):一個(gè)操作函數(shù)和兩個(gè)操作數(shù),并將這兩個(gè)操作數(shù)傳遞給操作函數(shù)進(jìn)行處理。

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def apply_operation(operation, x, y):
    return operation(x, y)

result_add = apply_operation(add, 3, 5)
result_subtract = apply_operation(subtract, 8, 3)

print(result_add)      # Output: 8 (3 + 5)
print(result_subtract) # Output: 5 (8 - 3)

在這個(gè)例子中,我們定義了兩個(gè)函數(shù)addsubtract,它們分別執(zhí)行加法和減法操作。然后,我們定義了一個(gè)函數(shù)apply_operation,該函數(shù)接受一個(gè)操作函數(shù)和兩個(gè)操作數(shù),然后調(diào)用操作函數(shù)將這兩個(gè)操作數(shù)傳遞給它,并返回操作的結(jié)果。

在調(diào)用apply_operation函數(shù)時(shí),我們將addsubtract函數(shù)作為參數(shù)傳遞給了apply_operation函數(shù)。這樣,apply_operation函數(shù)可以根據(jù)傳入的操作函數(shù)來執(zhí)行不同的操作,實(shí)現(xiàn)了一種策略模式(Strategy Pattern)的應(yīng)用。

通過將函數(shù)作為參數(shù)傳遞,我們可以在不修改apply_operation函數(shù)的情況下,通過不同的操作函數(shù)來實(shí)現(xiàn)不同的行為。這種技巧可以讓我們的代碼更加靈活,降低代碼的重復(fù)性,提高代碼的可讀性和維護(hù)性。

解題【找出列表中滿足條件的所有成員組合及其對(duì)應(yīng)的下標(biāo)組合】:

找出列表中滿足條件的所有成員組合及其對(duì)應(yīng)的下標(biāo)組合:
輸入: nums = [2,2,7,6,1,7,3,6,2,3],target = 9輸出:
所有成員組合:[(2,7),(2,7),(2,7),(2,7),(7,2),(6,3),(6,3),(7,2),(3,6),(6,3)]
成員下標(biāo)組合:[(0,2),(0,5),(1,2),(1,5),(2,8),(3,6),(3,9),(5,8),(6,7).(7,9)]
解釋:滿足條件的兩兩成員進(jìn)行組合

我在VScode學(xué)Python(Python函數(shù),Python模塊導(dǎo)入),Python學(xué)習(xí),vscode,python,ide

代碼

def find_combinations(nums, target):

    member_combinations = []
    index_combinations = []
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            if nums[i] + nums[j] == target:
                member_combinations.append((nums[i], nums[j]))
                index_combinations.append((i, j))
    return member_combinations, index_combinations
nums = [2, 2, 7, 6, 1, 7, 3, 6, 2, 3]
target = 9
member_combinations, index_combinations = find_combinations(nums, target)
print("所有成員組合:", member_combinations)
print("成員下標(biāo)組合:", index_combinations)

Py函數(shù)的定義

Python的函數(shù)定義格式如下:

def function_name(parameters):
    """docstring"""
    # function body
    return [expression]

其中,def關(guān)鍵字用來定義函數(shù),function_name是函數(shù)名,parameters是函數(shù)的參數(shù)列表(可以為空),用圓括號(hào)括起來。

函數(shù)體開始的字符串是文檔字符串,用于描述函數(shù)的作用和用法,可選項(xiàng)。函數(shù)體中包含了函數(shù)的主要邏輯。return語句用于返回函數(shù)的結(jié)果(可以為空)。

Py函數(shù)怎么調(diào)用

在Python中,調(diào)用函數(shù)需要使用函數(shù)名和一對(duì)括號(hào),括號(hào)中可以傳遞參數(shù)。例如,我們有一個(gè)求和函數(shù):

def add(x, y):
    return x + y

我們可以通過以下方式調(diào)用這個(gè)函數(shù):

result = add(3, 5)
print(result)  # 輸出8

在調(diào)用函數(shù)時(shí),需要將參數(shù)傳遞給函數(shù)。在上面的例子中,我們將3和5作為參數(shù)傳遞給add函數(shù),然后將函數(shù)的返回值賦值給變量result,并輸出結(jié)果。

如果函數(shù)返回None,我們可以直接調(diào)用函數(shù)而不對(duì)其返回值進(jìn)行任何操作,例如:

def print_hello():
    print("Hello")
    
print_hello()  # 輸出Hello

在調(diào)用函數(shù)時(shí),不要忘記將參數(shù)傳遞給函數(shù),并將函數(shù)的返回值存儲(chǔ)在需要的變量中,以便進(jìn)一步處理。

嵌套調(diào)用

函數(shù)的嵌套調(diào)用是指在一個(gè)函數(shù)的執(zhí)行過程中,調(diào)用了另一個(gè)函數(shù)。具體實(shí)現(xiàn)可以在函數(shù)的代碼中,直接在需要調(diào)用的函數(shù)后添加括號(hào),并將需要傳遞給該函數(shù)的參數(shù)作為括號(hào)中的參數(shù)傳遞進(jìn)去。例如:

def function_a(x):
    result = x * 2
    return result

def function_b(y):
    result = y + 1
    return result

def function_c(z):
    result_a = function_a(z)
    result_b = function_b(result_a)
    return result_b

print(function_c(3))  # 輸出結(jié)果為 7

在上面的代碼中,函數(shù) function_c 調(diào)用了函數(shù) function_a 和函數(shù) function_b,并將其中一個(gè)函數(shù)的返回值作為另一個(gè)函數(shù)的參數(shù)傳遞進(jìn)去,最終返回了 function_b 的結(jié)果。這種方式可以使程序的結(jié)構(gòu)更加清晰,邏輯更加簡單,也可以增加代碼的復(fù)用性。

在使用Python函數(shù)時(shí),有一些注意事項(xiàng)需要注意:

  1. 函數(shù)名不能與Python內(nèi)置函數(shù)或關(guān)鍵字相同。如果名字相同會(huì)導(dǎo)致程序運(yùn)行出錯(cuò)。

  2. 在函數(shù)定義中,參數(shù)名應(yīng)該具有描述性,而且應(yīng)該具有一致的命名約定。例如,如果函數(shù)接收一個(gè)字符串參數(shù),參數(shù)名應(yīng)該以“str”結(jié)尾。

  3. 函數(shù)的參數(shù)傳遞可以是位置參數(shù)(按照定義順序傳遞)或關(guān)鍵字參數(shù)(使用參數(shù)名傳遞),但是一旦使用關(guān)鍵字參數(shù),后續(xù)的所有參數(shù)都必須使用關(guān)鍵字參數(shù)。

  4. 在函數(shù)定義中,如果一個(gè)參數(shù)有一個(gè)默認(rèn)值,那么它必須是最后一個(gè)參數(shù)。否則,會(huì)導(dǎo)致錯(cuò)誤。

  5. Python中的函數(shù)可以返回多個(gè)值,這些值將作為元組返回。

  6. 函數(shù)內(nèi)部執(zhí)行完畢之后,局部變量會(huì)被自動(dòng)銷毀。如果需要在函數(shù)之間共享變量,可以將變量定義為全局變量。

  7. 函數(shù)應(yīng)該盡可能地簡潔明了,只做一件事情并確保它做得很好。

  8. 函數(shù)應(yīng)該被文檔化,以便用戶更好地了解它們的特性和使用方法。可以使用函數(shù)注釋來描述函數(shù)的輸入和輸出參數(shù),以及函數(shù)的目的和行為。

  9. 在Python中,函數(shù)可以嵌套定義,即一個(gè)函數(shù)可以在另一個(gè)函數(shù)內(nèi)定義。嵌套函數(shù)可以訪問父函數(shù)的變量和參數(shù)。

Python函數(shù)的參數(shù)調(diào)用有以下幾種方式:

  1. 位置參數(shù):按照函數(shù)定義的順序?qū)?shù)傳遞給函數(shù)即可。例如:
def greet(name, message):
    print(message, name)

greet('Alice', 'Hello')  # 輸出:Hello Alice
  1. 關(guān)鍵字參數(shù):使用參數(shù)名來指定傳遞的參數(shù)值。例如:
def greet(name, message):
    print(message, name)

greet(message='Hello', name='Alice')  # 輸出:Hello Alice
  1. 默認(rèn)參數(shù):在函數(shù)定義中指定一個(gè)默認(rèn)參數(shù)值。如果在函數(shù)調(diào)用中未提供該參數(shù),將使用默認(rèn)值。例如:
def greet(name, message='Hello'):
    print(message, name)

greet('Alice')        # 輸出:Hello Alice
greet('Alice', 'Hi')  # 輸出:Hi Alice
  1. 可變參數(shù):在函數(shù)定義中使用*args可以接受任意數(shù)量的位置參數(shù),并將它們放入一個(gè)元組中。例如:
def greet(*names):
    for name in names:
        print('Hello', name)

greet('Alice', 'Bob', 'Charlie')  # 輸出:Hello Alice,Hello Bob,Hello Charlie
  1. 關(guān)鍵字可變參數(shù):在函數(shù)定義中使用**kwargs可以接受任意數(shù)量的關(guān)鍵字參數(shù),并將它們放入一個(gè)字典中。例如:
def greet(**kwargs):
    for name, message in kwargs.items():
        print(message, name)

greet(Alice='Hello', Bob='Hi', Charlie='Hey')  # 輸出:Hello Alice,Hi Bob,Hey Charlie

需要注意的是,參數(shù)的調(diào)用方式必須與函數(shù)定義中的順序或名稱一致,并且參數(shù)的數(shù)量必須與函數(shù)定義中一致。

注意:

函數(shù)定義時(shí)的參數(shù)被稱為形式參數(shù),因?yàn)樗鼈冎淮嬖谟诤瘮?shù)的定義中,用于表示在函數(shù)調(diào)用時(shí)需要傳入的參數(shù)的類型和數(shù)量。形式參數(shù)通常作為函數(shù)簽名的一部分,在函數(shù)定義中指定。

函數(shù)調(diào)用時(shí)傳遞給函數(shù)的參數(shù)被稱為實(shí)際參數(shù)。實(shí)際參數(shù)的數(shù)量和類型必須與函數(shù)定義中的形式參數(shù)匹配,否則會(huì)導(dǎo)致編譯錯(cuò)誤。

在Python中,函數(shù)的參數(shù)數(shù)量不限,使用逗號(hào)分隔開。當(dāng)調(diào)用函數(shù)時(shí),要將傳入的實(shí)際參數(shù)與形式參數(shù)一一對(duì)應(yīng),逗號(hào)隔開它們。如果函數(shù)有多個(gè)參數(shù),則必須按照函數(shù)定義中參數(shù)的順序傳遞參數(shù)。例如,如果函數(shù)定義為def my_function(a, b, c):,則函數(shù)調(diào)用應(yīng)該是my_function(value_for_a, value_for_b, value_for_c),其中value_for_avalue_for_bvalue_for_c是傳遞給函數(shù)的實(shí)際參數(shù)。

返回值【函數(shù)在執(zhí)行完成后,返回給調(diào)用者的結(jié)果】

函數(shù)體在遇到return后就結(jié)束了,所以寫在return后的代碼不會(huì)執(zhí)行。

Python函數(shù)的返回值是指函數(shù)執(zhí)行完畢后所返回的結(jié)果。在函數(shù)體內(nèi),可以使用關(guān)鍵字return來指定函數(shù)的返回值。當(dāng)調(diào)用函數(shù)時(shí),函數(shù)會(huì)執(zhí)行其中的代碼,并將return語句后面的表達(dá)式計(jì)算出的值作為返回值返回給調(diào)用者。如果函數(shù)沒有明確指定return語句,或者return語句沒有指定返回值,則默認(rèn)返回None。對(duì)于有返回值的函數(shù),調(diào)用者可以接收并使用該返回值進(jìn)行后續(xù)操作。

None的價(jià)值:【一個(gè)特殊的字面量,其類型是:<class NoneType’>。無返回值的函數(shù),實(shí)際上就是返回了: None這個(gè)字面量】
定義變量,但暫時(shí)不需要變量有具體值,可以用None來代替

None在Python中是一個(gè)特殊的對(duì)象,表示空值或缺失值。它通常用作函數(shù)沒有明確返回值時(shí)默認(rèn)的返回值。

None具有以下用途和價(jià)值:

  1. 表示函數(shù)沒有返回值:當(dāng)函數(shù)沒有指定return語句或者return語句沒有指定返回值時(shí),默認(rèn)返回None。這可以告訴調(diào)用者函數(shù)執(zhí)行完畢并且沒有返回任何結(jié)果。

  2. 初始化變量:可以將變量初始化為None,表示該變量當(dāng)前沒有具體的值。后續(xù)可以根據(jù)需要給變量賦予其他的值。

  3. 判斷條件:None可以用于條件判斷,例如檢查一個(gè)變量是否為None來確定是否有有效的值。

  4. 默認(rèn)參數(shù)值:函數(shù)定義時(shí)可以指定參數(shù)的默認(rèn)值,常見的默認(rèn)值就是None。這樣在調(diào)用函數(shù)時(shí)如果沒有提供相應(yīng)的參數(shù),就會(huì)使用默認(rèn)值None。

  5. 占位符:在開發(fā)中,有時(shí)候需要先聲明一個(gè)變量或占位符,但還沒有具體的值或計(jì)算結(jié)果。這時(shí)可以使用None來表示,避免出現(xiàn)錯(cuò)誤或異常。

總之,None是在Python中用來表示缺失值、空值或未定義狀態(tài)的特殊對(duì)象,具有一定的實(shí)用價(jià)值。

代碼:
當(dāng)一個(gè)函數(shù)沒有明確的返回值時(shí),它會(huì)默認(rèn)返回`None`。以下是一個(gè)簡單的例子:

```python
def greet(name):
    print("Hello, " + name)

result = greet("Alice")
print(result)

輸出:

Hello, Alice
None

在上面的例子中,greet函數(shù)接受一個(gè)參數(shù) name,并打印出問候語。但函數(shù)沒有指定返回值,因此默認(rèn)返回None。在調(diào)用greet("Alice")后,會(huì)打印出Hello, Alice,然后將返回值賦給變量result。最后,通過打印result可以看到它的值為None。這表明函數(shù)執(zhí)行完畢后沒有返回具體的結(jié)果。

請(qǐng)注意,None是Python中的一個(gè)常量,表示空值,通常用于表示一個(gè)不存在或無效的情況。

多個(gè)返回值:

python如何接受多個(gè)返回值、
要在Python中接受多個(gè)返回值,可以使用元組(tuple)的方式。當(dāng)函數(shù)返回多個(gè)值時(shí),可以將這些值封裝在一個(gè)元組中,并通過解包的方式將其賦值給多個(gè)變量。

def get_values():
    return 1, 2, 3

a, b, c = get_values()

print(a)  # 輸出: 1
print(b)  # 輸出: 2
print(c)  # 輸出: 3

解包分別賦值給變量 a、b 和 c。最后,我們分別打印了這三個(gè)變量的值。

python參數(shù)的使用方式有哪幾種:

在Python中,參數(shù)的使用方式有以下幾種:

1. 位置參數(shù)(Positional Arguments):這是最常見的參數(shù)傳遞方式。當(dāng)你調(diào)用一個(gè)函數(shù)時(shí),按照函數(shù)定義的順序,將參數(shù)依次傳遞給函數(shù)。例如:

一 一 對(duì) 應(yīng)

def greet(name, greeting):
    print(f"{greeting}, {name}!")

greet("John", "Hello")  # Output: Hello, John!

2. 關(guān)鍵字參數(shù)【鍵–值】(Keyword Arguments):在函數(shù)調(diào)用時(shí),通過指定參數(shù)名和值的方式傳遞參數(shù)。==這樣可以不用按照順序傳遞參數(shù),提高了代碼的可讀性。==例如:

def greet(name, greeting):
    print(f"{greeting}, {name}!")

greet(greeting="Hello", name="John")  # Output: Hello, John!
使用關(guān)鍵字傳參可以不按照固定順序傳遞參數(shù),使得函數(shù)調(diào)用更加靈活和清晰的代碼舉例:

使用缺省參數(shù)(Default Arguments)和關(guān)鍵字傳參(Keyword Arguments)來實(shí)現(xiàn)更靈活的函數(shù)調(diào)用。這樣可以使函數(shù)調(diào)用更加清晰、容易使用,并且消除了參數(shù)的順序需求。

def user_info(name, age, gender="未知"):
    print(f"您的名字是: {name},年齡是: {age},性別是: {gender}")

# 使用關(guān)鍵字傳參,不需要按照固定順序
user_info(name="小明", age=20, gender="男")

# 也可以不指定性別參數(shù),將使用缺省參數(shù)的默認(rèn)值
user_info(name="小紅", age=25)

# 可以和位置參數(shù)混用,但位置參數(shù)必須在前,且匹配參數(shù)順序
user_info("小剛", age=18, gender="男")

我在VScode學(xué)Python(Python函數(shù),Python模塊導(dǎo)入),Python學(xué)習(xí),vscode,python,ide

在這個(gè)示例中,我們?yōu)閡ser_info函數(shù)的gender參數(shù)設(shè)置了默認(rèn)值"未知"。這樣在函數(shù)調(diào)用時(shí),如果沒有指定性別參數(shù),就會(huì)使用默認(rèn)值。同時(shí),使用關(guān)鍵字傳參可以不按照固定順序傳遞參數(shù),使得函數(shù)調(diào)用更加靈活和清晰。

請(qǐng)注意,當(dāng)使用關(guān)鍵字傳參時(shí),必須將位置參數(shù)放在前面,并且按照函數(shù)定義的參數(shù)順序進(jìn)行匹配。這樣既能利用關(guān)鍵字傳參的靈活性,又能兼容位置參數(shù)的使用。

3. 默認(rèn)參數(shù)(Default Arguments):在定義函數(shù)時(shí),可以為某些參數(shù)指定默認(rèn)值。如果在函數(shù)調(diào)用時(shí)未提供這些參數(shù)的值,將使用默認(rèn)值。例如:

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

greet("John")  # Output: Hello, John!
greet("Jane", "Hi")  # Output: Hi, Jane!

4. 可變長參數(shù):Python中有兩種可變長參數(shù),分別是:

  • *args:用于接收任意數(shù)量的位置參數(shù),它將參數(shù)打包成一個(gè)元組(tuple)。
  • **kwargs:用于接收任意數(shù)量的關(guān)鍵字參數(shù),它將參數(shù)打包成一個(gè)字典(dict)。
def sum_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_numbers(1, 2, 3, 4))  # Output: 10

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="John", age=30, city="New York")
# Output:
# name: John
# age: 30
# city: New York

5 缺省參數(shù)(Default Arguments):

缺省參數(shù)允許你在函數(shù)定義時(shí)為某些參數(shù)指定默認(rèn)值,這樣在函數(shù)調(diào)用時(shí),如果沒有提供相應(yīng)參數(shù)的值,將會(huì)使用默認(rèn)值。這樣可以簡化函數(shù)調(diào)用,同時(shí)給函數(shù)提供了更大的靈活性。在函數(shù)定義時(shí),將希望具有默認(rèn)值的參數(shù)放在參數(shù)列表的末尾。

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

greet("John")          # Output: Hello, John! (默認(rèn)使用"greeting"參數(shù)的默認(rèn)值)
greet("Jane", "Hi")    # Output: Hi, Jane! (使用指定的"greeting"參數(shù)值)

6 不定長參數(shù)(可變長參數(shù)):

不定長參數(shù)允許你定義能夠接收任意數(shù)量參數(shù)的函數(shù)。在Python中,有兩種不定長參數(shù):

  • *args:用于接收任意數(shù)量的位置參數(shù),它將這些參數(shù)打包成一個(gè)元組(tuple)。
  • **kwargs:用于接收任意數(shù)量的關(guān)鍵字參數(shù),它將這些參數(shù)打包成一個(gè)字典(dict)。

使用不定長參數(shù)可以處理傳遞數(shù)量未知的參數(shù),讓函數(shù)更加靈活。在函數(shù)定義時(shí),使用"*args"和"**kwargs"來聲明不定長參數(shù)。

def sum_numbers(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_numbers(1, 2, 3, 4))  # Output: 10

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="John", age=30, city="New York")
# Output:
# name: John
# age: 30
# city: New York

在使用函數(shù)時(shí),可以結(jié)合缺省參數(shù)和不定長參數(shù),讓函數(shù)調(diào)用更加簡潔,并處理不同的參數(shù)傳遞情況。

當(dāng)涉及到不定長參數(shù),Python提供了兩種方式:不定位置參數(shù)(*args)和不定關(guān)鍵字參數(shù)(**kwargs)。
  1. 不定位置參數(shù)(*args):
    不定位置參數(shù)允許函數(shù)接受任意數(shù)量的位置參數(shù),并將這些參數(shù)打包成一個(gè)元組(tuple)。在函數(shù)定義時(shí),使用*args來聲明不定位置參數(shù)。這樣,在函數(shù)調(diào)用時(shí),我們可以傳遞任意數(shù)量的位置參數(shù)給函數(shù),它們將被自動(dòng)打包成一個(gè)元組。

    def print_arguments(*args):
        for arg in args:
            print(arg)
    
    print_arguments("apple", "banana", "orange")
    # Output:
    # apple
    # banana
    # orange
    

    在這個(gè)例子中,print_arguments函數(shù)接受不定數(shù)量的位置參數(shù),并將這些參數(shù)打包成一個(gè)元組。在函數(shù)調(diào)用時(shí),我們傳遞了三個(gè)位置參數(shù),它們被打包成了一個(gè)元組進(jìn)行輸出。

  2. 不定關(guān)鍵字參數(shù)(**kwargs):
    不定關(guān)鍵字參數(shù)允許函數(shù)接受任意數(shù)量的關(guān)鍵字參數(shù),并將這些參數(shù)打包成一個(gè)字典(dict)。在函數(shù)定義時(shí),使用**kwargs來聲明不定關(guān)鍵字參數(shù)。在函數(shù)調(diào)用時(shí),我們可以傳遞任意數(shù)量的關(guān)鍵字參數(shù)給函數(shù),它們將被自動(dòng)打包成一個(gè)字典。

    def print_info(**kwargs):
        for key, value in kwargs.items():
            print(f"{key}: {value}")
    
    print_info(name="John", age=30, city="New York")
    # Output:
    # name: John
    # age: 30
    # city: New York
    

    在這個(gè)例子中,print_info函數(shù)接受不定數(shù)量的關(guān)鍵字參數(shù),并將這些參數(shù)打包成一個(gè)字典。在函數(shù)調(diào)用時(shí),我們傳遞了三個(gè)關(guān)鍵字參數(shù),它們被打包成了一個(gè)字典進(jìn)行輸出。

  3. 混合使用不定位置和不定關(guān)鍵字參數(shù):
    當(dāng)函數(shù)需要同時(shí)接受任意數(shù)量的位置參數(shù)和關(guān)鍵字參數(shù)時(shí),我們可以混合使用*args**kwargs。

    def mixed_arguments(*args, **kwargs):
        print("Positional arguments:")
        for arg in args:
            print(arg)
    
        print("Keyword arguments:")
        for key, value in kwargs.items():
            print(f"{key}: {value}")
    
    mixed_arguments("apple", "banana", "orange", country="USA", city="New York")
    # Output:
    # Positional arguments:
    # apple
    # banana
    # orange
    # Keyword arguments:
    # country: USA
    # city: New York
    

    在這個(gè)例子中,mixed_arguments函數(shù)接受不定數(shù)量的位置參數(shù)和關(guān)鍵字參數(shù)。它將位置參數(shù)打包成元組,并將關(guān)鍵字參數(shù)打包成字典,然后按照不同類型輸出。

不定位置參數(shù)和不定關(guān)鍵字參數(shù)為我們提供了很大的靈活性,使得函數(shù)能夠處理各種不同數(shù)量和類型的參數(shù),從而更加通用和適用于各種場景。

匿名函數(shù)(lambda函數(shù)):

匿名函數(shù)是一種在編程中常用的簡單函數(shù)形式,也稱為lambda函數(shù)(lambda expressions)。它是一種用于創(chuàng)建小型、臨時(shí)的、無需命名的函數(shù)的一種方式。與常規(guī)的函數(shù)定義(def語句)不同,匿名函數(shù)使用lambda關(guān)鍵字進(jìn)行定義,通常在需要一個(gè)簡單函數(shù)而又不想定義一個(gè)完整函數(shù)的情況下使用。

匿名函數(shù)的語法如下:

lambda arguments: expression

其中,arguments是函數(shù)參數(shù)列表,expression是函數(shù)體的簡單表達(dá)式。匿名函數(shù)返回的是表達(dá)式的結(jié)果,沒有顯式的return語句。

以下是一個(gè)例子,使用匿名函數(shù)計(jì)算兩個(gè)數(shù)的和:

add = lambda x, y: x + y
result = add(3, 5)
print(result)  # Output: 8

在這個(gè)例子中,我們定義了一個(gè)匿名函數(shù)add,它接受兩個(gè)參數(shù)x和y,并返回它們的和。然后,我們調(diào)用匿名函數(shù)add(3, 5),返回的結(jié)果為8。

匿名函數(shù)適用于那些只需短暫使用、較為簡單的函數(shù)場景,由于其簡潔性,常用于函數(shù)式編程或某些特定的場合。需要注意的是,匿名函數(shù)的使用應(yīng)當(dāng)遵循適當(dāng)?shù)膱鼍昂秃线m的規(guī)模,過于復(fù)雜或需要多行代碼邏輯的情況,應(yīng)當(dāng)使用普通的命名函數(shù)(def語句)。

匿名函數(shù)和普通的定義的對(duì)比:

匿名函數(shù)(lambda函數(shù))和普通函數(shù)(使用def語句定義的函數(shù))是Python中兩種不同的函數(shù)定義方式。它們?cè)谑褂脠鼍?、語法和功能上有一些區(qū)別。讓我們對(duì)它們進(jìn)行對(duì)比:

  1. 語法:

    • 普通函數(shù):使用def語句來定義,可以有函數(shù)名、參數(shù)列表和函數(shù)體。
    • 匿名函數(shù):使用lambda關(guān)鍵字來定義,只能包含一個(gè)表達(dá)式,并沒有函數(shù)名,僅用于簡單的函數(shù)場景。
  2. 可讀性:

    • 普通函數(shù):由于有函數(shù)名和較為完整的語法結(jié)構(gòu),通常比較容易理解和閱讀。
    • 匿名函數(shù):由于沒有函數(shù)名,以及只能包含簡單的表達(dá)式,可讀性相對(duì)較差。通常用于較短的、簡單的函數(shù)需求。
  3. 參數(shù)個(gè)數(shù):

    • 普通函數(shù):可以有任意數(shù)量的參數(shù),可以使用默認(rèn)參數(shù)和可變長參數(shù)。
    • 匿名函數(shù):只能接受有限的參數(shù),通常用于只有幾個(gè)簡單參數(shù)的場景。
  4. 使用場景:

    • 普通函數(shù):適用于復(fù)雜的函數(shù)邏輯,可讀性要求較高,需要多次調(diào)用或復(fù)用的場合。
    • 匿名函數(shù):適用于一次性或臨時(shí)使用的簡單函數(shù),特別是在函數(shù)作為參數(shù)傳遞給其他函數(shù)或在函數(shù)式編程中使用。

下面是一個(gè)示例,比較了普通函數(shù)和匿名函數(shù)的使用:

# 普通函數(shù)
def add(x, y):
    return x + y

# 調(diào)用普通函數(shù)
result1 = add(3, 5)
print(result1)  # Output: 8

# 匿名函數(shù)
add_lambda = lambda x, y: x + y

# 調(diào)用匿名函數(shù)
result2 = add_lambda(3, 5)
print(result2)  # Output: 8

在這個(gè)例子中,我們定義了一個(gè)普通函數(shù)add和一個(gè)匿名函數(shù)add_lambda,它們的功能相同,都是實(shí)現(xiàn)加法操作。使用匿名函數(shù)能夠更簡潔地定義一個(gè)簡單的函數(shù),但在可讀性方面可能稍遜于普通函數(shù)。

綜上所述,匿名函數(shù)是一種簡化的函數(shù)定義形式,適用于簡單的、一次性的函數(shù)需求,而普通函數(shù)更適用于復(fù)雜的、需要多次調(diào)用或復(fù)用的函數(shù)邏輯。選擇合適的函數(shù)定義方式取決于具體的編程場景和需求。

Python模塊

Python模塊是一種組織和重用代碼的方式,它是一個(gè)包含Python定義和語句的文件。模塊可以包含函數(shù)、變量和類等,它們可以在其他Python程序中被導(dǎo)入和使用。使用模塊的好處之一是可以將代碼拆分為邏輯單元,提高代碼的可維護(hù)性和復(fù)用性。

模塊的導(dǎo)入方式

[from 模塊名] import [模塊 類 變量函數(shù)] [as 別名]
  1. import 模塊名
    這是最基本的導(dǎo)入方式,它將整個(gè)模塊導(dǎo)入到當(dāng)前的命名空間中。要使用模塊中的功能,需要使用模塊名.功能名的方式訪問。例如:import math,然后使用math.sqrt()調(diào)用平方根函數(shù)。
import math
print(math.sqrt(16))  # 調(diào)用math模塊的sqrt()函數(shù)計(jì)算平方根

  1. from 模塊名 import 類、變量、方法等
    使用此方式,可以選擇性地導(dǎo)入模塊中的特定類、變量或方法等到當(dāng)前命名空間,而不是整個(gè)模塊。可以直接使用導(dǎo)入的名稱,而無需使用模塊名作為前綴。例如:from math import sqrt, pi,然后可以直接使用sqrt()pi
from math import sqrt, pi
print(sqrt(16))  # 直接調(diào)用sqrt()函數(shù)計(jì)算平方根
print(pi)        # 直接輸出導(dǎo)入的pi常量的值

  1. from 模塊名 import *
    這種方式將導(dǎo)入模塊中的所有公開(沒有以_開頭的)名稱到當(dāng)前命名空間中。盡管它方便了訪問,但容易導(dǎo)致名稱沖突和代碼不易維護(hù),因此不推薦在生產(chǎn)代碼中使用。
from math import *
print(sqrt(16))  # 直接調(diào)用sqrt()函數(shù)計(jì)算平方根
print(pi)        # 直接輸出導(dǎo)入的pi常量的值

  1. import 模塊名 as 別名
    使用as關(guān)鍵字,可以為模塊指定一個(gè)別名,這樣在代碼中可以使用別名來引用模塊。這在避免名稱沖突或簡化模塊名時(shí)很有用。例如:import numpy as np,然后可以使用np.array()調(diào)用NumPy的數(shù)組函數(shù)。
import numpy as np
arr = np.array([1, 2, 3])  # 使用別名np調(diào)用NumPy模塊的array()函數(shù)創(chuàng)建數(shù)組

  1. from 模塊名 import 功能名 as 別名
    這種方式將導(dǎo)入模塊中的特定功能,并且給它們指定別名??梢灾苯邮褂脛e名來調(diào)用這些功能,而無需使用原始的名稱或模塊名作為前綴。例如:from math import sqrt as square_root,然后可以使用square_root()代替sqrt()。
from math import sqrt as square_root
print(square_root(16))  # 使用別名square_root調(diào)用sqrt()函數(shù)計(jì)算平方根

注意:在實(shí)際編程中,建議使用import 模塊名from 模塊名 import 功能名的形式,避免使用from 模塊名 import *,因?yàn)楹笳呖赡軐?dǎo)致不可預(yù)料的問題。同時(shí),為了代碼的可讀性和維護(hù)性,建議為導(dǎo)入的模塊和功能使用有意義的別名。

對(duì)比:

1和3

區(qū)別如下:

  1. import 模塊名
    這種導(dǎo)入方式將整個(gè)模塊導(dǎo)入到當(dāng)前命名空間中。需要使用模塊名.功能名的方式來訪問模塊中的功能。例如,import math導(dǎo)入了math模塊,然后使用math.sqrt()來調(diào)用平方根函數(shù)。

  2. from 模塊名 import *
    這種導(dǎo)入方式將導(dǎo)入模塊中的所有公開(沒有以_開頭的)名稱到當(dāng)前命名空間中。公開的意思是模塊中的所有變量、函數(shù)、類等,除了以_開頭的私有成員。這樣,可以直接使用導(dǎo)入的名稱,而無需使用模塊名作為前綴。例如,from math import *將導(dǎo)入math模塊中的所有公開成員,然后可以直接使用sqrt()pi,而不需要寫成math.sqrt()math.pi。

主要區(qū)別:

  • 在第1種方式中,需要使用模塊名.功能名的方式來訪問模塊中的功能,而在第3種方式中,可以直接使用導(dǎo)入的名稱來訪問功能,避免了使用模塊名前綴。
  • 第1種方式比第3種方式更安全,因?yàn)樵诘?種方式中導(dǎo)入了模塊中的所有公開成員,容易導(dǎo)致命名沖突,不推薦在生產(chǎn)代碼中使用。第1種方式只導(dǎo)入了整個(gè)模塊,并且使用模塊名前綴,避免了命名沖突的問題。

因此,為了代碼的可讀性和維護(hù)性,建議使用第1種方式(import 模塊名)或第2種方式(from 模塊名 import 功能名),而不是第3種方式。

在模塊導(dǎo)入的速度方面,通常情況下,第2種導(dǎo)入方式(from 模塊名 import 類、變量、方法等)會(huì)比第3種方式(from 模塊名 import *)更快。

原因如下:

  1. 第2種方式明確指定了要導(dǎo)入的類、變量或方法等,因此Python解釋器只會(huì)導(dǎo)入指定的內(nèi)容,減少了導(dǎo)入的工作量和內(nèi)存占用。
  2. 第3種方式將導(dǎo)入模塊中的所有公開成員,如果模塊很大或者有許多功能,可能會(huì)導(dǎo)致較多的內(nèi)存使用和加載時(shí)間。
  3. 在第2種方式中,只有明確指定的功能會(huì)被導(dǎo)入到當(dāng)前命名空間中,這樣可以避免導(dǎo)入不需要的功能,提高了代碼的清晰度和可維護(hù)性。

雖然第2種方式在速度方面可能會(huì)更快,但在實(shí)際使用中,導(dǎo)入速度通常不是主要的性能瓶頸。更重要的是要選擇適合代碼清晰性和可讀性的導(dǎo)入方式。因此,建議在生產(chǎn)代碼中使用第2種方式,并明確指定要導(dǎo)入的功能,避免使用第3種方式導(dǎo)入所有內(nèi)容。這樣可以保持代碼的整潔性和性能表現(xiàn)。

整體分析優(yōu)缺點(diǎn);

讓我們對(duì)這五種導(dǎo)入方式進(jìn)行對(duì)比:

  1. import 模塊名

    • 導(dǎo)入整個(gè)模塊,需要使用模塊名前綴訪問其中的功能。
    • 可以在代碼中多次使用該方式導(dǎo)入同一個(gè)模塊,不會(huì)造成沖突。
    • 適用于模塊較大或需要多個(gè)功能的情況。
  2. from 模塊名 import 類、變量、方法等

    • 選擇性導(dǎo)入模塊中的特定功能,無需使用模塊名前綴,直接使用導(dǎo)入的名稱即可訪問。
    • 可以一次導(dǎo)入多個(gè)功能,提高代碼的簡潔性。
    • 避免了使用模塊名前綴,適用于只需要少量功能的情況。
  3. from 模塊名 import *

    • 導(dǎo)入模塊中的所有公開名稱,不推薦在生產(chǎn)代碼中使用。
    • 容易導(dǎo)致名稱沖突和代碼維護(hù)困難,避免使用此方式。
  4. import 模塊名 as 別名

    • 給模塊指定別名,使用別名來引用模塊中的功能。
    • 適用于模塊名較長或需要避免名稱沖突的情況。
  5. from 模塊名 import 功能名 as 別名

    • 導(dǎo)入模塊中的特定功能,并指定別名,直接使用別名調(diào)用功能。
    • 可以簡化代碼,避免使用原始的名稱或模塊名前綴。

綜合來看,第1種和第2種方式是最常用的。第1種方式適用于導(dǎo)入整個(gè)模塊,第2種方式適用于選擇性導(dǎo)入特定功能。第3種方式不推薦使用,因?yàn)樗赡軒頋撛诘膯栴}。第4種和第5種方式適用于需要?jiǎng)e名的情況,可以提高代碼的可讀性和簡潔性??傮w上,選擇合適的導(dǎo)入方式取決于具體的情況和代碼的需求。

自定義模塊:

自定義模塊是指由用戶創(chuàng)建的包含Python代碼的文件,它可以包含函數(shù)、類、變量等可重用的代碼塊。自定義模塊的主要目的是將代碼組織成邏輯單元,以便在不同的Python程序中進(jìn)行導(dǎo)入和使用,提高代碼的可維護(hù)性和復(fù)用性。

自定義模塊的創(chuàng)建步驟如下:

  1. 編寫Python代碼并保存為以.py為擴(kuò)展名的文件,文件名將成為模塊的名稱。
  2. 將保存好的文件放在Python解釋器能夠找到的目錄中,比如當(dāng)前工作目錄或者Python標(biāo)準(zhǔn)庫搜索路徑。

以下是一個(gè)自定義模塊的示例:

假設(shè)我們創(chuàng)建了一個(gè)名為my_utils.py的自定義模塊,其中包含一些實(shí)用的函數(shù):

# my_utils.py

def square(x):
    """計(jì)算一個(gè)數(shù)的平方"""
    return x * x

def add(a, b):
    """計(jì)算兩個(gè)數(shù)的和"""
    return a + b

PI = 3.14159

然后我們可以在其他Python程序中導(dǎo)入并使用這個(gè)自定義模塊:

# 導(dǎo)入整個(gè)模塊
import my_utils

print(my_utils.square(5))  # 輸出:25
print(my_utils.add(3, 7))  # 輸出:10
print(my_utils.PI)         # 輸出:3.14159

# 導(dǎo)入特定的函數(shù)和變量
from my_utils import square, PI

print(square(8))   # 輸出:64
print(PI)          # 輸出:3.14159

注意事項(xiàng):

  1. 自定義模塊的文件名應(yīng)該以.py結(jié)尾,例如my_utils.py
  2. 確保自定義模塊與使用它的Python程序在相同的目錄或正確的Python搜索路徑下。
  3. 使用import語句導(dǎo)入整個(gè)模塊時(shí),需要使用模塊名前綴訪問模塊中的函數(shù)和變量。
  4. 使用from 模塊名 import 功能名形式導(dǎo)入特定的函數(shù)和變量時(shí),可以直接使用功能名,無需使用模塊名前綴。

注意事項(xiàng):

當(dāng)導(dǎo)入多個(gè)模塊時(shí),并且這些模塊內(nèi)部存在重名的函數(shù)、類、或變量等,可能會(huì)引起名稱沖突的情況。這時(shí),Python解釋器可能無法區(qū)分具體使用哪個(gè)模塊中的重名功能,從而導(dǎo)致代碼出現(xiàn)錯(cuò)誤或產(chǎn)生意外的結(jié)果。
在Python中,如果不同的模塊導(dǎo)入了同名的功能(函數(shù)、類等),并且這些模塊都被成功導(dǎo)入到同一個(gè)腳本中,后導(dǎo)入的模塊將會(huì)覆蓋先導(dǎo)入的模塊中的同名功能。這種行為被稱為"名稱沖突"(name conflict)。

當(dāng)存在名稱沖突時(shí),后導(dǎo)入的模塊中的同名功能會(huì)覆蓋先導(dǎo)入的模塊中的同名功能。這意味著在腳本中使用該功能時(shí),實(shí)際上會(huì)使用最后被導(dǎo)入的模塊中的版本。

讓我們通過一個(gè)示例來說明這個(gè)概念。假設(shè)有兩個(gè)模塊module_a.pymodule_b.py,它們都定義了同名的函數(shù)common_function

# module_a.py
def common_function():
    print("This is common function from module_a")

# module_b.py
def common_function():
    print("This is common function from module_b")

現(xiàn)在,我們?cè)谝粋€(gè)腳本中導(dǎo)入這兩個(gè)模塊,并調(diào)用common_function

from module_a import common_function
from module_b import common_function

common_function()

輸出將會(huì)是:

This is common function from module_b

因?yàn)?code>module_b.py最后被導(dǎo)入,并且它的common_function覆蓋了module_a.py中的同名函數(shù)。這是由于后導(dǎo)入的模塊會(huì)覆蓋先導(dǎo)入的模塊中的同名成員。

為了避免這種名稱沖突問題,建議遵循以下幾個(gè)最佳實(shí)踐:

  1. 使用別名:當(dāng)導(dǎo)入同名功能時(shí),可以給其中一個(gè)或多個(gè)功能指定別名,以避免名稱沖突。例如:from module_a import common_function as a_function

  2. 明確導(dǎo)入:盡量避免使用from module import *這種方式,而是明確導(dǎo)入需要的功能。例如:from module_a import common_functionfrom module_b import common_function。

  3. 命名空間:如果模塊的名稱很常見并且可能與其他模塊發(fā)生沖突,可以使用模塊的命名空間來調(diào)用其中的功能。例如:import module_aimport module_b,然后使用module_a.common_function()module_b.common_function()來調(diào)用相應(yīng)的功能。

要避免這種情況,可以采用以下方法:
  1. 使用完整模塊名:
    在調(diào)用重名功能時(shí),可以使用完整的模塊名作為前綴,明確指定使用哪個(gè)模塊中的功能,避免沖突。

示例:

import module1
import module2

print(module1.some_function())  # 調(diào)用module1中的函數(shù)
print(module2.some_function())  # 調(diào)用module2中的函數(shù)
  1. 使用別名(as 別名):
    為導(dǎo)入的模塊或重名功能指定別名,使用別名來區(qū)分不同模塊中的重名功能。

示例:

import module1 as m1
import module2 as m2

print(m1.some_function())  # 調(diào)用module1中的函數(shù)
print(m2.some_function())  # 調(diào)用module2中的函數(shù)
  1. 使用from-import語句:
    如果只需要導(dǎo)入部分功能,并且這些功能重名,可以使用from-import語句,并為導(dǎo)入的功能指定別名。

示例:

from module1 import some_function as func1
from module2 import some_function as func2

print(func1())  # 調(diào)用module1中的函數(shù)
print(func2())  # 調(diào)用module2中的函數(shù)

使用上述方法之一,可以避免模塊之間的名稱沖突,確保代碼能夠正確運(yùn)行并得到預(yù)期的結(jié)果。在實(shí)際編程中,建議為導(dǎo)入的模塊和功能使用有意義的別名,以增加代碼的可讀性和易于維護(hù)性。

__main__變量:

在Python中,__main__是一個(gè)特殊的內(nèi)置變量(built-in variable),用于指示當(dāng)前執(zhí)行的腳本是否為主程序(main program)。當(dāng)Python解釋器運(yùn)行一個(gè)腳本時(shí),它會(huì)為這個(gè)腳本設(shè)置一些特定的變量,其中包括__name__。如果一個(gè)Python腳本被直接運(yùn)行,那么__name__變量的值將被設(shè)置為__main__,否則,如果這個(gè)腳本作為模塊被導(dǎo)入到其他腳本中,__name__的值將是模塊的名稱。

更具體地說,當(dāng)你在命令行中直接運(yùn)行一個(gè)Python腳本時(shí),Python解釋器會(huì)將這個(gè)腳本的__name__變量設(shè)置為__main__,以表示這個(gè)腳本是主程序。這樣,你可以通過檢查__name__的值來執(zhí)行特定的代碼塊。這在構(gòu)建可重用的模塊和腳本時(shí)非常有用,因?yàn)樗试S你在不同的上下文中運(yùn)行不同的代碼。

舉個(gè)例子,假設(shè)有一個(gè)名為example.py的腳本,其內(nèi)容如下:

def do_something():
    print("Doing something!")

print("This will always be executed!")

if __name__ == "__main__":
    print("This will only be executed when the script is run directly.")
    do_something()

如果你在命令行中執(zhí)行python example.py,你會(huì)得到以下輸出:

This will always be executed!
This will only be executed when the script is run directly.
Doing something!

但是,如果你在另一個(gè)腳本中導(dǎo)入example.py,if __name__ == "__main__":塊中的代碼將不會(huì)執(zhí)行。例如,假設(shè)有一個(gè)名為main.py的腳本,其內(nèi)容如下:

import example

print("This is the main program.")

如果你執(zhí)行python main.py,你會(huì)得到以下輸出:

This will always be executed!
This is the main program.

可以看到,example.py中的if __name__ == "__main__":塊中的代碼沒有執(zhí)行,因?yàn)樗?code>main.py中被導(dǎo)入為一個(gè)模塊。

總結(jié)一下,__main__變量是Python中的一個(gè)特殊內(nèi)置變量,用于判斷當(dāng)前腳本是否為主程序。通過檢查__name__的值,你可以在腳本作為主程序執(zhí)行時(shí)運(yùn)行特定的代碼塊,而在作為模塊導(dǎo)入時(shí)不執(zhí)行這些代碼塊。

all:

__all__是另一個(gè)Python中的特殊變量。它是一個(gè)可選的列表,用于定義模塊中哪些成員(變量、函數(shù)、類等)應(yīng)該在使用from module import *語句時(shí)被導(dǎo)入。這個(gè)特性主要用于控制模塊的公共接口,以避免意外地導(dǎo)入不必要的成員。

當(dāng)你在一個(gè)模塊中定義了__all__變量時(shí),它會(huì)限制在使用from module import *語句導(dǎo)入時(shí)所導(dǎo)入的內(nèi)容。如果沒有定義__all__變量,使用from module import *將導(dǎo)入模塊中所有沒有以下劃線開頭的全局名稱(即公共成員),但這不是一個(gè)推薦的做法,因?yàn)樗鼤?huì)導(dǎo)入太多不必要的內(nèi)容,可能引起名稱沖突或不良影響。

來看一個(gè)示例,假設(shè)有一個(gè)名為example_module.py的模塊,其內(nèi)容如下:

# example_module.py

def function_a():
    print("Function A")

def function_b():
    print("Function B")

def _private_function():
    print("Private Function")

__all__ = ["function_a", "function_b"]

在上述示例中,__all__變量被設(shè)置為包含"function_a""function_b"兩個(gè)字符串元素的列表。這意味著當(dāng)使用from example_module import *語句導(dǎo)入模塊時(shí),只有function_afunction_b這兩個(gè)函數(shù)會(huì)被導(dǎo)入,而_private_function不會(huì)被導(dǎo)入,因?yàn)樗韵聞澗€開頭,被視為私有函數(shù)。

在另一個(gè)腳本中,我們可以這樣使用example_module

from example_module import *

function_a()  # Output: Function A
function_b()  # Output: Function B
_private_function()  # NameError: name '_private_function' is not defined

請(qǐng)注意,雖然使用__all__可以限制導(dǎo)入的內(nèi)容,但它僅在使用from module import *語句時(shí)生效。推薦的做法是明確導(dǎo)入需要的成員,例如:from example_module import function_a, function_b,而不是使用from example_module import *。這樣可以避免命名沖突,并使代碼更加清晰和可維護(hù)。

python包怎么導(dǎo)入:

在Python中,要導(dǎo)入一個(gè)包(package),你可以使用import語句。一個(gè)包是包含多個(gè)模塊的目錄,它允許你組織和管理相關(guān)的功能模塊。包目錄下必須包含一個(gè)名為__init__.py的文件,這個(gè)文件可以是空文件,也可以包含包的初始化代碼。

假設(shè)你有一個(gè)名為my_package的包,它的目錄結(jié)構(gòu)如下:

my_package/
    __init__.py
    module_a.py
    module_b.py
    subpackage/
        __init__.py
        module_c.py

現(xiàn)在,我們來看看如何導(dǎo)入這個(gè)包和包中的模塊:

  1. 導(dǎo)入整個(gè)包或子包:
import my_package

# 使用包中的模塊
my_package.module_a.some_function()
my_package.subpackage.module_c.another_function()
  1. 導(dǎo)入特定的模塊:
from my_package import module_a, subpackage.module_c

# 使用特定的模塊
module_a.some_function()
subpackage.module_c.another_function()
  1. 使用as關(guān)鍵字給導(dǎo)入的包或模塊指定別名:
import my_package as mp

mp.module_a.some_function()
mp.subpackage.module_c.another_function()
  1. 使用from ... import ...語法導(dǎo)入包或模塊中的特定成員:
from my_package.module_a import some_function
from my_package.subpackage.module_c import another_function

some_function()
another_function()

請(qǐng)根據(jù)你的實(shí)際需求選擇適合的導(dǎo)入方式。使用包可以幫助你更好地組織代碼,防止命名沖突,并提供更高級(jí)別的模塊管理。文章來源地址http://www.zghlxwxcb.cn/news/detail-603588.html

到了這里,關(guān)于我在VScode學(xué)Python(Python函數(shù),Python模塊導(dǎo)入)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【工具】VScode|Linux下 VScode 調(diào)試 Python 項(xiàng)目、模塊、包的方法

    【工具】VScode|Linux下 VScode 調(diào)試 Python 項(xiàng)目、模塊、包的方法

    使用過 Anaconda、Jupyter、Pycharm、VScode、VS2022、pdb 這幾個(gè) IDE 去編寫 python 項(xiàng)目或者維護(hù) python 環(huán)境,各有各的優(yōu)缺點(diǎn),但 VScode yyds! 可能會(huì)被網(wǎng)上說得天花亂墜的 Python 配置項(xiàng)嚇退,會(huì)被 VScode 各種插件介紹嚇退,但其實(shí)它只是個(gè)純粹的文本編輯器,近年來愈發(fā)開箱即用。 系統(tǒng)

    2024年02月03日
    瀏覽(44)
  • Python - Vscode顯示無法調(diào)用相關(guān)庫(無法解析導(dǎo)入x) Mac版

    Python - Vscode顯示無法調(diào)用相關(guān)庫(無法解析導(dǎo)入x) Mac版

    適用情況: 確認(rèn)已經(jīng)安裝了庫,但是vscode中顯示無法調(diào)用? 解決辦法: 很可能是由于之前已經(jīng)安裝了anaconda,庫已經(jīng)安裝在anaconda的編譯器里,但是后來安裝vscode又重新下載了新的編譯器,因此選擇正確的編譯器編譯即可。 輸入pip install numpy 注意到已經(jīng)顯示 already satisfied ,

    2024年01月24日
    瀏覽(18)
  • vscode 無法導(dǎo)入自己寫的模塊文件(.py)問題

    問題主要是在 vscode中 python 的 讀入模塊路徑 存在問題,下面先介紹下python的模塊讀入路徑: 什么是PYTHONPATH? PYTHONPATH是一個(gè)環(huán)境變量,用于指定Python解釋器在導(dǎo)入模塊時(shí)搜索模塊的路徑。當(dāng)我們導(dǎo)入一個(gè)模塊時(shí),Python解釋器首先會(huì)在系統(tǒng)默認(rèn)的路徑中搜索模塊,然后再到PY

    2024年02月14日
    瀏覽(26)
  • 解決vscode找不到Python自定義模塊,報(bào)錯(cuò)No module named ‘xxx‘

    解決vscode找不到Python自定義模塊,報(bào)錯(cuò)No module named ‘xxx‘

    筆者最近在學(xué)習(xí)python過程中,把在pycharm運(yùn)行成功的項(xiàng)目放在vscode中,發(fā)現(xiàn)一些報(bào)錯(cuò),比如找不到筆者自定義的模塊,參考了一些說法與辦法,現(xiàn)將解決方法記錄于此。 vscode之所以找不到自定義模塊,與其 PYTHONPATH 有關(guān)。筆者的目錄結(jié)構(gòu)如圖所示: 經(jīng)過實(shí)踐,發(fā)現(xiàn)如果do_mys

    2023年04月18日
    瀏覽(21)
  • 我在Vscode學(xué)OpenCV 初步接觸

    我在Vscode學(xué)OpenCV 初步接觸

    OpenCV是一個(gè)開源的計(jì)算機(jī)視覺庫,可以處理圖像和視頻數(shù)據(jù)。它包含了超過2500個(gè)優(yōu)化過的算法,用于對(duì)圖像和視頻進(jìn)行處理,包括目標(biāo)識(shí)別、面部識(shí)別、運(yùn)動(dòng)跟蹤、立體視覺等。OpenCV支持多種編程語言,包括C++、Python、Java等,可以在Windows、Linux、Mac OS X、Android等多個(gè)平臺(tái)上

    2024年02月08日
    瀏覽(23)
  • 我在Vscode學(xué)OpenCV 處理圖像

    我在Vscode學(xué)OpenCV 處理圖像

    既然我們是面向Python的OpenCV(OpenCV for Python)那我們就必須要熟悉Numpy這個(gè)庫,尤其是其中的數(shù)組的庫,Python是沒有數(shù)組的,唯有借助他庫才有所實(shí)現(xiàn)想要的目的。 2.1.1 單通道__二值圖像 白色像素點(diǎn)(白色小方塊區(qū)域)處理為“1”,將黑色像素點(diǎn)(黑色小方塊區(qū)域)處理為“

    2024年02月06日
    瀏覽(25)
  • VScode import導(dǎo)入自己的模塊文件路徑錯(cuò)誤ModuleNotFoundError: No module named ‘v0‘

    VScode的python報(bào)錯(cuò) ModuleNotFoundError: No module named ‘v0’ 我的工作區(qū)文件夾打開的是server,文件相對(duì)路徑是: server/v0/train_ddpg.py,其中的部分導(dǎo)入import代碼如下,v0是上一級(jí)文件夾 from v0.cli import cli_train from v0.config import config_dict 不想修改代碼,因?yàn)樾枰牡牡胤教嗔?,而只通過

    2024年02月04日
    瀏覽(27)
  • 我在Vscode學(xué)OpenCV 色彩空間轉(zhuǎn)換

    我在Vscode學(xué)OpenCV 色彩空間轉(zhuǎn)換

    即是顏色,一種人體視覺系統(tǒng)對(duì)光的反射的 不同波長 的感知的結(jié)果。人們又對(duì)不同的波長范圍的電磁波定義可視光的“顏色”。 在日常生活、美術(shù)課中,通過把(紅黃藍(lán))三種顏色成為”認(rèn)為是能夠混合得到其他所有顏色的顏料。 而對(duì)于光學(xué),就把(紅綠藍(lán) RGB )三基色【

    2024年02月05日
    瀏覽(31)
  • 我在Vscode學(xué)OpenCV 基本的加法運(yùn)算

    我在Vscode學(xué)OpenCV 基本的加法運(yùn)算

    鏈接:《我在Vscode學(xué)OpenCV 處理圖像》 屬性— API 形狀 img.shape 圖像大小 img.size 數(shù)據(jù)類型 img.dtype ? shape:如果是彩色圖像,則返回包含行數(shù)、列數(shù)、通道數(shù)的數(shù)組;如果是二值圖像或者灰度圖像,則僅返回行數(shù)和列數(shù)。通過該屬性的返回值是否包含通道數(shù),可以判斷一幅圖像

    2024年02月05日
    瀏覽(23)
  • VScode導(dǎo)入不同模塊下py文件報(bào)錯(cuò)ModuleNotFoundError:No module named最有效解決方法

    VScode導(dǎo)入不同模塊下py文件報(bào)錯(cuò)ModuleNotFoundError:No module named最有效解決方法

    1、用VScode執(zhí)行代碼,即F5執(zhí)行,或者是在服務(wù)器上用Python命令執(zhí)行,修改地方為: ctrl+P,選擇open user settings:UI,打開設(shè)置 ?然后搜索terminal.integrated.env,點(diǎn)擊用json編輯,加上下面這幾句: 然后在debug里面create 一個(gè)json文件,加上下面這兩句:? 保存,重啟,再次運(yùn)行即可。

    2024年01月20日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包