Python基礎篇-day5

來源:互聯網
上載者:User

標籤:als   傳參   包括   ges   pen   dump   ini   read   轉換   

本節目錄:

1、產生器
  1.1 列表推導式方法
  1.2 函數法--適用複雜的推導方法
2、迭代器
3、裝飾器
  3.1 單一驗證方式(調用不傳參數)
  3.2 單一驗證方式(調用傳參數)
  3.3 多種驗證方式
4、模組
  4.1 第三方模組
  4.2 標準庫
  4.3 sys模組
5、json
  5.1 json序列化
  5.2 json還原序列化

1、產生器
1.1 列表推導式方法
data = [1,2,3]
data = (i*2 for i in data)
print(data)
print(data.__next__())
print(data.__next__())
print(data.__next__())

1.2 函數法--適用複雜的推導方法
def fib(num):
count = 0
a,b = 0,1

while count < num:
tmp = a
a = b
b = a + tmp
#print(a)
count += 1
yield a
print("done.......")

num = int(input("num>>:")) #輸入列印的資料數量
f = fib(num)
for i in range(num):
print(f.__next__())
****************************************************

函數中:
return a 返回a,並結束函數
yield a 返回a,並掛起函數;返回給了通過__next__()調用函數的人;
代表通過yield實現函數的中斷,並且儲存了函數執行的中間狀態。

類比並發:
import time
def consumer(name):
print("%s準備吃包子"% name)
while True:
baozi = yield
print("包子[%s]來了,被[%s]吃了"% (baozi,name))

def producer(name):
c1 = consumer("A")
c2 = consumer("B")

c1.__next__()
c2.__next__()
print("%s做包子"% name)
for i in range(5):
time.sleep(1)
print("做2個包子")
c1.send(i+1)
c2.send(i+1)

producer("tom")
****************************************************

2、迭代器
可以被next()函數調用並不斷返回一個值得對象成為迭代器
產生器都是迭代器>>>產生器是帶有next方法的僅能迭代一次的迭代器
迭代器不全是產生器

由iter產生的對象是迭代器,也可以說是產生器
(1)、iter獨立產生迭代器,這種角度可以說迭代器和產生器不一樣
(2)、iter底層也是由產生器的方法產生的迭代器,這種角度可以說迭代器和產生器一樣

range函數最佳化
py2直接產生對應的列表
py3產生對應的產生器

****************************************************
3、裝飾器
高階函數 嵌套函數 -->給原代碼增加新功能,但是不改變原代碼
作用:
完全符合 開放、封閉原則--不改變原代碼、調用方式,實現功能擴充

3.1 單一驗證方式(調用不傳參數)
user_status = False

def login(func):

def inner():
_username = ‘zs‘
_passwd = ‘123‘
global user_status

if user_status == False:
username = input("user>>:")
passwd = input("pw>>:")
if username == _username and passwd == _passwd:
print("welcome!")
user_status = True
else:
print("wrong username or passwd")
if user_status:
func()
return inner

def home():
print("首頁")
@login
def america():
#login()
print("美國")
@login
def japan():
#login()
print("日本")

def china():
print("中國")

home()
#america = login(america)
america()
#japan = login(japan)
japan()
china()


3.2 單一驗證方式(調用傳參數)
user_status = False

def login(func):

def inner(*args,**kwargs):
_username = ‘zs‘
_passwd = ‘123‘
global user_status

if user_status == False:
username = input("user>>:")
passwd = input("pw>>:")
if username == _username and passwd == _passwd:
print("welcome!")
user_status = True
else:
print("wrong username or passwd")
if user_status:
func(*args,**kwargs)
return inner

def home():
print("首頁")

@login
def america(stype):
print(stype)
print("美國")

def japan():
print("日本")

def china():
print("中國")

home()
america(‘america‘)
japan(‘japan‘)
china()

3.3 多種驗證方式
user_status = False

def login(stype):
def outer(func):
def inner(*args,**kwargs):
if stype == ‘qq‘:
_username = ‘zs‘
_passwd = ‘123‘
global user_status

if user_status == False:
username = input("user>>:")
passwd = input("pw>>:")
if username == _username and passwd == _passwd:
print("welcome!")
user_status = True
else:
print("wrong username or passwd")
if user_status:
func(*args,**kwargs)
else:
print("僅支援QQ驗證")
return inner
return outer

def home():
print("首頁")

@login(‘qq‘)
def america(stype):
print(stype)
print("美國")

@login(‘weixin‘)
def japan():
print("日本")

def china():
print("中國")

home()
america(‘america‘)
japan(‘japan‘)
china()

4、模組
import sys
for i in sys.path:
print(i)

輸出:
D:\python培訓\our_python\day5
D:\python培訓\our_python
F:\Python\Python3\python35.zip
F:\Python\Python3\DLLs
F:\Python\Python3\lib
F:\Python\Python3
F:\Python\Python3\lib\site-packages
尋找模組時按照上述的路徑依次進行查詢,知道查到模組為止,否則報錯

__file__ 取相對路徑
os.path.abspath(__file__) 把相對路徑變為絕對路徑

多個模組匯入,每個模組寫一行,太長的模組名做別名


py2
目錄中沒有__init__,那就只是一個目錄,目錄是不可以被匯入的
目錄中有__init__,這個目錄就變成了“包”=package 包是模組的集合

py3

4.1 第三方模組
pypi網址上 pip安裝

4.2 標準庫
os模組
os.getcwd() 擷取當前工作目錄,即當前python指令碼工作的目錄路徑
os.chdir("dirname") 改變當前指令碼工作目錄;相當於shell下cd
os.curdir 返回目前的目錄: (‘.‘)
os.pardir 擷取目前的目錄的父目錄字元串名:(‘..‘)
os.makedirs(‘dirname1/dirname2‘) 可產生多層遞迴目錄
os.removedirs(‘dirname1‘) 若目錄為空白,則刪除,並遞迴到上一級目錄,如若也為空白,則刪除,依此類推
os.mkdir(‘dirname‘) 產生單級目錄;相當於shell中mkdir dirname
os.rmdir(‘dirname‘) 刪除單級空目錄,若目錄不為空白則無法刪除,報錯;相當於shell中rmdir dirname
os.listdir(‘dirname‘) 列出指定目錄下的所有檔案和子目錄,包括隱藏檔案,並以列表方式列印
os.remove() 刪除一個檔案
os.rename("oldname","newname") 重新命名檔案/目錄
os.stat(‘path/filename‘) 擷取檔案/目錄資訊
os.sep 輸出作業系統特定的路徑分隔字元,win下為"\\",Linux下為"/"
os.linesep 輸出當前平台使用的行終止符,win下為"\t\n",Linux下為"\n"
os.pathsep 輸出用於分割檔案路徑的字串
os.name 輸出字串指示當前使用平台。win->‘nt‘; Linux->‘posix‘
os.system("bash command") 運行shell命令,直接顯示
os.environ 擷取系統內容變數
os.path.abspath(path) 返回path正常化的絕對路徑
os.path.split(path) 將path分割成目錄和檔案名稱二元組返回
os.path.dirname(path) 返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path) 返回path最後的檔案名稱。如何path以/或\結尾,那麼就會返回空值。即os.path.split(path)的第二個元素
os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) 如果path是絕對路徑,返回True
os.path.isfile(path) 如果path是一個存在的檔案,返回True。否則返回False
os.path.isdir(path) 如果path是一個存在的目錄,則返回True。否則返回False
os.path.join(path1[, path2[, ...]]) 將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略
os.path.getatime(path) 返回path所指向的檔案或者目錄的最後存取時間
os.path.getmtime(path) 返回path所指向的檔案或者目錄的最後修改時間

4.3 sys模組
sys.argv 命令列參數List,第一個元素是程式本身路徑
sys.exit(n) 退出程式,正常退出時exit(0)
sys.version 擷取Python解釋程式的版本資訊
sys.maxint 最大的Int值
sys.path 返回模組的搜尋路徑,初始化時使用PYTHONPATH環境變數的值
sys.platform 返回作業系統平台名稱
sys.stdout.write(‘please:‘)
val = sys.stdin.readline()[:-1]

進度條:
import sys, time
for i in range(5):
sys.stdout.write(‘#‘)
time.sleep(1)
sys.stdout.flush()

5、json
把記憶體對象轉換成字串的形式就是序列化
把一個字元創轉成對應的記憶體對象就是反序列

序列化作用持久化記憶體資料

json.dumps(data) 針對資料序列化
json.loads(f.read()) 針對資料序列化

json.dump(data) 針對資料序列化
json.load(f.read()) 針對資料序列化

5.1 json序列化
<1>
import json
data = {‘name‘:‘zs‘,‘age‘:26}
f = open(‘json.txt‘,‘w‘,encoding=‘utf-8‘)
f.write(json.dumps(data))
f.close()
<2>
import json
data = {‘name‘:‘zs‘,‘age‘:26,‘sex‘:‘men‘}
f = open(‘json.txt‘,‘w‘,encoding=‘utf-8‘)
json.dump(data,f)
f.close()


5.2 json還原序列化
<1>
import json
f = open(‘json.txt‘,‘r‘,encoding=‘utf-8‘)
data = json.loads(f.read())
print(data)
print(data[‘age‘])
<2>
import json
f = open(‘json.txt‘,‘r‘,encoding=‘utf-8‘)
data = json.load(f)
print(data)
print(data[‘age‘])

json從檔案中取資料,僅能取一種類型,並且只能去一條記錄,即dump和load的次數只能是1

json無法序列化函數---所有語言通用
pickle僅用於python語言,支援計劃所有的資料類型

Python基礎篇-day5

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.