小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

趣味的Python解包方法

 靜幻堂 2018-08-15
汕頭各地 2018-08-14 19:15:30

python中的解包你可以這個(gè)樣子來理解:一個(gè)list是一個(gè)整體,想把list中的每一個(gè)元素都當(dāng)成一個(gè)個(gè)個(gè)體剝離出來,這樣的一個(gè)過程就是解包,讓我們先來看下面的這一些例子(總共分為12個(gè)部分)。

1.將list的每一個(gè)元素都賦值給一個(gè)變量

>>> name

'Bob'

>>> age

20

>>> date

趣味的Python解包方法

>>> name, age, date = ['Bob', 20, '2018-1-1']

2.可迭代的對(duì)象都可以這個(gè)樣子來做

>>> a,b,c = ['a', 'b', 'c']

>>> a

'a'

>>> a,b,c = enumerate(['a', 'b', 'c'])

>>> a

(0, 'a')

# 元組

>>> a,b,c = ('a', 'b', 'c')

>>> a

'a'

# 字典

>>> a,b,c = {'a':1, 'b':2, 'c':3}

>>> a

'a'

>>> a,b,c = {'a':1, 'b':2, 'c':3}.items()

>>> a

('a', 1)

# 字符串

>>> a,b,c = 'abc'

>>> a

'a'

# 生成器

>>> a,b,c = (x + 1 for x in range(3))

>>> a

趣味的Python解包方法

趣味的Python解包方法

# 列表

如果可迭代對(duì)象包含的元素和前面待賦值變量數(shù)量不一致,則會(huì)報(bào)錯(cuò)。但是可以通過*來表示多個(gè)元素

3.星號(hào)的使用方法

比如我們想要計(jì)算一個(gè)平均分,先去除最高分和最低分,我們除了可以用切片以外,還可以使用解包的方式獲得中間的數(shù)值

>>> new

趣味的Python解包方法

>>> first, *new, last = [94, 85, 73, 46]

用*來表示多個(gè)數(shù)值

4.壓包過程

壓包就是解包的逆過程,使用zip函數(shù)來實(shí)現(xiàn),下面的例子可以讓你對(duì)壓包有比較一個(gè)直觀的感受

>>> b = [1, 2, 3]

>>> for i in zip(a, b):

... print(i)

...

('a', 1)

('b', 2)

趣味的Python解包方法

>>> a = ['a', 'b', 'c']

5.壓包與解包混合的例子

下面的這個(gè)例子實(shí)現(xiàn):兩個(gè)列表對(duì)應(yīng)數(shù)值相加

>>> b = [1, 2, 3]

>>> for i, j in zip(a, b):

... print(i+j)

...

1

3

趣味的Python解包方法

>>> a = [0, 1, 2]

細(xì)細(xì)拆解上面過程,可以看出步驟是這樣的

  • 先是zip函數(shù)將a b壓包成為一個(gè)可迭代對(duì)象對(duì)可迭代對(duì)象的每一個(gè)元素(('a', 1))進(jìn)行解包(i, j = ('a', 1))此時(shí)就可以分別調(diào)用i j變量進(jìn)行計(jì)算

下面我們加入星號(hào)

... ('Mary', '1996-1-4', 50),

... ('Nancy', '1993-3-1', 55),]

>>> for name, *args in l:

... print(name, args)

...

Bob ['1990-1-1', 60]

Mary ['1996-1-4', 50]

趣味的Python解包方法

>>> l = [('Bob', '1990-1-1', 60),

6._的使用方法

當(dāng)有一些元素你不想用時(shí),使用_表示是更好的寫法了,這樣就可以讓讀代碼的人知道這個(gè)元素是不person = ('Bob', 20, 50, (11, 20, 2000))要的

>>> name, *_, (*_, year) = person

>>> name

'Bob'

>>> year

趣味的Python解包方法

>>> person = ('Bob', 2, 50, (11, 20, 2000))

7.多變量同時(shí)賦值

之前的賦值符號(hào)右側(cè)都是可迭代對(duì)象,其實(shí)>>> a, b = 側(cè)也可以多個(gè)變量

>>> a

1

>>> b

2

>>> a = 1, 2

>>> a

趣味的Python解包方法

>>> a, b = 1, 2

下面的使用方法都會(huì)報(bào)錯(cuò)

趣味的Python解包方法

*a = 1, 2

可以這樣

趣味的Python解包方法

8.*之可變參數(shù)

在定義函數(shù)時(shí),我們使用*的可變參數(shù),其實(shí)也是壓包解包過程

... print(num)

...

>>> myfun(1,2,5,6)

趣味的Python解包方法

>>> def myfun(*num):

參數(shù)用*num表示,num變量就可以當(dāng)成元組調(diào)用了。

其實(shí)這個(gè)過程相當(dāng)于*num, = 1,2,5,6

9.*之關(guān)鍵字參數(shù)

... print(kw)

...

>>> myfun(name = "Bob", age = 20, weight = 50)

{'weight': 50, 'name': 'Bob', 'age': 20}

鍵值對(duì)傳入**kw,kw就可以表示相應(yīng)字典。

**的用法只在函數(shù)定義中使用,不能這樣使用

趣味的Python解包方法

>>> def myfun(**kw):

10.可變參數(shù)與關(guān)鍵字參數(shù)的細(xì)節(jié)問題

1.函數(shù)傳入實(shí)參時(shí),可變參數(shù)(*)之前的參數(shù)不能指定參數(shù)名

... print(a)

... print(b)

...

>>> myfun(a=1, 2,3,4)

File "<stdin>", line 1

SyntaxError: positional argument follows keyword argument

>>> myfun(1, 2,3,4)

1

趣味的Python解包方法

>>> def myfun(a, *b):

2.當(dāng)函數(shù)傳入實(shí)參時(shí),可變參數(shù)(*)之后的參數(shù)必須指定參數(shù)名,否則就會(huì)被歸入到可變參數(shù)之中

... print(a)

... print(b)

... print(c)

...

>>> myfun(1, 2,3,4)

1

(2, 3, 4)

None

>>> myfun(1, 2,3,c=4)

1

(2, 3)

趣味的Python解包方法

趣味的Python解包方法

>>> def myfun(a, *b, c=None):

如果一個(gè)函數(shù)想要使用的時(shí)候必須明確指定參數(shù)名,可以將所有參數(shù)都放在可變參數(shù)之后,而可變參數(shù)不用管它就可以,也不用命名,如下

... print(a)

... print(b)

...

>>> myfun(a = 1,b = 2)

1

趣味的Python解包方法

>>> def myfun(*, a, b):

可變參數(shù)的這兩條特性,可以用于將 只需要按照位置賦值的參數(shù) 和 需要明確指定參數(shù)名的參數(shù)區(qū)分開來

3.關(guān)鍵字參數(shù)都只能作為最后一個(gè)參數(shù),前面的參數(shù)按照位置賦值還是名稱賦值都可以

下面展示一個(gè)既用可變參數(shù)有用關(guān)鍵字參數(shù)的例子

... print(a)

... print(b)

... print(c)

... print(d)

...

>>> myfun(1, 2, 3, c= 4, m = 5, n = 6)

1

(2, 3)

4

趣味的Python解包方法

>>> def myfun(a, *b, c, **d):

4.可變參數(shù)與關(guān)鍵詞參數(shù)共同使用以表示任意參數(shù)4下面是這一點(diǎn)在裝飾器當(dāng)中的使用

... def wrapper(*args, **kw):

... print('I am using a decorator.')

... return func(*args, **kw)

... return wrapper

...

>>> @mydecorator

... def myfun(a, b):

... print(a)

... print(b)

...

>>> myfun(1, b = 2)

I am using a decorator.

1

趣味的Python解包方法

趣味的Python解包方法

>>> def mydecorator(func):

(如果有的讀者不熟悉裝飾器,只需要知道,使用@定義myfun相當(dāng)于myfun = mydecorator(myfun),定義出來的myfun其實(shí)是返回結(jié)果wrapper函數(shù))

wrapper函數(shù)使用*args, **kw作為參數(shù),則被修飾的myfun函數(shù)需要的參數(shù)無論是什么樣的,傳入wrapper都不會(huì)報(bào)錯(cuò),這保證了裝飾器可以修飾各種各樣函數(shù)的靈活性。畢竟我們一般在函數(shù)中傳入?yún)?shù)時(shí),要么所有參數(shù)名都寫,要么前面幾個(gè)不寫,后面的會(huì)寫,這樣使用*args, **kw完全沒有問題。

11.解包作為參數(shù)傳入函數(shù)中

首先定義一個(gè)函數(shù)

趣味的Python解包方法

def myfun(a, b):

列表元組的解包

>>> myfun(*n)

3

>>> m = (1, 2)

>>> myfun(*m)

趣味的Python解包方法

>>> n = [1, 2]

字典的解包

>>> myfun(**mydict)

3

>>> myfun(*mydict)

趣味的Python解包方法

>>> mydict = {'a':1, 'b': 2}

一個(gè)應(yīng)用

>>> "{name}'s age is {age}".format(**bob)

趣味的Python解包方法

>>> bob = {'name': 'Bob', 'age': 30}

12.多返回值函數(shù)

下面過程也涉及到了解包

return a + 1, b + 2

>>> m, n = myfun(1, 2)

>>> m

2

>>> n

趣味的Python解包方法

def myfun(a, b):

其實(shí)本身是一個(gè)元組

趣味的Python解包方法

Python學(xué)習(xí)交流群:834+179+111,群里有很多的學(xué)習(xí)資料。歡迎歡迎各位前來交流學(xué)習(xí)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多