日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

MOOC —— Python语言基础与应用 by 北京大学 第九章 高级扩展模块

發(fā)布時(shí)間:2023/12/8 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MOOC —— Python语言基础与应用 by 北京大学 第九章 高级扩展模块 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第九章 高級(jí)擴(kuò)展模塊

          • 49、例外處理
          • 50、推導(dǎo)式
          • 51、生成器函數(shù) generator object
          • 52、上機(jī)練習(xí):生成器
          • 53、圖像處理庫
          • 54、Web服務(wù)框架
          • 55、網(wǎng)絡(luò)爬蟲
          • 56、數(shù)據(jù)可視化
          • 57、上機(jī)練習(xí):高級(jí)擴(kuò)展模塊應(yīng)用

49、例外處理

try…except…finally語句,利用它在異常出現(xiàn)時(shí)及時(shí)捕獲并從內(nèi)部消化掉

try:print('try..')r = 10 / 'xyz'print('result:', r) except TypeError as e:print('TypeError:', e) except ZeroDivisionError as e:print('ZeroDivisionError:', e) else: # try 里面沒出錯(cuò),則執(zhí)行print('no error!') finally: # 無論出錯(cuò)否,都執(zhí)行print('finally..') print('END') try.. TypeError: unsupported operand type(s) for /: 'int' and 'str' finally.. END
50、推導(dǎo)式

推導(dǎo)式是從一個(gè)或者多個(gè)迭代器快速創(chuàng)建數(shù)據(jù)結(jié)構(gòu)的方法,有時(shí)間就把做過的習(xí)題用推導(dǎo)式再做一遍,推導(dǎo)式返回一個(gè)生成器對(duì)象,也是可迭代對(duì)象。生成器不立即產(chǎn)生全部元素,僅在要用到元素的時(shí)候才生成,可以極大節(jié)省內(nèi)存。都這么說了,建議熟悉推導(dǎo)式的語法

列表推導(dǎo)式: [xx for x in range(10)]
字典推導(dǎo)式: {‘k%d’ %(x,):x**3 for x in range(10)}
集合推導(dǎo)式: {x+y for x in range(10) for y in range(x)}
[xx for x in range(10) if x % 2 ==0]
生成器推導(dǎo)式(注意不是元組):( x*x for x in range(10))

51、生成器函數(shù) generator object

生成器是用來創(chuàng)建數(shù)據(jù)序列的一種對(duì)象,極大的省內(nèi)存,通常是為迭代器產(chǎn)生數(shù)據(jù)
在函數(shù)里把return 換成yield 即可
yield和return不同, 如,你想用函數(shù)返回一個(gè)列表[1,2,3,4],用return時(shí),調(diào)用函數(shù)后一次返回[1,2,3,4]給你;用yield時(shí),返回一個(gè)生成器對(duì)象,調(diào)用函數(shù)一次,先返回[1],再調(diào)用一次,返回[1,2],再調(diào)用,返回[1,2,3],直到取完為止。讓我們看兩段代碼

def _return(n):lst = []for i in range(1, n + 1):lst.append(i)return lstprint(_return(4)) _____________________________________________def _yield(n):lst = []for i in range(1, n + 1):lst.append(i)yield lstprint(_yield(4))

我們看到的

[1, 2, 3, 4] # 用return一次返回所有數(shù)據(jù) <generator object _yield at 0x00000286D04331B0>

generator object = 生成器對(duì)象,然后我們用__next__方法來顯式地看yield的取值過程,直到不能再next了,生成器里沒有可迭代的元素了,函數(shù)結(jié)束

>>> a = _yield(4) >>> a <generator object _yield at 0x00000286D04331B0> >>> a.__next__() [1] >>> a.__next__() [1, 2] >>> a.__next__() [1, 2, 3] >>> a.__next__() [1, 2, 3, 4] >>> a.__next__() Traceback (most recent call last):File "<pyshell#63>", line 1, in <module>a.__next__() StopIteration
52、上機(jī)練習(xí):生成器

編寫程序,輸入兩個(gè)數(shù),輸出它們的商,采用例外處理來處理兩種錯(cuò)誤, 給出用戶友好的提示信息
1)除數(shù)為0
2)輸入了非數(shù)值

try:n, m = int(input()), int(input())print(n / m) except ZeroDivisionError:print('除數(shù)不能為0')except ValueError as e:print('請(qǐng)輸入正確數(shù)字', e)

編寫一個(gè)推導(dǎo)式,生成包含100以內(nèi) 所有勾股數(shù)(i,j,k)的列表

a = [(i, j, k) for i in range(1, 101) for j in range(i + 1, 101)for k in range(j + 1, 101) if k ** 2 == i ** 2 + j ** 2]print(a)

編寫一個(gè)生成器函數(shù),能夠生成斐波那契數(shù)列
def fib(): ….
for fn in fib():
print (fn)
if fn>1000:
break

def fib(n):a,b = 1,1for i in range(n):a,b = b,a+byield bfor fn in fib(1001):print (fn)if fn>1000:break
53、圖像處理庫

Pillow庫

from PIL import Image,ImageFilter # 注意,要用什么方法就import什么方法 im = Image.open(<路徑+圖像名+文件格式>) # 打開圖像 im.show() # 顯示圖像 im.save(<文件名>) # 保存圖像 thumbnail(size,Image.ANTIALIAS) # 生成縮略圖 im.filter(ImageFilter.BLUR) # 模糊濾鏡 font = ImageFont.truetype('simsun.ttc',100) # 設(shè)置待添加文字大小為100,字體為宋體 draw = ImageDraw.Draw(im) draw.text((100,10),'添加的文字',(255,0,0),font=font) # 添加文字

用PIL生成驗(yàn)證碼

from PIL import Image, ImageDraw, ImageFont, ImageFilter import random # 隨機(jī)字母: def rndChar():return chr(random.randint(65,90)) # 隨機(jī)顏色1 def rndColor():return (random.randint(64,255),\random.randint(64,255),\random.randint(64,255)) # 隨機(jī)顏色2 def rndColor2():return (random.randint(32,127),\random.randint(32,127),\random.randint(32,127)) # 240 x 60 width = 60 * 4 height = 60 image = Image.new('RGB', (width, height), (255,255,255)) # 創(chuàng)建Font對(duì)象: font = ImageFont.truetype('Arial.ttf',36) # 如顯示這里失敗,這里需要字體所在的路徑 # 創(chuàng)建Draw對(duì)象: draw = ImageDraw.Draw(image) # 填充每個(gè)像素: for x in range(width):for y in range (height):draw.point((x,y), fill=rndColor()) # 輸出文字 for t in range(4):draw.text((60*t +10,10), rndChar(),font=font,fill=rndColor2()) # 模糊: image = image.filter(ImageFilter.BLUR) image.save('code.jpg','jpeg')
54、Web服務(wù)框架

什么是框架:Web服務(wù)器會(huì)處理與瀏覽器客戶端交互的HTTP協(xié)議具 體細(xì)節(jié),但對(duì)具體內(nèi)容的處理還需要自己編寫代碼 一個(gè)Web框架至少要具備處理瀏覽器客戶端請(qǐng)求和服 務(wù)端響應(yīng)的能力
框架的特性:
路由: 解析URL并找到對(duì)應(yīng)的服務(wù)端文件或者Python服務(wù)器代碼
模板: 把服務(wù)端數(shù)據(jù)合并成HTML頁面。
認(rèn)證和授權(quán): 處理用戶名、密碼和權(quán)限
Session: 處理用戶在多次請(qǐng)求之間需要存儲(chǔ)的數(shù)據(jù)
Flask框架的小例子

from flask import Flask app = Flask(__name__)@app.route("/") def hello():return "Hello World!" if __name__ == "__main__":app.run()

在瀏覽器中訪問:http://127.0.0.1:5000/ 看看成果

下面是照抄老師的ppt,一個(gè)運(yùn)用表單插件的例子,然而運(yùn)行失敗,顯示404錯(cuò)誤,先放上代碼再慢慢理解

from flask_wtf import Form from wtforms import StringField from wtforms.validators import DataRequiredclass Myform(Form):user = StringField('Username', validators=[DataRequired()]) from flask import Flask, render_templateapp = Flask(__name__) app.secret_key = '1234567'@app.route('/login', methods=('GET', 'POST')) def login():form = Myform()if form.validate_on_submit():# if form.user.data == 'admin':if form.data['user'] == 'admin':return 'Admin login successfully!'else:return 'Wrong user!'return render_template(r'login.html', form=form)if __name__ == "__main__":app.run()
55、網(wǎng)絡(luò)爬蟲

安裝requests和Beautiful Soup兩個(gè)庫,最簡單的爬蟲工具
爬蟲的基本流程
1、分析網(wǎng)頁結(jié)構(gòu)
2、爬取頁面
3、解析頁面

56、數(shù)據(jù)可視化

請(qǐng)?jiān)彅?shù)學(xué)底子不好,有興趣的同學(xué)自動(dòng)去琢磨。。
numpy矩陣處理庫
matplotlib繪圖庫

57、上機(jī)練習(xí):高級(jí)擴(kuò)展模塊應(yīng)用

信息隱藏工具
輕微改變圖片中像素的RGB值,肉眼無法 察覺
將8bit R/G/B中的最低1bit,用于隱藏一 個(gè)數(shù)據(jù)文件(如文本)
每3個(gè)像素可以隱藏1個(gè)字節(jié)
注意使用不失真圖像格式
BMP/PNG格式
要求:
1)提供圖片和數(shù)據(jù)文件,生成隱藏信息的圖片
2)從隱藏信息的圖片中提取數(shù)據(jù)文件

請(qǐng)轉(zhuǎn)向:python實(shí)戰(zhàn)XX


開發(fā)一個(gè)單用戶的微博系統(tǒng)
可以瀏覽、發(fā)帖、刪帖、回復(fù)
利用Flask編程/shelve持久存儲(chǔ)


蒙特卡羅方法求圓周率
蒙特卡羅方法原理
通過大量隨機(jī)樣本,去了解一個(gè)系統(tǒng),進(jìn)而得到所要 計(jì)算的值
用蒙特卡羅方法計(jì)算圓周率π
正方形內(nèi)部有一個(gè)相切的圓 在這個(gè)正方形內(nèi)部,隨機(jī)產(chǎn)生10000個(gè)點(diǎn),計(jì)算它們 與中心點(diǎn)的距離,從而判斷是否落在圓的內(nèi)部
如果這些點(diǎn)均勻分布,那么圓內(nèi)的點(diǎn)應(yīng)該占到所有點(diǎn) 的 π/4
用matplotlib可視化


Python語言基礎(chǔ)與應(yīng)用 課程結(jié)束

總結(jié)

以上是生活随笔為你收集整理的MOOC —— Python语言基础与应用 by 北京大学 第九章 高级扩展模块的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。