個人編程之路,從python從新開始。

大學本科學的計算機科學與技術,十年過去了,如今準備撿起來。目前python跟當前工做有很大幫助,因此從python開始從新走編程之路。html

預科:5.28-5.31

一:安裝和初學markdown

  • markdown是一款word精華提煉版。經常使用功能都有,而且更簡潔方便。python

  • https://www.typora.io下載地址git

  • 鼠標選擇段落-標題等級web

  • 正文格式的基礎上,行開頭輸入一個#加空格,以後輸入的內容變爲一級標題,兩個#變爲二級標題。依此類推,一共6個#6級標題。也能夠用ctrl+1標記一級標題。面試

  • 鼠標點選段落,有序標題,會自動縮進。也能夠正文格式數字1.加空格開頭,自動變爲縮進後的有序列表。數據庫

  • 按一下回車,自動換行到下一個 。按兩下回車,結束當前有序列表。按退格鍵,刪掉數字,以後按Shift+tab鍵也能夠結束當前有序列表的縮進。編程

  • 再原有縮進基礎上,按ctrl+]中括號,能夠增長縮進行。api

  • 無序列表是不帶序號的點點點列表。數組

  • 加一個紅色bash

  •  

插入圖片能夠截圖直接粘貼,系統自動起名並顯示路徑,但此路徑是本機路徑。保存爲doc格式時,只是經過路徑調用,沒存在文件內。須要選文件-導出-PDF,就能夠把包括圖片在內的內容保存爲PDF。

  • 插入:在段落裏點選表格

姓名 性別 愛好 年齡
http://www.javashuo.com/tag/www.baidu.com      
直接輸入網址,能夠自動變成超連接,超連接鼠標左鍵點擊只提示,按ctrl按左鍵就能夠打開了。      
百度一下 輸入中括號再輸入小括號,變爲超連接加備註,中括號內輸入備註,小括號內輸入地址。此時的地址,能夠爲本地地址,也能夠時網絡地址,網絡地址記得加https://    
print"朱榮升"
<span style="color:red;">加一個紅色</span>

輸入三個波浪鍵點插入代碼塊。代碼塊輸入後再右下角能夠選擇編程語言。

二:安裝python

百度搜索python。www.python.org

安裝多版本,可在每一個版本的exe程序重命名加版本號方便區別。

在個人電腦-屬性-高級系統設置-環境變量-path-編輯-新增長python安裝路徑進去,win7系統可能用封號隔開粘貼進去。win10系統直接新建加入路徑。

把全部版本的python都配置好,就能夠在cmd命令行裏直接調用了。

三:安裝pycharm

http://www.jetbrains.com/pycharm/

professional是專業版,建議使用但收費。community社區版,免費。

安裝過程,選擇激活碼。

以後粘貼激活碼激活

選擇上圖這裏,在右邊輸入python的安裝地址。

目前講到這裏。

pycharm的簡單應用

括號,引號等會自動補齊並跳轉光標。

shift+回車,完成當前行代碼並跳到下一行開頭。

end 跳到當前行最末尾

ctrl+d複製粘貼當前行並插入到當前行下一行

ctrl+shift+上下箭頭,是上下插入移動當前行。

四:安裝git,git對接碼雲遠程代碼庫

  • https://git-scm.com 下載安裝git。

  • 註冊碼雲https://gitee.com ,加入組織,新建倉庫,記住用戶名密碼和倉庫的網址。

  • 本地建立一個文件夾做爲本地倉庫,用來對接網站的遠程倉庫,在本地倉庫空白處右鍵,選擇git bash here。#打開git並進入當前路徑。

  • git init #初始化,當前文件目錄下會生成一個.git的隱藏文件夾。此文件夾及生成本地倉庫並配置完成。

  • git config --global user.email "這裏寫本身郵箱" 本地git配置郵箱,跟碼雲無關。

  • git config --global user.name "這裏輸入名字" 本地git配置用戶名,跟碼雲無關。

  • git add . 這個命令是存檔當前對本地倉庫文件的增刪改操做到本地的git配置記錄裏。

  • git commit -m "這裏寫備註信息,隨便填" 這個命令是針對剛纔的add.的內容放到本地倉庫並備註信息。

  • git remote add origin https://gitee.com/old_boy_python_stack_23/19052823038.git 此命令是將本地倉庫和後面的網址遠程倉庫對接在一塊兒。其中remot是命令,origin是自定義的倉庫名。

  • git push -u origin master 推送本地倉庫內容到遠程倉庫使兩個倉庫同步。

  • git pull origin master 從遠程倉庫拉下來遠程倉庫的增刪改動做。

  • Issues 從組織當中點這個,而後執行。執行完以後在評論區回覆完成進度。完成數/總數的形式。哪一題沒完成,什麼理由寫清楚。天天睡覺前把本地寫的代碼跟碼雲同步一下。

<div style="text-align: right;"><a name="_label1"></a> <a href="#_labelTop">返回頂部</a></div>
返回頂部

 

五:思惟導圖

https://www.processon.com註冊。

tab鍵建立子圖,雙擊寫內容,del刪除。其餘功能慢慢探索。

六:博客園

https://www.cnblogs.com註冊,申請開通博客。在選項裏選擇默認編輯器markdown。markdown裏有導出png,而後直接上傳,能夠減小上傳多個圖片的問題。

題外話,關於面試:

第一階段:python基礎學習

一:計算機基礎知識

  1. cpu 中央處理器,運算速率最快

  2. 內存 臨時快速存儲,斷電即消失,是cpu和硬盤的中介。

  3. 硬盤 長期存儲數據,速度相對慢

  4. 操做系統:是一個特殊軟件,調配硬件資源來支持其餘軟件的需求。

二:python的應用和歷史

  1. 雲計算,web開發,人工智能,系統運維,爬蟲,金融輔助,圖形gui,遊戲。

  2. google,

  3. 3python是一個什麼樣的語言

    1. 編譯型:只翻譯一次就到機器語言。C,C++

      • 優勢:運行速度快

      • 缺點:開發效率低

    2. 解釋型:一句一句的翻譯到機器語言。PY,PHP

      • 優勢:開發效率高

      • 缺點:運行速度慢

    3. 混合型:Java,C#

  4. 4python的優缺點

    • 可移植性 跨操做系統,跨平臺兼容

    • 可擴展性 某一段須要速度快或加密的能夠用C來寫加進去。

    • 可嵌入性 能夠在C或C++裏嵌入使其具有腳本功能。

  5. python的種類

    • Cpython 官方版,使用C寫的。

    • Jython Java版本

    • IronPython C#實現的

    • PyPy 用python實現python,運行速度快。將來可能爆款

三:python程序

一:寫一個python程序

  • 文本文件,保存時,另存爲utf-8文件類型。

  • print是排bug神器

    print('hello world')

二:變量,常量,註釋,用戶交互

  1. 書寫格式a = 1

    1. 新建變量a #能夠用 a=''來新建一個空的字符串類型的變量。

    2. 把1賦值給變量a

    3. 變量類型由=右邊的數據類型決定

  2. 變量命名規則:

    1. 字母_下劃線,數字三種組合且不能以數字開頭

    2. 不能是python的關鍵字,例如print,input等等

    3. 不建議用中文和拼音

    4. 能夠區分大小寫

    5. 要右意義

    6. 駝峯體:AbcDef,下劃線分割體:(官方推薦)abc_def

  3. 常量:純大寫字母和下劃線組成的,常量也是變量,但一般約定不修改。

  4. 註釋

    1. #單行註釋 ,每行#後面的內容是爲這一行作註釋。

    2. 批量註釋,選中要註釋的大批內容,Ctrl+?鍵能夠批量註釋,效果等同於每一行開頭加一個#。

    3. 字符串批量僞註釋法:用兩組三個’‘’單引號‘’‘,或兩組三個「」「雙引號」「」引發來。這樣會使其中的內容變成字符串,若是這個字符串不調用,則會一直閒置,至關於被註釋。三個引號有些特殊狀況也會用到,注意用這個備註時要注意。

  5. 用戶輸入input

    • input("這裏是提示語可無")

    • import getpass ,輸入時不顯示 。

    • 在input外面定義類型,無定義時默認是字符串。好比int(input("這裏拿到的數據若是能夠轉換成整形,則轉換,若是不能則報錯"))

    • print(type(查看這裏數據的類型並輸出結果)),也能夠用type(str)==str來作判斷語句。

三:if語句

  1. 書寫格式

    if 3>2:
    代碼塊

     

  1. 單純選擇,條件不知足可跳過

    1. if 條件:

      縮進:成立執行

      不成立跳過

  2. 二選一,必須執行一個

    if 條件:

    縮進:成立執行。

    else :

    縮進:不成立執行

  3. 多選項可不選,if elif elif 多條件可不執行

  4. 多選項必選其一,if elif elif elif else多選必選一個

  5. 嵌套IF

    1. if條件:

      縮進:上面成立再次if條件:

      再次縮進:上面成立執行

四:字符串格式化輸出

  1. 佔位符方式

    「%s%d%i」%(a,b,c) 最基礎的格式,在定義字符串時,%表明佔位符,s爲給這個佔位符指定數據類型爲str,d和i指定爲整形。再在字符串後緊挨着書寫%(),括號內根據前面字符串的佔位符數量和次序以及數據類型依次一一對應填充內容。

    這裏的字符串能夠用變量代替。

    n = 「%s%s%s%s%s」

    print(n%(a,b,c,d,e))

  2. f"{}"方式。此方式最簡潔方便,可是3.6版本纔開始有的功能,建議先不用,工做中可能遇到3.6如下版本工做?

n = 1

m = 2

num = f"{n}+{m}={m*n}"

print(num)

1+2=2

f做爲頭標,表示接下來的這個字符串我能夠用佔位符,而後直接在字符串內容中用{變量或其餘}拼接其餘字符串。

  1. fomat

五:while循環

  1. while 條件 :

    代碼塊,成立則執行並持續循環直到不成立往下走

while 條件: 代碼塊 break,退出並結束break所在的循環。 continue 退出本次循環並繼續下一次循環條件判斷。 else:當while不是被break結束的時候,即正常條件判斷不成立時結束的狀況下,執行這裏。

六:運算符

  1. 算數運算符

    • +加,-減,*乘,/除,//除取整,%除取餘,**指數

  2. 賦值運算符

    • =直接賦值,+=1原值+1賦爲新值,-=1,*=,/=,//=,%=,**=

  3. 比較運算符

    • ==等於,>大於,<小於,>=大於等於,<=小於等於,!=不等於

  4. 成員運算符

    • in 在裏面,not in 不在裏面。

  5. 邏輯運算符

    • not不是,not在這裏最高優先級。and而且,和,與的意思,第二優先級。or或者,最低優先級。

七:整型

  1. print(num.bit_length()) 求十進制的數字轉換成2進制時的位數。

八:布爾值

  1. boll,布爾值,True 真 False假

  2. print(bool())輸出後面括號內容的布爾值。

  3. boll(input())取輸入內容的布爾值。

  4. 數字0是False,其餘數全都是True。

  5. 「」兩個引號間沒內容的空字符串,布爾值是False,有內容的都是True

  6. print(int(False))輸出的是將布爾值整形化,結果是0. print(int(True))的結果是1

  7. print(str(True))把布爾值轉換成字符串至關於「True」,同理「False」

九:字符串

  1. 字符串用於存儲數據的。用引號引發來的是字符串,‘ ’兩組單個單引號,「 」兩組單個雙引號,‘’‘ ’‘’兩組3個單引號,「」「 」「」兩組3個雙引號

  2. 下標(索引)name = 「meet」 print(name[2]),從左向右開始數,從0開始按01234的順序數。這個print取的值是meet當中第三個字母,就是右邊的e。

    print(name[-3]),這裏加了-號,就是從右往左數,一樣是012345這樣數。

  3. 切片

    name = 「abcdefghijklmnopqrstuvwxyz」

    print(name[5:-3])這裏取的值是從第5位開始取下一位,取到右數第3位的前一位。

    print(name[0:10:4]) 0是起始位,10是終止位,4是步伐,每4位取一次數。步長位不寫默認位1。起始位和終止位。步長位默認1,且是從左往右跳。

    起步位若是在後面,結束位在前面,也是能夠的,但必定要注意方向。

  4. 步長7

  5. 字符串經常使用的方法

    1. 大小寫轉換

      1. upper 全部字母變爲大寫

      2. lower 全部字母變爲小寫

      3. swapcase()大小寫互換

      4. casefold 轉換小寫,覆蓋的內容比lower更普遍,好比德語字母

      5. title 把每一個單詞的首字母變爲大寫,以非字母隔開視爲單詞

      6. s.capitalize()首字母大寫,整個字符串的第一個字母變成大寫.

    2. 切來切去

      1. center(20,*)把字符串拉長並用星號擴充,原字符串填充在中間,單個的星號優先在左邊.

      2. strip() 去掉兩邊的空格,空白,換行符製表符等.括號內也能夠輸入其餘內容

      3. rstrip去掉右邊的空格空白

      4. lstrip去掉左邊的空格空白

      5. name.replace('n','s',2)#將name裏的面n替換成s,默認所有替換,可加,個數,從左往右換n個。

      6. split()#將name以括號內容切割成多個部分。()內的內容會損失掉,返回的結果是一個列表.默認是用空格切.

        1. 若是字符串內沒有要切割的內容,切割結果是將這個字符串轉換成一個列表

        2. 若是字符串切割部分在開頭或結尾,切出來的列表會有一個空字符串作元素

        3. 若是字符串切割部分就是字符串自己,那麼切出來的列表是兩個空字符串元素.

    3. 格式化輸出

      1. s1 = "我叫%s,我今年%s歲了,我喜歡%s"%("名字","年齡","愛好")

      2. s1 ="我叫{},我今年{}歲了,我喜歡{}".format("名字","年齡","愛好")

      3. s1 ="我叫{0},我今年{2}歲了,我喜歡{1}".format("名字","年齡","愛好")#這裏能夠用索引下標指定位置精準替換

      4. s1 ="我叫{name},我今年{age}歲了,我喜歡{hobby}".format(name="名字",age="年齡",hobby"愛好")用這個更清晰直觀,但須要多輸入內容.

    4. 查找

      1. print(name.startswith('a'))#name是不是a開頭。返回結果是bool值

      2. print(name.endswith('i'))#name是不是i結尾。返回結果是bool值

      3. name.count('z')#name裏有幾個z,計數

      4. s.find 找位置,若是能找到,是報查找內容的第一個字符的索引下標返回.若是找不到,返回-1.

      5. s.index 找索引,若是能找到,返回查找內容的第一個字符的索引下標,找不到則報錯.

    5. 條件判斷

      1. is.alnum()是否只由字母,數字,中文組成

      2. isalpha()是否只由字母和中文組成.

      3. isupper()是否有大寫字母而且沒有小寫字母,其餘中文和符號無視.

      4. islower()是否有小寫字母而且沒有大寫字母,其餘中文和符號無視.

      5. isdigit()是否由純數字組成.①這種符號也會被認位是數字,但沒法int使用.會報錯

      6. isdecimal()10進制阿拉伯數字,這個最經常使用.

      7. isnumeric()阿拉伯數字,中文大寫數字,中文小寫數字均可以.壹貳叄肆伍陸柒捌玖拾

    6. 長度 len(字符竄或變量名),len()是內置函數,能夠直接用.當一個數字用.len的括號內能夠是空字符串,但不能沒東西.也就是說len最小爲0.

    7. 計數 s.count("")

十:for循環

十一:range範圍

s = range(1,10) 取頭不取尾.從1取到9.取不到10.

print(s) range(1,10) 輸出的是range(1,10)自己這個格式.

print(list(s))輸出的是[1,2,3...,9]這個列表.

 

十二:列表

  1. 定義:

    1. 能裝對象的對象. []中括號,內每一個元素以括號隔開,單一元素須要有逗號,沒有元素能夠爲空.

    2. li = list("1234")迭代定義列表.

  2. 索引和切片

    [start:end:step]
  3. 列表操做

    1. 反轉 li.reverse(),把列表反過來放.

    2. 升序 li.sort(),

    3. 降序 li.sort(reverse=True)

  4. 增長元素

    1. append()追加末尾

    2. insert(索引值,內容)指定位置添加

    3. extend()擴展添加,可迭代對象,迭代裏面每一個元素進列表.

    4. 合併[]+[]

    1. pop()默認刪除指定位置,能夠指定位置,有返回值.

    2. remove()元素名稱刪除

    3. del索引,切片刪除

    4. clear清空

    1. li[索引] = 內容

    2. li[切片] = 步長爲1是,切片2個以上元素,添加內容能夠任意數量. 步長不爲1時,元素數量須要一一對應.

  5. 查:索引,切片,步長,for循環,while循環. li.index('查找內容')

  6. join, "_".join(li),用下劃線把後面的可迭代對象連接起來.

十三:元組

  1. tuple, 小括號包起來,元素間逗號隔開.定義

  2. tu = tuple("12345"),迭代字符串定義.

  3. 不能修改.

  4. tu.count('3')元組中3的數量

  5. tu.index('1')元組中第一個1的位置.

十四:字典

  1. 定義

    1. 關鍵字dict,大括號{}包涵,鍵值對."鍵":"值"

    2. dict(k=1,k1=123,k2='aa'),定義字典.

    3. dic = dict.fromkeys(可迭代對象,任何內容),迭代第一項作鍵,後面內容作全部鍵的值.

  2. 鍵:必須可哈希(不可變的數據類型),而且是惟一的. 字符串,數字,元組. 不能是列表. 字典自己是可變的.

  3. 值:任意

  4. 不一樣的鍵之間是無序的,相同的鍵根據時間前後,後面鍵的內容直接覆蓋前面的.

  5. dic = {'a':'b','b','c'}

  6. 增:

    1. dic.setdefault('c','aaa'),添加的鍵若是不在字典裏,新加進去.若是在字典裏,不進行任何操做.

    2. dic['s'] = 'ssss',添加新的鍵值對.

    3. dic.update({1:2,"a":"a1"}) ,有就改,沒有就加.

  7. 刪:

    1. dic.pop('a') ,pop有返回值,爲被刪除值.

    2. del dic[鍵],後面不加是直接刪.

    3. dic.clear 清空

  8. 改:

    1. dic['b'] = '值',跟增同樣的寫法.有就改,沒有就增.

    2. dic.update({1:2,"a":"a1"})

  9. 查:字典的查詢只能經過鍵獲取值,不能經過值獲取鍵.

    1. print(dic['c'])若是有鍵就返回鍵所對應的值,若是沒有就報錯

    2. print(dic.get('a','若是沒有就返回這裏的內容,不寫默認返回None'))

  10. 其餘操做

    1. dic.keys 獲取鍵

    2. dic.values()獲取值

    3. dic.items獲取鍵和值,出來的是多個元組,每一個元組對應一個鍵值對.

    4. print(id(a)),輸出a的內存地址.

    5. enumerate(dic,1)枚舉,第二個參數是起始數,默認0,能夠本身寫.

  11. 字典的做用

    1. 存儲大量數據,相對來講,比列表更適合存大量數據.

    2. 字典的查找比較便捷,由於鍵值是本身編輯的.

    3. 數據之間能夠關聯

    4. 字典比較消耗資源

十五:小數據池

  1. 代碼塊:一個類,一個模塊,一個函數,

  2. 在CMD終端中,每一行代碼就是一個代碼塊.

  3. 小數據池int支持範圍 -5 -- 256,不一樣代碼塊之間用範圍內數字時也是一樣的地址. 在相同代碼塊時,全部值相等的內存地址也同樣.

    1. is是判斷內存地址是否相同,==是判斷值是否相同.

  4. 字符串:

    1. 字符串作乘法的時候結果的長度在20之內,地址同樣.長度超過20,進行駐留

    2. 本身定義的字符串,若是僅由字母,數字,下劃線組成,不限制長度.包含其餘內容的,駐留.

    3. 特殊字符(中文除外)定義1個的時候符合小數據池.超過1個駐留.

  5. 布爾值,True和False兩個駐留.

十六:集合

  1. 定義

    1. 集合{1,2,3,False,(1,2,3)},無序,可變,元素不會重複,重複時只留一個,元素是不能變的可哈希的.

    2. s = set ('1234')迭代建立集合.

    1. s.update()迭代添加

    2. s.add()添加內容

    1. del s 刪除整個集合

    2. s.clear 清空

    3. pop()隨機刪除1個

    4. remove(指定元素刪除)

  2. 改 沒有直接改的方法,先刪掉一個,再添加一個.就能夠達到修改的目的了.

  3. 集合能夠用len()計數.

    1. s1 - s2 差集

    2. s1 | s2 並集

    3. s1 & s2交集

    4. s1 ^ s2 差集合並,反交集.

    5. s1 > s2 包含而且至少多一個元素

    6. s1 < s2 被包含而且至少少一個元素.

    7. frozenset({1,2,3,4,5})凍結集合. 凍結後的集合,是不可變得.

  4. 集合主要用於去重複.

  5. list(set(li))從列表轉換成集合再轉換回列表,就去掉重複項了.但須要注意的是,返回的列表可能順序跟原來的不一樣.

十六:深淺拷貝

 

對比賦值,淺拷貝,深拷貝的區別.

賦值:變量名不一樣,但變量地址同樣,指向地址也同樣,指向的內容也同樣.

十七:類型轉換

int整形,str字符串,bool布爾值,list列表,tuple元組,dict字典,set集合.

  1. int str(int)轉換成字符串. int不能直接轉換成列表,字典,集合,元組.

  2. str

    1. 轉換成int,str必須是阿拉伯數字,int(str)

    2. str轉list

      1. li = list(str) 把字符串裏的每個字符,按順序變成列表裏的元素.

      2. str.split() 切割轉,

        1. 爲空時,或括號內內容在字符串中不存在時.把整個字符串做爲一個元素組成一個單元素列表.

        2. 括號內內容在字符串中存在時,這個值換成列表中的逗號,其餘被這個值(逗號)隔開的內容變成元素.逗號兩邊或某一邊沒有內容時,用空字符串''代替元素.(就是說若是這個值在兩邊,那麼就會多一兩個空元素)

    3. list轉str

      1. str(list),把整個列表兩邊套上引號,變成總體字符串,包含其中的方括號,元素,逗號等等全部內容.

      2. ('字符串').join(列表),注意這個格式,是用字符串去連接列表的每一個字符串元素. 字符串內容能夠爲空,也能夠是任意字符串. 列表內只能由字符串元素組成.由數字或列表嵌套,等等會報錯.

    4. str轉tuple tuple(str),迭代添加字符串中每個字符到元組中

    5. tuple轉str str(tuple)將整個元組變成要給字符串,同列表. 能夠先把元組轉成列表,而後用join命令去處理.

    6. str轉dict 字典比較特殊,每一個元素要兩個值,沒有直接轉換的方式.能夠經過批量建立命令,

      dic=dict.fromkeys(str,值) 這裏會迭代str把每一個字符變成鍵,他們共享一個值. 注意這個值若是是可變類型,那麼一個變其餘的也跟着變.

    7. dict轉換str str(dict),總體變成字符串. 能夠經過dic.keys()把keys拿出來作成高仿列表以後join拼接變成字符串,經過dic.value把值拿出來作成高仿列表以後join拼接變成字符串.

    8. str轉set set(str)直接迭代字符串內容添加到集合中.

    9. set轉str str(set)整個轉. 可讓set變成列表後作join操做.

  3.  

  4.  

十八:編碼升級

s = '編碼,解碼' encode()編碼,decode()解碼

s1 = s.encode("gbk")

十九:文件操做

  1. f = open("文件路徑文件名擴展名",mode="r打開模式",encoding="UTF-8編碼集")

  2. content = f.read() 讀取內容,默認所有讀取,可填寫讀取字符數,注意換行符也計數.

  3. line1 = f.readline() 讀取一行內容,注意換行符,可line1 = f.readline().strip()去掉換行符

  4. line2 = f.readline() 跟上一行代碼連在一塊兒就是讀取下一行,由於光標移動了.

  5. content = f.readlines() 讀出來以行爲單位,每行作爲一個元素.造成一個列表.

  6. f是一個可迭代對象,由於是大字符串.

for line in f:
print(line)
  1. 打印出來的是每一行

  2. f.close()關閉,一般操做完文件要關閉.

  3. f.tell返回光標當前位置,按字節算.

  4. with open(文件路徑,mode,encoding) as f,\open(文件路徑,mode,encoding) as f1

  5. import os

    1. os.rename("原名","新名")

    2. os.remove('文件名')刪除這個文件.

day10自學,加速.

globals()查看全局做用域中的內容

locals()查看當前做用域中的內容

goobal 在局部引入全局變量

nonlocal在局部,引入離他最近的某一層的局部變量. 引不到全局變量.

 

<function func at 0x000001AE9D4F2EA0>出現相似這樣的結果,是指引用的變量是個代碼地址,後面加個括號能夠直接引用代碼地址裏的內容.

 

iter(li)把列表li變成要給生成器.

 

內置函數

eval剝去字符串的外衣,返回本質.這個本質必須是數字或變量名等等能夠單獨存在的.不能用的剝出來會報錯.

exce 把字符串裏面的內容當代碼來運行..這段代碼必須符合語法,能夠是空,變量名等,但不合語法就會報錯.配合使用,能夠剝開兩層.

閉包

print(ret.__code__.co_freevars)ret是個疑似閉包的函數,後面獲取自由變量函數.
下面結果有自由變量,就是閉包.

 

裝飾器

def func():
print('這是原函數主功能')
def warpper(f):
def inner():
f()
       print('這是在原函數的基礎上,加的新功能')
return inner
func = warpper(func)# 新的func變成了原func沒有改變任何源碼的基礎上,加了warpper功能.
#若是沒有inner新這一層定義函數,那麼在定義新func的同時,就執行了舊func,改變了舊func的狀態.
func()#此時的新func沒有改變代碼,沒有改變調用方式和調用狀態.執行完原功能後還能執行新功能.

day19

日誌:

  1. 系統日誌:記錄服務器的一些重要信息:監控系統,cpu溫度,網卡流量,重要的硬件的一些指標,一般是運維人員用的. 記錄操做指令

  2. 網站日誌:訪問異常,網站各板塊的訪問量,點擊率,等等.蜘蛛爬取次數等.

  3. 輔助開發日誌:開發人員在開發項目中,利用日誌進行排錯,排除一些避免不了的錯誤(記錄).輔助開發.try,

  4. 記錄用戶信息的日誌:大數據.消費習慣,新聞偏好,等等(數據庫解決)

日誌版本

  1. Low版(簡易)

  2. 標準()

  3. 旗艦(開發使用)

day20 collections模塊

提供特殊的數據類型

面向對象

網絡協議

 

金融量化

ipython交互器

平常功能

  1. 安裝 pip3,

  2. 有行數提示.而且行數能夠供後續操做這一行的代碼

  3. tab鍵自動補全 list.ap 此時按tab鍵會補全list.append, list.此時按tab鍵,會把全部方法列出來供選

  4. cd,cd..等命令,能夠打開文件位置,仿照cmd的命令.

  5. !加cmd命令,可直接執行cmd的命令

  6. # 模糊搜索等功能
    list.*pp*? #自動補全爲list.append  
    a.__*__? #自動彈出全部雙下方法供選擇
    a? #打印a的大小,數據類型,內容
    def func(a):
    print(a)
    #func? 打印類型,
    #func?? 把代碼打印出來,以及
  7. 經常使用快捷鍵

    1. Ctrl-P或 上箭頭 後向搜索命令歷史中以當前輸入的文本開頭的命令

    2. Ctrl-N或 下箭頭 前向搜索命令歷史中以當前輸入的文本開頭的命令

    3. Ctrl-R 按行讀取的反響歷史搜索(部分匹配)

    4. Ctrl-Shift-V 從剪貼板粘貼文本

    5. Ctrl-C 終止當前正在執行的代碼

    6. Ctrl-A 光標移動到行首

    7. Ctrl-E 光標移動到行尾

    8. Ctrl-K 刪除從光標開始至行尾的文本

    9. Ctrl-U 清楚當前行的全部文本

    10. Ctrl-F 或左箭頭將光標向前移動一個字符

    11. Ctrl-b 或右箭頭 將光標向後移動一個字符

    12. Ctrl-L 清屏

魔術命令

  1. %run test.py 這裏能夠直接運行py文件

  2. %paste 命令,打印並執行剪貼板裏的代碼.

  3. li = [random.randint(1,1000000) for i in range(10000)]
    %timeit li.sort()
    #上兩行代碼運行結果195 µs ± 61.7 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)  結果爲195微秒上下波動61.7微秒之間,  運行了7輪,每輪運行1萬次.得出來的結果範圍.
    
    a=1
    b=2
    %timeit a+b
    #結果49 ns ± 2.88 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)  49納秒上下波動2.88納秒.   運行了7輪,每輪100萬次.得出的結果範圍.
    
  4. %pdb on #打開調試模式開關 %pdb off 關閉調試模式開關.

    • 調試模式下, 運行代碼會在報錯前停住,以後提示哪裏即將報錯.可查看代碼中指向到當前時的各個變量的值,以便排查錯誤.

  5. a = 1
    b = 2
    a+b #這裏顯示3這個結果打印但沒保存 若是用c=a+b保存但不打印
    a*b #這裏顯示2
    我須要用到上面的3和2的時候,能夠用一個_表明上一個結果.__兩個下換線表明上兩個.___三個下劃線表明上三個結果. _69 一個下劃線加一個行數,是對應行數的輸出結果.若是69沒有輸出,會報錯.
    
  6. 目錄標籤系統

    • %bookmark

  7. cmd模式下,打開jupyter-notebook.exe 能夠打開一個網頁版的ipython,在這裏能夠編寫博客等內容.提供代碼執行並輸出功能.提供畫圖等功能.

三個模塊之一: NumPy 數組批量計算

經常使用命令

import numpy as np
  1. a = np.array(b) 將一個列表b變成一個np列表a

  2. 這個np列表叫作數組,數組內的元素類型須要統一,不能有不一樣類型.數組設定好以後,元素個數就不能變了,能夠改變值,但個數不能變.

  3. import numpy as np
    import random
    a = [random.uniform(100.0,200.0) for i in range(50)]
    a = np.array(a)
    x = 6
    a * x     #這個np列表能夠直接用數學運算符求對應的np列表.
    b = [random.uniform(10,20) for i in range(50)]
    a*b #能夠將兩個數組對應位置相乘後獲得新的數組
    (a*b).sum()還能求和
    
    
  4. adtype判斷a的類型,a.size是元素個數.

  5. a = np.array([[1,2,3],[4,5,6]])
    #二維數組
    a.shape#返回(2,3) 兩行三列.
    a = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
    #三維數組
    a.shape 
    #返回(2,2,3)
    a.T #轉置,橫變豎,豎變橫.
    a.ndim#列數
    np.zeros(10)# array([0.,0,....,0.])浮點數數組
    a = np.zeros(10,dtye='int') #上一行結果相同,整形
    a = np.ones(10)# 十個1.0組成的數組
    a = np.ones(10,dtye='int')#十個1組成的數組
    a = np.empty(100)#一百個空數組成的數組,但這100個空數,有值.  是上一次這個內存殘存的值.
    
    
  6. np.arange(2,10)#2到9
    np.arange(2,10,2)#步長爲2
    np.arange(2,10,0.3)#步長0.3,這個列表長度就會很長了.
    np.linspace(0,100,100)#分紅100個數,從0到100的等差數列.
    
  7. 快速生成2維或3維數組

    np.arange(15).reshape((3,5))
    #結果是3*5的二維數組
    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])
    

索引

  1. 索引,對照上面最後的

    array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])
    a[0][0]  #索引出第一行第一列的0.   
    
  2. 切片

    一:	一維數組,普通列表切法也能切.
    	惟一區別,np切片是淺拷貝.  列表第一層切片是深拷貝,二層是淺拷貝.
    	深拷貝,用c = a[0:4].copy()
    二:  二維數組
    	array([[ 0,  1,  2,  3,  4],
           [ 5,  6,  7,  8,  9],
           [10, 11, 12, 13, 14]])
         a[0:2,0:2]切出來的是,逗號左邊是行,右邊是列.
         0 1
         5 6
    
  3. 布爾型索引

    a = [3, 3, 6, 2, 3, 2, 2, 1, 6, 2, 7, 6, 10, 5, 10, 4, 2, 8, 1, 1]
    list(filter(lambda x:x>5,a))
    a = np.array(a)
    a[a>5]  
    
相關文章
相關標籤/搜索