程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

讓python飛:形象理解python 棧、隊列、lambda、生成器、迭代器、模塊

編輯:Python

Day10 棒球和球棒與水晶火爐和五彩寶箱
棒球和球棒來到了足球場,要打棒球!但是球場工作人員不同意。棒球和球棒表示不服。球場工作人員說,這樣吧,你按我們的規則完成任務,我們就讓你們在這裡玩。這裡有兩個長筒,一個豎桶
棧:滿足特點 ---> 先進後出)一個直桶

(隊列:滿足特點 ---> 先進先出。
調用collections模塊中的deque()函數就可以獲取一個隊列對象操作步驟:
步驟一:導入collections模塊
步驟二:collections.deque() --> 得到一個列表對象
步驟三:使用隊列對象調用存(append)和取(popleft)的函數,完成需求)

你們把5個球投進直筒裡,然後從上往下依次打開球,取出裡面的部件,組裝起來。然後再把另5個球裝進直筒裡,從桶的另一端把球取出來,同樣取出裡面部件組裝起來

import collections
'''
演示隊列存取數據的特點:先進先出
'''
#獲取隊列對象:queue
queue = collections.deque()
print(queue,type(queue))
#向隊列中添加數據(模擬進隊、入隊現象)
queue.append('A'))

棒球和球棒順利完成了任務,將部件取出,組建了一個藍色的小獅子(lambda [變量參數]:表達式)這個小獅子頭上並沒有小駱駝的標志,它的名字叫lambda(匿名函數(沒有名字的函數))它嘴裡同樣可以含球也可以不含球(匿名函數同樣可以定義有返回值沒有返回值,有參數沒有參數的情況)可以含各式各樣的球

(分類匿名函數 --> 以參數進行
1).1個參數
2).多個參數
3).默認參數
4).可變參數)

也可以返回東西或不返回東西小獅子還可以在轉籠中進行工作

匿名函數配合列表對象使用lt = [lambda x:x ** 2,lambda x:x ** 3,lambda x:x ** 4]

在字典中工作。

匿名函數配合字典對象使用
key = 'C'
dic1 = {
'A':lambda :2*2,
'B':lambda :3*3,
'C':lambda :4*4
}
print(dic1[key]())

棒球和球棒非常喜歡這只藍獅子,就和他一起玩起棒球來。但一只棒球不夠用,所以他們要管理員給他們多拿幾個棒球。管理員從操縱室按下開關,一個透明度火爐子一樣的東西從天而降到球場中央。爐子上刻著佛印的頭像,爐內是好幾個疊在一起的水晶球

生成器中是沒有真實數據存在的,所以我們是不能直接使用len()函數來嘗試得到其長度;
如果我們這麼做了,錯誤提示:no len()

爐子的底部是個能打開的開關,每打開一次只能出來一個水晶球

它內部封裝了一套公式/算法,只有等到需要調用/執行數據的時候 --》執行next()函數
才會將公司計算得到的數據結果返回給程序#使用next()函數來得到每一次generator中的內容

當然,佛印師傅能一次性全把水晶球拿出來

方式二:使用循環處理,這種方式不會過量的調用內部表達式執行,不會報錯,比較友好
gen = (x for x in range(5))
for g in gen:
print(g)。

當球被全部拿出後,就沒有球可以拿了(#generator對象中的數據內容只能被解析使用一次,不可逆;一旦調用多了,直接報錯了)棒球不開心了,說那我要是在其他地方就沒有球玩了,這不行啊。這時,管理員笑嘻嘻的拿出了一個紅色的大海螺,並對棒球說,你把這個大海螺放到獅子肚子上的出口處,獅子就會變成和透明火爐一樣的容器。就能吐出一樣的水晶球啦

(定義函數,在函數內部需要使用關鍵字yield來記錄返回的generator對象的數據公式;
執行還是通過next()函數來實現了
def func(n):
lt = []
for i in range(1,n + 1):
if i % 2 == 0:
lt.append(i)
yield i

棒球和球棒謝過管理員,但同時也產生了疑問?這水晶球和普通的一盒球有什麼區別呢?管理員告訴棒球,凡是能被佛印師傅一個一個數球的容器都屬於迭代對象(凡是可作用於for循環的對象都是Iterable(可迭代對象)類型)像什麼牛肉丸串,大列表、字典、大餅、橙小車還有水晶火爐等。但是只有那些有控制出口開關的才能成為迭代器

1).必須是一個可迭代對象
2).可以被next()函數所調用的
凡是可以作用於next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列

如果要判斷是不是迭代對象,可以用采蘑菇的小姑娘籮筐中的一個寶盒(collections.Iterable(類型)配合內置函數isinstance())寶盒裡有個變色蝴蝶,它能分辨出這個容器是不是迭代對象

使用collections模塊中的Iterable類型配合isinstance(obj,type)內置函數來判斷isinstance(obj,collections.Iterable)

寶盒裡還有個變色小龍,它能分辨出這個容器是不是迭代器對象

使用collections模塊中的Iterator類型配合isinstance(obj,type)內置函數來判斷isinstance(obj,collections.Iterator)

如果迭代對象想變成迭代器對象,就是想加上一個開關的話,就得請雙蛇洞中的小白龍了

將可迭代對象轉換為迭代器對象
內置函數:
iter(iterable)
it1 = iter(lt)

棒球越聽越發感興趣!於是就去找采蘑菇的小姑娘的神奇籮筐。管理員告訴他神奇籮筐在雙蛇洞裡。棒球和球棒來到了雙蛇洞門前。發現門前有很多五彩斑斓的寶箱排列在洞門兩側(模塊(model):概念:在python中.py結尾的文件,我們稱為模塊;作用:將類、函數、屬性...內容定義其中)五彩斑斓的寶物分三種,一種是雙蛇洞內本來就有的(.標准庫模塊:安裝完python環境之後就存在的模塊,這些模塊我們如果想要使用,導入即可)如五彩魔方(random)五彩鐘表(time)五彩機器人(os)采蘑菇的小姑娘的五彩籮筐(collections)五彩蘋果樹(math)門口的五彩寶箱是人為造出來的(在項目開發過程中,整個團隊中程序員自己定義,可以給自己、別人進行調用)還有一些是從國外進口的寶物,首先要經過聰明的管家機器人的同意(打開cmd --> 輸入pip -V(此操作查看是否安裝完成pip))然後讓轎夫將該寶物抬進洞裡(安裝某個第三方模塊:pip install 模塊名)轎夫有寶物的詳細說明(查看某個第三方模塊的詳細信息:pip show 模塊名)並且轎夫還有張所有抬進的寶物的完整清單(查看當前安裝的所有第三方模塊:pip list)當然,如果不想要某個寶物了可以讓轎夫將其抬走(刪除某個第三方模塊:pip uninstall 模塊名)如果要用寶物或者寶物裡的東西,可以直接將寶物,或者寶物裡的一些部件拿到你的封閉的工作室

1).精確導入:
舉例:
import time
from random import randint
from math import pi,
也可以直接全部導入
2).模糊導入:
舉例:
from math import *
from os import *

在導入的時候,你還可以給寶物或者裡面的東西起名字,只要你把之前的名字覆蓋住就可以了

給導入的模塊或者函數、屬性起別名:
使用as關鍵字來實現
【注意】:如果一旦給模塊、函數、屬性起了別名,原本的名字就不可用了。
如果一旦給模塊、函數、屬性起了別名,原本的名字就不可用了;
from random import randint as r

有的自己做的寶箱裡的寶物不想別別人調用,就用一條四節鐵鏈將其鎖住

代碼:
if __name__ == '__main__': 此代碼的作用是將不想被導入加載的代碼定義其中

棒球還在洞門前的廣場正中央見到一個懸在半空的布口袋,裡面裝的是有關聯的寶物的名字清單。

"包"的概念:package
創建一個python package,創建成功就是一個所謂的python的包;
它的作用:將多個有關聯的模塊定義在其中,方便之後的維護和管理

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved