我的個(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))
函數(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ù)add
和subtract
,它們分別執(zhí)行加法和減法操作。然后,我們定義了一個(gè)函數(shù)apply_operation
,該函數(shù)接受一個(gè)操作函數(shù)和兩個(gè)操作數(shù),然后調(diào)用操作函數(shù)將這兩個(gè)操作數(shù)傳遞給它,并返回操作的結(jié)果。
在調(diào)用apply_operation
函數(shù)時(shí),我們將add
和subtract
函數(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)行組合
代碼
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)需要注意:
-
函數(shù)名不能與Python內(nèi)置函數(shù)或關(guān)鍵字相同。如果名字相同會(huì)導(dǎo)致程序運(yùn)行出錯(cuò)。
-
在函數(shù)定義中,參數(shù)名應(yīng)該具有描述性,而且應(yīng)該具有一致的命名約定。例如,如果函數(shù)接收一個(gè)字符串參數(shù),參數(shù)名應(yīng)該以“str”結(jié)尾。
-
函數(shù)的參數(shù)傳遞可以是位置參數(shù)(按照定義順序傳遞)或關(guān)鍵字參數(shù)(使用參數(shù)名傳遞),但是一旦使用關(guān)鍵字參數(shù),后續(xù)的所有參數(shù)都必須使用關(guān)鍵字參數(shù)。
-
在函數(shù)定義中,如果一個(gè)參數(shù)有一個(gè)默認(rèn)值,那么它必須是最后一個(gè)參數(shù)。否則,會(huì)導(dǎo)致錯(cuò)誤。
-
Python中的函數(shù)可以返回多個(gè)值,這些值將作為元組返回。
-
函數(shù)內(nèi)部執(zhí)行完畢之后,局部變量會(huì)被自動(dòng)銷毀。如果需要在函數(shù)之間共享變量,可以將變量定義為全局變量。
-
函數(shù)應(yīng)該盡可能地簡潔明了,只做一件事情并確保它做得很好。
-
函數(shù)應(yīng)該被文檔化,以便用戶更好地了解它們的特性和使用方法。可以使用函數(shù)注釋來描述函數(shù)的輸入和輸出參數(shù),以及函數(shù)的目的和行為。
-
在Python中,函數(shù)可以嵌套定義,即一個(gè)函數(shù)可以在另一個(gè)函數(shù)內(nèi)定義。嵌套函數(shù)可以訪問父函數(shù)的變量和參數(shù)。
Python函數(shù)的參數(shù)調(diào)用有以下幾種方式:
- 位置參數(shù):按照函數(shù)定義的順序?qū)?shù)傳遞給函數(shù)即可。例如:
def greet(name, message):
print(message, name)
greet('Alice', 'Hello') # 輸出:Hello Alice
- 關(guān)鍵字參數(shù):使用參數(shù)名來指定傳遞的參數(shù)值。例如:
def greet(name, message):
print(message, name)
greet(message='Hello', name='Alice') # 輸出:Hello Alice
- 默認(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
- 可變參數(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
- 關(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_a
、value_for_b
和value_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à)值:
-
表示函數(shù)沒有返回值:當(dāng)函數(shù)沒有指定
return
語句或者return
語句沒有指定返回值時(shí),默認(rèn)返回None
。這可以告訴調(diào)用者函數(shù)執(zhí)行完畢并且沒有返回任何結(jié)果。 -
初始化變量:可以將變量初始化為
None
,表示該變量當(dāng)前沒有具體的值。后續(xù)可以根據(jù)需要給變量賦予其他的值。 -
判斷條件:
None
可以用于條件判斷,例如檢查一個(gè)變量是否為None
來確定是否有有效的值。 -
默認(rèn)參數(shù)值:函數(shù)定義時(shí)可以指定參數(shù)的默認(rèn)值,常見的默認(rèn)值就是
None
。這樣在調(diào)用函數(shù)時(shí)如果沒有提供相應(yīng)的參數(shù),就會(huì)使用默認(rèn)值None
。 -
占位符:在開發(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="男")
在這個(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)。
-
不定位置參數(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)行輸出。 -
不定關(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)行輸出。 -
混合使用不定位置和不定關(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ì)比:
-
語法:
- 普通函數(shù):使用
def
語句來定義,可以有函數(shù)名、參數(shù)列表和函數(shù)體。 - 匿名函數(shù):使用
lambda
關(guān)鍵字來定義,只能包含一個(gè)表達(dá)式,并沒有函數(shù)名,僅用于簡單的函數(shù)場景。
- 普通函數(shù):使用
-
可讀性:
- 普通函數(shù):由于有函數(shù)名和較為完整的語法結(jié)構(gòu),通常比較容易理解和閱讀。
- 匿名函數(shù):由于沒有函數(shù)名,以及只能包含簡單的表達(dá)式,可讀性相對(duì)較差。通常用于較短的、簡單的函數(shù)需求。
-
參數(shù)個(gè)數(shù):
- 普通函數(shù):可以有任意數(shù)量的參數(shù),可以使用默認(rèn)參數(shù)和可變長參數(shù)。
- 匿名函數(shù):只能接受有限的參數(shù),通常用于只有幾個(gè)簡單參數(shù)的場景。
-
使用場景:
- 普通函數(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 別名]
-
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ì)算平方根
-
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常量的值
-
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常量的值
-
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ù)組
-
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ū)別如下:
-
import 模塊名
:
這種導(dǎo)入方式將整個(gè)模塊導(dǎo)入到當(dāng)前命名空間中。需要使用模塊名.功能名
的方式來訪問模塊中的功能。例如,import math
導(dǎo)入了math
模塊,然后使用math.sqrt()
來調(diào)用平方根函數(shù)。 -
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 *
)更快。
原因如下:
- 第2種方式明確指定了要導(dǎo)入的類、變量或方法等,因此Python解釋器只會(huì)導(dǎo)入指定的內(nèi)容,減少了導(dǎo)入的工作量和內(nèi)存占用。
- 第3種方式將導(dǎo)入模塊中的所有公開成員,如果模塊很大或者有許多功能,可能會(huì)導(dǎo)致較多的內(nèi)存使用和加載時(shí)間。
- 在第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ì)比:
-
import 模塊名
:- 導(dǎo)入整個(gè)模塊,需要使用模塊名前綴訪問其中的功能。
- 可以在代碼中多次使用該方式導(dǎo)入同一個(gè)模塊,不會(huì)造成沖突。
- 適用于模塊較大或需要多個(gè)功能的情況。
-
from 模塊名 import 類、變量、方法等
:- 選擇性導(dǎo)入模塊中的特定功能,無需使用模塊名前綴,直接使用導(dǎo)入的名稱即可訪問。
- 可以一次導(dǎo)入多個(gè)功能,提高代碼的簡潔性。
- 避免了使用模塊名前綴,適用于只需要少量功能的情況。
-
from 模塊名 import *
:- 導(dǎo)入模塊中的所有公開名稱,不推薦在生產(chǎn)代碼中使用。
- 容易導(dǎo)致名稱沖突和代碼維護(hù)困難,避免使用此方式。
-
import 模塊名 as 別名
:- 給模塊指定別名,使用別名來引用模塊中的功能。
- 適用于模塊名較長或需要避免名稱沖突的情況。
-
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)建步驟如下:
- 編寫Python代碼并保存為以
.py
為擴(kuò)展名的文件,文件名將成為模塊的名稱。 - 將保存好的文件放在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):
- 自定義模塊的文件名應(yīng)該以
.py
結(jié)尾,例如my_utils.py
。 - 確保自定義模塊與使用它的Python程序在相同的目錄或正確的Python搜索路徑下。
- 使用
import
語句導(dǎo)入整個(gè)模塊時(shí),需要使用模塊名前綴訪問模塊中的函數(shù)和變量。 - 使用
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.py
和module_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í)踐:
-
使用別名:當(dāng)導(dǎo)入同名功能時(shí),可以給其中一個(gè)或多個(gè)功能指定別名,以避免名稱沖突。例如:
from module_a import common_function as a_function
。 -
明確導(dǎo)入:盡量避免使用
from module import *
這種方式,而是明確導(dǎo)入需要的功能。例如:from module_a import common_function
和from module_b import common_function
。 -
命名空間:如果模塊的名稱很常見并且可能與其他模塊發(fā)生沖突,可以使用模塊的命名空間來調(diào)用其中的功能。例如:
import module_a
和import module_b
,然后使用module_a.common_function()
和module_b.common_function()
來調(diào)用相應(yīng)的功能。
要避免這種情況,可以采用以下方法:
- 使用完整模塊名:
在調(diào)用重名功能時(shí),可以使用完整的模塊名作為前綴,明確指定使用哪個(gè)模塊中的功能,避免沖突。
示例:
import module1
import module2
print(module1.some_function()) # 調(diào)用module1中的函數(shù)
print(module2.some_function()) # 調(diào)用module2中的函數(shù)
- 使用別名(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ù)
- 使用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_a
和function_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è)包和包中的模塊:文章來源:http://www.zghlxwxcb.cn/news/detail-603588.html
- 導(dǎo)入整個(gè)包或子包:
import my_package
# 使用包中的模塊
my_package.module_a.some_function()
my_package.subpackage.module_c.another_function()
- 導(dǎo)入特定的模塊:
from my_package import module_a, subpackage.module_c
# 使用特定的模塊
module_a.some_function()
subpackage.module_c.another_function()
- 使用
as
關(guān)鍵字給導(dǎo)入的包或模塊指定別名:
import my_package as mp
mp.module_a.some_function()
mp.subpackage.module_c.another_function()
- 使用
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)!