天天堅持 一天一篇 點個訂閱吧 灰常感謝 當個死粉也闊以python
week summer:編程
Python人工智能從入門到精通數組
函數式編程:
是指用一系列函數解決問題
每個函數完成細小的功能,一系列函數的任意組合能夠完成大問題
函數僅接受輸入併產生輸入,不包含任何影響輸出的內部 狀態
函數的可重用性:
若是一個函數的輸入參數必定,則返回結果必須必定的函數
稱爲可重用函數
可重入和不可重入區別就是訪問除局部變量之外的變量
函數式編程要求:
def 建立函數最好不要訪問局部做用域以外的變量,這樣能夠保證
結果的惟一性(可重入性)
高階函數 high order function:
知足下列條件之一的就是高階函數
1.函數接受一個或多個函數做用參數傳入
2.函數返回一個函數閉包
內建高階函數:
map,filter,sortedapp
map(func, *iterables):
用函數和對可迭代對象中的每個元素做爲參數計算出新的可迭代對象,
當最短的一個可迭代對象再也不提供數據時此可迭代對象生成結束
func 函數 *iterables 排列
filter(function, iterable):
篩選可迭代對象iterable中的數據,返回一個可迭代器對象,此可迭代對象
將對iterable進行篩選.函數function 將對iterable中的每一個元素進行求值,
返回False則將此數據丟棄,返回True,則保留此數據dom
sorted(iterable, key=None, reverse=False):
將原可迭代對象的數據進行排序,生成排序後的列表iterable 可迭代對象
key 函數是用來提供一個值,這個值將做爲排序的依據reverse 標誌用來設
置是否降序排序函數式編程
返回可迭代對象函數:
range()
map()
filter()
reverse()
遞歸函數;
函數直接調用或間接的調用自身
直接調用本身
def f():
f()
間接調用本身
def fa():
fb()
def fb():
fa()
遞歸必定要控制遞歸的層數,當符合條件時要終止遞歸
幾乎全部的遞歸都能用while循環來代替
遞歸特色:
優勢:
遞歸吧問題簡單化,讓思路更清晰,代碼更簡潔
缺點:
遞歸因系統環境影響大,當遞歸深時,可能會獲得不可預知的結果
遞推階段:
從原問題出發,按遞歸公式遞推從未知到已知,最終達到遞歸的終止條件
迴歸階段
按遞歸終止條件求出結果,逆向逐步代入遞歸公式
迴歸到原問題求解函數
閉包 closure:
閉包是引用了此函數外部的變量函數工具
閉包是將內部嵌套和函數外部的執行環境綁定在一塊兒的對象ui
裝飾器 decorators(專業提升篇)
裝飾器是一個函數 ,主要用來包裝另外一個函數或類
裝飾的目的是在 不改變函數的的原名(或類名)的狀況下
改變對象的行爲
函數裝飾器
函數裝飾器指裝飾器傳入的是一個函數,返回的也是一個函數
原理就是改變原變量綁定的函數
函數的文檔字符串:
函數內第一次未被賦值給任何變量的字符串是此函數的文檔字符串
模塊 Module:
模塊是一個包含有一系列數據、函數、類等組成的程序組
模塊是一個文件,模塊文件一般以.py結尾
做用:
讓一些相關的數據、函數、類等有邏輯的組織在一塊兒,使用邏輯結構清晰
模塊的數據、函數、類等 可提供給其餘模塊或程序使用
模塊的分類;
內建模塊(builtins)在解析器的內能夠直接使用、
標準庫模塊,安裝python時已安裝且可使用
第三方模塊(一般開源),須要本身安裝
用戶本身編寫模塊(能夠做爲其餘人的第三方模塊)
import 將某模塊總體導入到當前模塊中
from import 將謀模塊的一個或多個屬性導入到當前模塊的做用域
from import * 將某模塊的全部屬性所有導入到當前模塊
dir函數:
dir([對象]) 返回一個字符串的列表
不給參數這返回當前做用域內的全部變量的列表
內建模塊
數學模塊用法:
import math
# 或
from math import *
變量 描述
math.e 天然對數的底e
math.pi 圓周率pi
函數名 描述
math.ceil(x) 對x向上取整,好比x=1.2,返回2
math.floor(x) 對x向下取整,好比x=1.2,返回1
math.sqrt(x) 返回x的平方根
math.factorial(x) 求x的階乘
math.log(x[, base]) 返回以base爲底x的對數, 若是不給出base,則以天然對數e爲底
math.log10(x) 求以10爲底x的對數
math.pow(x, y) 返回 x**y (x的y次方)
math.fabs(x) 返回浮點數x的絕對值
角度和弧度degrees互換
math.degree(x) 將弧度x轉換爲角度
math.radians(x) 將角度x轉換爲弧度
三角函數
math.sin(x) 返回x的正弦(x爲弧度)
math.cos(x) 返回x的餘弦(x爲弧度)
math.tan(x) 返回x的正切(x爲弧度)
math.asin(x) 返回x的反正弦(返回值爲爲弧度)
math.acos(x) 返回x的反餘弦(返回值爲爲弧度)
math.atan(x) 返回x的反正切(返回值爲爲弧度)
時間模塊 time
此模塊提供了時間相關的函數,且一直可用
時間簡介
公元紀年是從公元 0000年1月1日0時開始的
計算機元年是從1970年1月1日0時開始的,此時時間爲0,以後每過一秒時間+1
UTC 時間 (Coordinated Universal Time) 是從Greenwich時間開始計算的.
UTC 時間不會因時區問題而產生錯誤
DST 陽光節約時間(Daylight Saving Time),又稱夏令時, 是一個通過日照時間修正後的時間
時間元組
時間元組是一個9個整型元素組成的,這九個元素自前至後依次爲:
四位的年(如: 1993)
月 (1-12)
日 (1-31)
時 (0-23)
分 (0-59)
秒 (0-59)
星期幾 (0-6, 週一是 0)
元旦開始日 (1-366)
夏令時修正時間 (-1, 0 or 1).
注:
若是年份值小於100,則會自動轉換爲加上1900後的值
模塊名: time
時間模塊用法:
import time
# 或
from time import xxx
# 或
from time import *
變量 描述
time.altzone 夏令時時間與UTC時間差(秒爲單位)
time.daylight 夏令時校訂時間
time.timezone 本地區時間與UTC時間差(秒爲單位)
time.tzname 時區名字的元組, 第一個名字爲未經夏令時修正的時區名,
第一個名字爲經夏令時修正後的時區名
注: CST爲中國標準時間(China Standard Time UTC+8:00)
函數名 描述
time.time() 返回從計算機元年至當前時間的秒數的浮點數(UTC時間爲準)
time.sleep(secs) 讓程序按給定秒數的浮點數睡眠一段時間
time.gmtime([secs]) 用給定秒數轉換爲用UTC表達的時間元組
(缺省返回當前時間元組)
time.asctime([tuple]) 將時間元組轉換爲日期時間字符串
time.mktime(tuple) 將本地日期時間元組轉換爲新紀元秒數時間(UTC爲準)
time.localtime([secs]) 將UTC秒數時間轉換爲日期元組(以本地時間爲準)
系統模塊 sys
運行時系統相關的信息
sys模塊的屬性
屬性 描述
sys.path 模塊搜索路徑 path[0] 是當前腳本程序的路徑名,不然爲 ''
sys.modules 已加載模塊的字典
sys.version 版本信息字符串
sys.version_info 版本信息的命名元組
sys.platform 操做系統平臺名稱信息
sys.argv 命令行參數 argv[0] 表明當前腳本程序路徑名
sys.copyright 得到Python版權相關的信息
sys.builtin_module_names 得到Python內建模塊的名稱(字符串元組)
sys模塊的函數
函數名 描述
sys.exit([arg]) 退出程序,正常退出時sys.exit(0)
sys.getrecursionlimit() 獲得遞歸嵌套層次限制(棧的深度)
sys.setrecursionlimit(n) 獲得和修改遞歸嵌套層次限制(棧的深度)
$ pip3 install tensorflow
第三方模塊 tensorflow 的安裝
必須有網 命令自動下載安裝
自定義模塊文件名必須是標識符
模塊的加載過程:
1. 在模塊導入時,模塊的全部語句都會執行
2. 若是一個模塊已經導入,則再次導入時不會從新執行模塊內的語句
從新加載mymodl1模塊
import imp
imp.reload(mymodl1)
__doc__屬性
文檔字符串自動賦值給
__file__ 屬性
查看模塊的當前路徑
dir(模塊名)
查看模塊屬性
模塊以導入和執行的過程:
1. 先搜索相關的路徑,找到模塊名.py
2. 判斷是否有此模塊對應的.pyc文件。若是.pyc比.py文件新,則直接加載.pyc文件
3. 不然 用模塊.py,文件生成.pyc,並加載執行
pyc python的編譯
編譯 解釋執行
mymod.py --------> mymod.pyc --------> python3
模塊的文檔字符串和函數同樣
模塊的 __doc__ 屬性
此屬性用於綁定模塊的文檔字符串
模塊的 __file__屬性
此屬性用於記錄模塊對應的文件路徑名
模塊的 __name__屬性
__name__屬性 用來記錄模塊自身名字 判斷是否爲主模塊
主模塊: __name__綁定 '__main__'
非主模塊: __name__ 綁定模塊名
模塊的 __all__列表
模塊中的 __all__列表是一個用來存放可導出屬性的字符串列表
模塊的隱藏屬性
模塊中以'_'開頭的屬性,在from xxx import * 導入時,一般將不被導入
標準庫模塊
隨機模塊 random
說明:
random模塊是用於模擬或生成隨機輸出的模塊.
import random as R
函數名 描述
R.random() 返回一個[0, 1) 之間的隨機實數
R.uniform(a,b) 返回[a,b) 區間內的隨機實數
R.randrange([start,] stop[, step]) 返回range(start,stop,step)中的隨機數
R.choice(seq) 從序列中返回隨意元素
R.shuffle(seq[, random]) 隨機指定序列的順序(亂序序列)
R.sample(seq,n) 從序列中選擇n個隨機且不重複的元素
包(模塊包) package
包是將模塊以文件夾的組織形式進行分組管理的管理方法
__init__.py是常規包內必須存在的文件
__init__.py會在包加載時自動調用
__init__.py :
1. 編寫此包的內容
2. 在內部填寫文檔字符串
. 在__init__.py文件內能夠加載此包所依懶的一些其它模塊
__init__.py內的 __all__ 列表
用來記錄此包中有哪些子包或模塊在用from import *語句 時被導入
__all__列表只對 from xxx import *語句起做用
導入包時的索引路徑順序:
1. 搜索程序的當前路徑
2. sys.path 提供的路徑
包的相對導入:
包的相對導入是指包內模塊的相互導入
相對導入時不能超出包的外部
包的相對導入 只對後兩種導入方式有用
異常(基礎)except:
什麼是錯誤:
是指因爲邏輯或語法等導程序沒法正常執行的問題
什麼是異常:
是程序出錯的標識符的一種狀態
當異常發時 程序不會再向下執行,而轉去調用此函數的地方
待處理此錯誤並恢復爲正常狀態
異常的做用:
用做信號, 通知上層調用者有錯誤產生須要處理
異常處理語句(4條):
try-except 語句:
用於接受異常通知, 捕獲異常
try-finally 語句:
執行必須執行的語句
raise 語句:
發送異常通知, 並進入異常狀態
assert 語句:
根據條件選着性的發送 AssertionError類型的異常通知
爲何要處理異常機制:
在程序調用層數比較深的時候, 向主調用函數傳遞錯誤信息 須要層層return返回
比較麻煩, 用異常處理機制能夠較簡單的傳遞錯誤信息
用<>括號表示的必定是對象
什麼是迭代器
迭代器是訪問可迭代對象的工具
迭代器是指用iter(obj) 函數返回的對象
迭代器能夠用next(it) 函數獲取可迭代對象的數據
迭代器只能向前取值,不會後退
用iter函數能夠返回一個可迭代對象的迭代器
迭代器函數iter和next
iter(iterable) 從可迭代對象中返回一個迭代器,iterable 必須是能提供一個迭代器的對象
next(iterator) 從迭代器iterator中獲取下一個記錄,若是沒法獲取下一條記錄,則觸發StopIteration異常
什麼是生成器:
生成器是可以動態提供數據的對象,生成器對象也是可迭代對象
動態就是現用現生成數據
生成器有兩種:
1. 生成器函數
2. 生成器表達式
生成器函數的定義
含有yield語句的函數是生成器函數,此函數被調用將返回一個生成器對象
yield 翻譯爲(產生或生成) 動態生成數據 在函數內能夠一個或多少
在生成器函數調用return 會觸發一個StopIteration異常
函數:
zip(iter1[, iter2[, ...]]) 返回一個zip對象,此對象用於生成元組,元組的個數由最小的可迭代對象決定
enumerate(iterable[, start]) 生成帶索引的枚舉對象,返回迭代類型爲索引-值對(index-value對)
, 默認索引從零開始,也能夠用start指定(排序 自定義標號)
字節串和字節數組
字節串bytes (也叫字節序列)
做用:
存儲以字節爲單位的數據
字節串是不可變的字節序列
字節:
字節是由8個位(bit)組成的數據單位,是計算機進行數據管理的單位
字節是用 0 ~ 255 範圍內的整數表示的 2 ** 8 - 1
字節串的構造函數 bytes
bytes() 生成一個空的字節串 等同於 b''
bytes(整數可迭代對象) # 用可迭代對象初始化一個字節串
bytes(整數n) 生成n個值爲0的字節串
bytes(字符串, encoding='utf-8') 用字符串轉爲編碼生成一個字節串
bytes 的運算:
+ += * *=
< <= > >= == !=
in / not in
索引和切片
len(x)
max(x)
min(x)
sum(x)
any(x)
all(x)
bytes 和 str 的區別:
bytes 存儲字節( 一般值在 range(0, 256))
str 存儲unicode字符( 一般值在0~65535)
bytes 與 str 的轉換
編碼(encode)
str ------------> bytes
b = s.encode(encoding='utf-8')
解碼(decode)
bytes ----------> str
s = b.decode(encoding='utf-8')
字節數組 bytearray
是可變的字節序列
字節數組的構造函數: bytearray
bytearray() 建立空的字節數組
bytearray(整數) 用可迭代對象初始化一個字節數組
bytearray(整型可迭代對象) 生成n個值爲0的字節數組
bytearray(字符串, encoding='utf-8') 用字符串的轉換編碼生成一個字節數組
索引和切片
(字節數組支持索引和切片的賦值操做,規則同列表的索引和切片賦值規則)
bytearray的方法: BA.clear() 清空 BA.append(n) 追加一個字節(n爲0~255的整數) BA.remove(value) 刪除第一個出現的字節,若是沒有出現,則觸發ValueError錯誤 BA.reverse() 字節順序反轉 BA.decode(encoding='utf-8') # 解碼爲字符串 BA.find(sub[, start[,end]]) # 查找 sub