溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python中星號(hào)的使用方法有哪些

發(fā)布時(shí)間:2023-02-28 11:09:48 來源:億速云 閱讀:153 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Python中星號(hào)的使用方法有哪些”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

1. 引言

星號(hào)* 往往被稱為乘法運(yùn)算符,是所有程序中最為常用的運(yùn)算符號(hào)之一,在Python 中,星號(hào)還有很多隱藏的強(qiáng)大功能。
本文將用最容易理解的例子來解釋星號(hào)*的 五個(gè)使用場景,從初級(jí)用法到高階用法。

2. 乘法和冪運(yùn)算符

最簡單的用法是利用星號(hào)作為基本的運(yùn)算符:

  • 單個(gè) * 用于乘法運(yùn)算

  • 兩個(gè) ** 表示冪運(yùn)算

相關(guān)樣例用例代碼如下:

>>> 2*3
>>> 6
>>> 2**3
>>> 8

3. 函數(shù)接收數(shù)量不固定的入?yún)?/h3>

一般來說,函數(shù)往往接收固定數(shù)量的參數(shù);但是如果我們需要更大的靈活性,比如當(dāng)不確定將傳遞多少個(gè)參數(shù)時(shí),此時(shí)將是星號(hào)* 發(fā)揮作用的時(shí)候。

def print_genius(*names):
    print(type(names))
    for n in names:
        print(n)

print_genius('Elon Mask', 'Du Fu ', 'Li Bai')
# <class 'tuple'>
# Elon Mask
# Du Fu 
# Li Bai
def top_genius(**names):
    print(type(names))
    for k, v in names.items():
        print(k, v)

top_genius(Top1="Elon Mask", Top2="Du Fu", Top3="Li Bai")
# <class 'dict'>
# Top1 Elon Mask
# Top2 Du Fu
# Top3 Li Bai

如上例所示,在定義函數(shù)時(shí),我們可以定義一個(gè)以一個(gè)或兩個(gè)星號(hào)為前綴的參數(shù),以捕獲不限制數(shù)量的參數(shù)輸入??偨Y(jié)如下:

  • 以 一個(gè) * 為前綴的參數(shù)可以將任意數(shù)量的參數(shù)以元組形式傳入

  • 以兩個(gè) ** 為前綴的參數(shù)可以將任意數(shù)量的參數(shù)以字典形式傳入

按照慣例,當(dāng)我們定義的函數(shù)接收不定數(shù)量的參數(shù)時(shí),我們一般采用以下函數(shù)定義形式:

def func(*args, **kwargs):
    pass

4. 限制函數(shù)入?yún)H以關(guān)鍵字形式輸入

星號(hào)* 的一個(gè)非??岬挠梅ㄊ鞘购瘮?shù)只能接收關(guān)鍵字參數(shù)。
很難理解,我們舉例來說明:

def genius(*, first_name, last_name):
    print(first_name, last_name)

# genius('Li','Bai')
# TypeError: genius() takes 0 positional arguments but 2 were given
genius(first_name='Li', last_name='Bai')
# Li Bai

上述代碼采用了星號(hào)* 限制了星號(hào)之后的參數(shù)必須采用關(guān)鍵字形式來調(diào)用上述函數(shù)。
實(shí)際上,如果我們只是想將一些參數(shù)限制為僅以關(guān)鍵字形式輸入同時(shí)另一部分參數(shù)依舊按照位置形式輸入,此時(shí)我們可以將位置參數(shù)放置在星號(hào)之前。
樣例代碼如下:

def genius(age, *, first_name, last_name):
    print(first_name, last_name, 'is', age)
genius(28, first_name='Li', last_name='Bai')
# Li Bai is 28

5. 可迭代對(duì)象解包操作

我們可以使用星號(hào)* 來解包可迭代對(duì)象,這將使我們的程序更加清晰且優(yōu)雅。
例如,如果我們要將不同的可迭代對(duì)象(例如一個(gè)列表,一個(gè)元組和一個(gè)集合)組合成一個(gè)新列表,哪種方法最好?
顯然,我們可以使用 for 循環(huán)來迭代所有元素并將它們逐一添加到新列表中,樣例代碼如下:

A = [1, 2, 3]
B = (4, 5, 6)
C = {7, 8, 9}
L = []
for a in A:
    L.append(a)
for b in B:
    L.append(b)
for c in C:
    L.append(c)
print(L)
# [1, 2, 3, 4, 5, 6, 8, 9, 7]

上述實(shí)現(xiàn)方式雖然可以完成我們的目的,但是代碼看起來太冗長了,而且不是很Pythonic 。
推薦的改進(jìn)方式是使用列表生成式,如下所示:

A = [1, 2, 3]
B = (4, 5, 6)
C = {7, 8, 9}
L = [a for a in A] + [b for b in B] + [c for c in C]
print(L)
# [1, 2, 3, 4, 5, 6, 8, 9, 7]

上述代碼中,我們將三個(gè) for 循環(huán)減少為一行列表生成式。它已經(jīng)是Pythonic了,但不一定是最簡單的!
是時(shí)候看看星號(hào)的強(qiáng)大之處啦。

A = [1, 2, 3]
B = (4, 5, 6)
C = {7, 8, 9}
L = [*A, *B, *C]
print(L)
# [1, 2, 3, 4, 5, 6, 8, 9, 7]

如上所述,我們可以使用星號(hào)作為可迭代項(xiàng)的前綴來解包它們的元素。
順便說一句,如果我們利用一個(gè)*作為dict 的前綴,它的key 將被解包;如果我們使用雙星號(hào)** 作為前綴,其value 將被解包;此時(shí)我們必須顯示使用key 來接收解包后的value 。
樣例如下:

D = {'first': 1, 'second': 2, 'third': 3}

print(*D)
# first second third

# print(**D)
# TypeError: 'first' is an invalid keyword argument for print()

print('{first},{second},{third}'.format(**D))
# 1,2,3

6. 擴(kuò)展可迭代對(duì)象解包

解包的語法可以讓我們的代碼更加簡潔,樣例如下:

L = [1, 2, 3, 4, 5, 6, 7, 8]
a, *b = L
print(a)
# 1
print(b)
# [2, 3, 4, 5, 6, 7, 8]

“Python中星號(hào)的使用方法有哪些”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI