沫小姐學數據分析之Python入門篇

學習數據分析之前,我們得先有工具,就像想要對妺子耍流氓之前,得先有一個可溝通的工具,不然怎麼

所以

一、我們先來安裝數據分析環境

>>>猴子先生:學習如何安裝和使用Anaconda

當你在終端輸入更新所有包的命令:conda upgrade --all時,會出現以下的情況

有一大堆看不懂的東西,what?出錯了?不懂的時候,我的第一反應就是去問可能會的人,覺得那是最快解惑的辦法,但又太像我,於是啊,為了解惑我再次在終端輸入更新所有包的命令:conda upgrade --all,便出現以下結果:

上面顯示所有的更新已經完成了更新完成了,於是我便騎著我的皮皮蝦往下走了,不管了。

當問題發生的時間要學會自己去解決問題,在安裝的過程中,可能還有很多, 看不懂的地方,請帶好疑問,往下的走,看多了,可能就會豁然開朗。(寫這句話是時候,我有預感,我會掉坑裡,然後掉下去了,快,扶我去大保健)

>>>坑1:在jupyter notebook中顯示不出所有的環境

>>>坑2:conda不是內部或者外部命令錯誤(window 7 版)

有時候也有粗心造成的一些錯誤,怎麼看都看不出問題所在,就去喝喝水,上上廁所,耍耍流氓,再回來看看。

>>>猴子先生:學習安裝和使用Jupyter notebook

在使用Jupyter notebook中常用的快捷鍵是:

Ctrl + Enter: 執行單元格代碼

Shift + Enter: 執行單元格代碼並且移動到下一個單元格

Alt + Enter: 執行單元格代碼,新建並移動到下一個單元格

安裝好所需的環境之後,接過來該:

二、開始學習Python

我們可以進入菜鳥網站學習Python3教程

>>>菜鳥網站Python3教程:runoob.com/python3/pyth

當打開網站的時候:

出現專業的名詞,有沒有很絕望?然後,打開了某搜索引擎,開始查這些專業名詞。其實,想要更好的了解Python,打好基礎,還是結合《父與子的編程之旅》一起來看。在這本書中,會更講解一些基本的知識點。不過書中利用的是Python2.7.3的版本,而菜鳥網站中,學習的是Python3的版本,在兩者的學習中會發現py2與py3的存在的差異。

比如:

Python2中輸入」print 1+3 「會得到以下結果:

在Python3中輸入」print 1+3 「卻會得到以下錯誤:

並提示(如上圖中畫線部份)是否想要輸入的是"print(1+3)",最終在Python3中輸入」print(1+3)"時,得到和Python2中輸入」print 1+3 「得到一樣的結果:

因此在計算數值的時候,在Python3還需要多加一個括弧「()」,在學習中可以慢慢挖掘Python2和Python3的差異,也可以直接跳到《父與子的編程之旅》的附錄B查看Python2和Python3的差異或在菜鳥網址中查看。雖然,現在更多建議學習Python3,但並不防礙去了解Python2。

在Python入門,只需要在菜鳥網Python3教程中看到「Python3輸入和輸出」這一章

三、學習筆記(掉坑裡有點斷片了,整理起來特別痛苦)

(一)何為變數

值得注意的是,上訴中namestr 類型屬於對象,變數沒有類型的,她僅僅是一個對象的引用(一個指針),可以是String類型對象,當namestr=[1,2,3],也可以是List類型對象,可以是且變數值為數值的時候,是不需要加引號』『的,比如a=1

(二) 如何注釋

單行用#或 (""),多行可用 或""" """

兩者相加是連在一起的,如果解決這個問題呢,加一個空格的字元串就可以實現啦。

(三)數據類型

1、字元串

(1)Python 訪問字元串中的值

Python 不支持單字元類型,單字元也在Python也是作為一個字元串使用。

Python 訪問子字元串,可以使用方括弧來截取字元串:

(2)Python字元串更新

截取字元串的一部分並與其他欄位拼接:

(3)Python轉義字元

字元中使用特殊字元時,python用反斜杠()轉義字元。

上面的一些是轉義,我可能會出現亂用的情況(逃……

(4)Python字元串運算符

像數字運算一樣,字元串也有自己的運算符

字元串格式化符號的補充:%c:格式化字元及其ASCLL碼,%s:格式化字元串,%d:格式化整數,%u:格式化無符號整型,%o:格式化無符號八進位數,%x/%X 大寫 :格式化無符號十六進位數,%f:格式化浮點數字,可指定小數點後的精度,%e/%E:用科學計數法格式化浮點數),%g:%f和%e的簡寫,%G:%F和 %E 的簡寫,%p:用十六進位數格式化變數的地址。

(這個學習點可以擴展學習,見菜鳥網runoob.com/python3/pyth中的筆記列表,往後需整理)

格式化操作符輔助指令:*:定義寬度或者小數點精度,-:用做左對齊,+:在正數面前顯示(+),<sp>在正數前面顯示空格,#:在八進位數前面顯示(「0」),在十六進位前面顯示0x或者0X(取決於用的是x還是X),0:顯示的數字前面填充0而不是默認的空格,%:%%輸出一個單一的%,(var):映射變數(字典參數),m.n.:m 是顯示的最小總寬度,n 是小數點後的位數(如果可用的話)。

(5)Python三引號

在注釋中,我們學習了,多行注釋可以用三引號,在python中三引號還可以允許一個字元串跨多行,字元串中可以包含換行符、製表符以及其他特殊字元

三引號讓程序員從引號和特殊字元串的泥潭裡面解脫出來,自始至終保持一小塊字元串的格式是所謂的WYSIWYG(所見即所得)格式的。

(6)Unicode字元串

在Python2中,普通字元串是以8位ASCII碼進行存儲的,而Unicode字元串則存儲為16位unicode字元串,這樣能夠表示更多的字符集。使用的語法是在字元串前面加上前綴 u。

在Python3中,所有的字元串都是Unicode字元串。

(7)Python 的字元串內建函數

在Python的字元串中也有常用的內建函數

  • capitalize():將字元串的第一個字元轉換為大寫

  • center(wide,fillchar):返回一個指定的寬度 width 居中的字元串,fillchar 為填充的字元,默認為空格

註:在單引號 中間不要重複出現單引號 』,雙引號" "同理

  • count(str,beg=0,end=len(string)):返回 str 在 string 裡面出現的次數,如果 beg 或者 end 指定則返回指定範圍內 str 出現的次數

不知道怎麼就錯了,留坑,我趕時間呀……(這個問題很多是有出現bug的造成的,但我的不是,後來的按了Run all重新運行就可以了)

註:與截取字元串同理,end的字元是不包括的

升級版Counter()

  • bytes.decode(encoding="utf-8", errors="strict"):Python3 中沒有 decode 方法,但我們可以使用 bytes 對象的 decode() 方法來解碼給定的 bytes 對象,這個 bytes 對象可以由 str.encode() 來編碼返回
  • encode(encoding=UTF-8,errors=strict):以 encoding 指定的編碼格式編碼字元串,如果出錯默認報一個ValueError 的異常,除非 errors 指定的是ignore或者replace
  • endswith(suffix, beg=0, end=len(string)):檢查字元串是否以 obj 結束,如果beg 或者 end 指定則檢查指定的範圍內是否以 obj 結束,如果是,返回 True,否則返回 False.
  • expandtabs(tabsize=8):把字元串 string 中的 tab 符號轉為空格,tab 符號默認的空格數是 8
  • find(str, beg=0 end=len(string)):檢測 str 是否包含在字元串中,如果指定範圍 beg 和 end ,則檢查是否包含在指定範圍內,如果包含返回開始的索引值,否則返回-1
  • index(str, beg=0, end=len(string)):跟find()方法一樣,只不過如果str不在字元串中會報一個異常
  • isalnum():如果字元串至少有一個字元並且所有字元都是字母或數字則返 回 True,否則返回 False
  • isalpha():如果字元串至少有一個字元並且所有字元都是字母則返回 True, 否則返回 False
  • isdigit():如果字元串只包含數字則返回 True 否則返回 False..
  • islower():如果字元串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是小寫,則返回 True,否則返回 False
  • isnumeric():如果字元串中只包含數字字元,則返回 True,否則返回 False
  • isspace():如果字元串中只包含空白,則返回 True,否則返回 False.
  • istitle():如果字元串是標題化的(見 title())則返回 True,否則返回 False
  • isupper():如果字元串中包含至少一個區分大小寫的字元,並且所有這些(區分大小寫的)字元都是大寫,則返回 True,否則返回 False
  • join(seq):以指定字元串作為分隔符,將 seq 中所有的元素(的字元串表示)合併為一個新的字元串
  • len(string):返回字元串長度(上面案例中有出現了)
  • ljust(width[, fillchar]):返回一個原字元串左對齊,並使用 fillchar 填充至長度 width 的新字元串,fillchar 默認為空格。(在輸入輸出那小節有出現)
  • lower():轉換字元串中所有大寫字元為小寫
  • lstrip():截掉字元串左邊的空格或指定字元
  • maketrans():創建字元映射的轉換表,對於接受兩個參數的最簡單的調用方式,第一個參數是字元串,表示需要轉換的字元,第二個參數也是字元串表示轉換的目標。
  • max(str):返回字元串 str 中最大的字母。
  • min(str):返回字元串 str 中最小的字母。
  • replace(old, new [, max]):把 將字元串中的 str1 替換成 str2,如果 max 指定,則替換不超過 max 次
  • rfind(str, beg=0,end=len(string)):類似於 find()函數,不過是從右邊開始查找.
  • rindex( str, beg=0, end=len(string)):類似於 index(),不過是從右邊開始
  • rjust(width,[, fillchar]):返回一個原字元串右對齊,並使用fillchar(默認空格)填充至長度 width 的新字元串
  • rstrip():刪除字元串字元串末尾的空格.
  • split(str="", num=string.count(str)):num=string.count(str)) 以 str 為分隔符截取字元串,如果 num 有指定值,則僅截取 num 個子字元串
  • splitlines([keepends]):按照行(
    ,
    ,
    )分隔,返回一個包含各行作為元素的列表,如果參數 keepends 為 False,不包含換行符,如果為 True,則保留換行符
  • startswith(str, beg=0,end=len(string)):檢查字元串是否是以 obj 開頭,是則返回 True,否則返回 False。如果beg 和 end 指定值,則在指定範圍內檢查
  • strip([chars]):在字元串上執行 lstrip()和 rstrip()
  • swapcase():將字元串中大寫轉換為小寫,小寫轉換為大寫
  • title():返回"標題化"的字元串,就是說所有單詞都是以大寫開始,其餘字母均為小寫(見 istitle())
  • translate(table, deletechars=""):根據 str 給出的表(包含 256 個字元)轉換 string 的字元, 要過濾掉的字元放到 deletechars 參數中
  • upper():轉換字元串中的小寫字母為大寫
  • zfill (width):返回長度為 width 的字元串,原字元串右對齊,前面填充0
  • isdecimal():檢查字元串是否只包含十進位字元,如果是返回 true,否則返回 false
  • partition(sep):

以上部分,往後再作補充

2、數字

Python 數字數據類型用於存儲數值,數據類型是不允許改變的,這就意味著如果改變數字數據類型得值,將重新分配內存空間。

(1)del的語法

註:del刪除的是變數,而不是數據

(2)Python的數據類型

①整型(Int) - 通常被稱為是整型或整數,是正或負整數,不帶小數點。Python3 整型是沒有限制大小的,可以當作 Long 類型使用,所以 Python3 沒有 Python2 的 Long 類型。

可以使用十六進位和八進位來代表整數

②浮點型(float) - 浮點型由整數部分與小數部分組成,浮點型也可以使用科學計數法表示(2.5e2 = 2.5 x 102 = 250)

註:不同類型的數混合運算時會將整數轉換為浮點數

③複數( (complex)) - 複數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示, 複數的實部a和虛部b都是浮點型。

(3)Python數字類型轉換

數據類型的轉換,只需將數據類型函數名即可

註:python不支持複數用int或float轉換為整數或浮點數,但是呢,給複數提供了2個函數,一個函數是real,返回複數的實數部分,另一個函數是imag,返回複數的虛數部分

(4)Python數字運算

表達式的語法:+、-、*、和/與其它語言(如Pascal或C)里一樣

註:在不同的機器上浮點運算的結果可能會不一樣(上面有,再做一下總結)

在python2中11/2,會得一個整數5,因為11為整數而判斷你要一個整數,若要浮點數則寫11為浮點數如11.0

  • 等號(=)用於給變數賦值。賦值後,除了下一個提示符,否則解釋器不會顯示任何結果

  • 在交互模式,最後被輸出的表達式結果被賦值給變數 _(此模式中,可以直接鍵入變數名)此:_變數應被用戶視為只讀變數

註:若對_賦值,結果會導致後面調用_的時候全部為所賦的值,除非del _

補充:關於round(下面也有,到時個再整理到一塊去)

當個位為奇數,小數部分>=0.5入,其餘為舍

當個位為偶數,小數部分>0.5入,其餘為舍。

交互模式下的 example:

(5)數字函數

①abs(x)

②ceil(x)

③cmp(x,y):如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。Python 3 已廢棄,使用 (x>y)-(x<y)替換

④exp(x)

⑤fabs(x)

⑥floor(x)

⑦log(x)

⑧log10(x)

⑨max(x1,x2,……)

⑩min(x1,x2,……)

?modf(x)

?pow(x)

?round(x[,n])

?sqrt(x)

(6)隨機數函數

①choice(seq)

②randrange([start,]stop[,step])

③random()

④seed([x])

⑤shuffle(lst)

⑥uniform(x,y)

⑦randint()

(7)三角函數

python包括以下三角函數

①acos(x)

②asin(x)

③atan(x)

④atan2(y,x)

⑤cos(x)

⑥hypot(x,y)

⑦sin(x)

⑧tan(x)

⑨degrees(x)

⑩radians(x)

(8)數學變數

  • pi:數學常量 pi(圓周率,一般以π來表示)
  • e:數學常量 e,e即自然常數(自然常數)

3、容器-列表

列表是寫在方括弧([])之間、用逗號分隔開的元素列表。

(3)和字元串一樣,列表同樣可以被索引和截取,語法也一樣,列表被截取後返回一個包含所需元素的新列表(裡面有『+』、『*』,餘下的列表操作符下面再補充)

(2)嵌套:列表中元素的類型可以不相同,它支持數字,字元串甚至可以包含列表(所謂嵌套)

(3)Python列表腳本操作符(補充)

註:在In[82]中是循環處理數據

(4)容器-列表的4個操作

(5)Python列表函數

①len(list)

②max(list)

③min(list)

④list(sep)

(6)Python列表方法

①list.append(obj)

②list.count(obj)

③list.extend(seq)

④list.index(obj)

⑤list.insert(index,obj)

⑥list.pop(obj=list[-1])

⑦list.remove(obj)

⑧list.reverse()

⑨list.sport([func])

⑩list.clear()

?list.copy()

注意:類似 insert, remove 或 sort 等修改列表的方法沒有返回值

4、容器-元組

列表使用方括弧,而元組則使用小括弧

Python 的元組與列表類似,不同之處在於元組的元素不能修改

但是,元組元素的元素是可以修改的

元組的特殊語法

註:只含有一個元素時,若不加逗號,類型為整型

元組中的元素值不但不允許修改,且不允許刪除的,但是可用del語句刪除整個元組,刪除之後輸出此元組是會有異常信息

(1)元組不可變,運算不可行

(2)元組內置函數

①len(tuple)

②max(tuple)

③min(tuple)

④tuple(sep)

5、容器-集合

集合(set)是一個無序不重複元素的序列

基本功能是進行成員關係測試和刪除重複元素

可以使用大括弧 { } 或者 set() 函數創建集合

注意:創建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典

(1)set集合運算

(2)集合的基本操作

6、容器-字典

字典是另一種可變容器模型,且可存儲任意類型對象。

字典的每個鍵值(key=>value)對用冒號(:)分割,每個對之間用逗號(,)分割,整個字典包括在花括弧({})

註:鍵必須是唯一的,但值則不必

值可以取任何數據類型,但鍵必須是不可變的,如字元串,數字或元組

(1)構造函數 dict() 可以直接從鍵值對序列中構建字典如下:

第一次出現了:字典不可調用(出現錯誤)

後來按了Restart &Running All,與之前的tuple錯誤一樣的操作,也就行了

(2)訪問字典里的值

把相應的鍵放入熟悉的方括弧,如下

(3)修改字典

向字典添加新內容的方法是增加新的鍵/值對,修改或刪除已有鍵/值對,能刪單一的元素也能清空字典,清空只需一項操作,如下

(4)字典鍵的特性

(5)對字典進行循環:清洗GAFATA股票數據

  • 用continue跳出當前循環

  • 用break退出整個循環

(6)字典內置函數

①len(dict)計算個數

②str(dict)輸出字典,以可列印的字元串表示

③type(variable)返回輸入的變數類型,如果變數是字典就返回字典類型

(7)Python字典內置方法

①radinasdict.clear()

②radiansdict.copy()

③radiansdict.fromkeys()

④radiansdict.get(key,default=None)

⑤key in dict

⑥radiansdict.itens()

⑦radiansdict.keys()

⑧radiansdict.setdefault(key,default=None)

⑨radiansdict.update(dict2)

⑩radiansdict.values()

?pop(key[,default]

?popitem()

容器的區別:

7、布爾類型

布爾類型只有True和False兩種值,主要用於條件判斷當條件為真時為True,當條件不成立時為False

8、空值None

None是一個特殊的空值,它不等於零。

(四)條件判斷

1、值的比較

補充:

數字比較的運算:

輸出結果:

2、邏輯比較

在集合中的成員測試中,測試鬼鬼,可以使用邏輯比較

邏輯比較除了not,還有and,or

3、多個條件判斷

4、if 嵌套

在嵌套if語句中,可以把if..elif...else結構放在另外一個if...elif...else結構中

if 表達式1: 語句 if 表達式2: 語句 elif 表達式3: 語句 else: 語句elif 表達式4: 語句else: 語句

案例:

(五)循環語句

上面有接觸到了循環的語句,現在再進一步學習

Python中循環語句有for和while。

1、while

下面嘗試用while寫一個斐波納契數列

再用while來計算1到100的總和:

補充:用for循環計算0-10所有的和

(1)無限循環

可以通過設置條件表達式永遠不為false來實現無限循環

可用CTRL+C來退出當前的無限循環

無限循環在伺服器上客戶端的實時請求非常有用

(2)while循環使用else語句

while...else在條件語句為false時執行else語句塊:

(3)簡單語句組

類似if語句的語法,若在while循環體中只有一條語句,可將該語句與while寫同一行中,如下所示

註:以上的無限循環可以用CTRL+C來中斷物質循環

2、for語句

Python for循環可以遍歷任何序列的項目,如一個列表或者一個字元串

for循環的一般格式如下:

for <variable> in <sequence>: <statements>else: <statements>

(1)loop循環:

(2)break和continue的用法參照:(6)字典中-⑤對字典進行循環:清洗GAFATA股票數據

兩者在while中的用法與for的是相同的

(3)for語句與range()函數的結合使用

若需要遍歷數字序列,可使用range()函數。(遍歷?便利?天真無鞋。所謂遍歷(Traversal),是指沿著某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問。訪問結點所做的操作依賴於具體的應用問題。 遍歷是二叉樹上最重要的運算之一,是二叉樹上進行其它運算之基礎。當然遍歷的概念也適合於多元素集合的情況,如數組。)

(關於遍歷在數據結構中有補充)

它可生成數列

可以使用range()指定區間的值:

註:在這可以明顯看出,range(z,y),y的字元也是不包括的

也可以使用range()以指定數字開始並指定不同的增量(甚至可以是負數,有時這也叫」步長「

註:在案例中1與-10的位置不可調

(4)for語句與range()和len()函數的結合使用

補充:使用內置的enumerate()函數也有此功效

(5)其實range()函數可創建一個列表

3、循環中else子句

循環語句中的else子句,它是窮盡列表(以for循環)或條件變false(以while循環)導致循環終止時被執行,但循環被break終止時不執行。

如查詢質數的循環案例:

while 循環語句和 for 循環語句使用 else 的區別

*如果 else 語句和 while 循環語句一起使用,則當條件變為 False 時,則執行 else 語句。

*如果 else 語句和 for 循環語句一起使用,else 語句塊只在 for 循環正常終止時執行!

4、pass語句

Python pass是空語句,是為了保持程序結構的完整性。

pass 不做任何事情,一般用做點位語句,如下實例

(六)函數

可定義一個由自己想要功能的函數,以下是最簡單的規則:

  • 函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括弧 ()。
  • 任何傳入參數和自變數必須放在圓括弧中間,圓括弧之間可以用於定義參數。
  • 函數的第一行語句可以選擇性地使用文檔字元串—用於存放函數說明。
  • 函數內容以冒號起始,並且縮進。
  • return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

1、語法

Python定義函數使用def關鍵字,一般格式如下:

def 函數名(參數列表): 函數體

默認情況下,參數值和參數名稱是按函數聲明中定義的順序匹配起來的

2、函數調用

定義一個函數:給了函數一個名稱,指定了函數里包含的參數,和代碼塊結構(thnn

當函數的基本結構完成以後,則可以通過另一個函數調用執行,也可以直接從Python命令提示符執行。

案例:調用print1()

3、python 函數的參數傳遞:

  • 不可變類型:類似 c++ 的值傳遞,如 整數、字元串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在 fun(a)內部修改 a 的值,只是修改另一個複製的對象,不會影響 a 本身。
  • 可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響

python 中一切都是對象,嚴格意義不能說值傳遞還是引用傳遞,應該說傳不可變對象和傳可變對象。

Python 傳不可變對象:

實例中有 int 對象 2,指向它的變數是 b,在傳遞給 ChangeInt 函數時,按傳值的方式複製了變數 b,a 和 b 都指向了同一個 Int 對象,在 a=10 時,則新生成一個 int 值對象 10,並讓 a 指向它。

傳可變對象實例:

可變對象在函數里修改了參數,那麼在調用這個函數的函數里,原始的參數也被改變了:

4、參數

調用函數時可使用的正式參數類型有

  • 必需要參數
  • 關鍵字參數
  • 默認參數
  • 不定長參數

(1)關鍵字參數:

關鍵字參數和函數調用關係緊密,函數調用使用關鍵字參數來確定傳入的參數值。

因為 Python 解釋器能夠用參數名匹配參數值,在使用關鍵字參數允許函數調用時參數的順序與聲明時不一致

(2)默認參數

調用函數時,如果沒有傳遞參數,則會使用默認參數。以下實例中如果沒有傳入 age 參數,則使用默認值:

(3)不定長參數

有時候需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,和上述2種參數不同,聲明時不會命名。基本語法如下:

def functionname([formal_args,] *var_args_tuple ): "函數_文檔字元串" function_suite return [expression]

加了星號(*)的變數名會存放所有未命名的變數參數。如果在函數調用時沒有指定參數,它就是一個空元組。也可以不向函數傳遞未命名的變數。如下實例:

(4)匿名函數

python 使用 lambda 來創建匿名函數。所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。

  • lambda 只是一個表達式,函數體比 def 簡單很多。
  • lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。
  • lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數。
  • 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。

①語法

lambda函數的語法只包含一個語句,如下:

lambda[arg1,[,arg2,......argn]]:expression

5、return語句

return [表達式] 語句用於退出函數,選擇性地向調用方返回一個表達式。不帶參數值的return語句返回None。之前的例子都沒有示範如何返回數值,以下則演示了 return 語句的用法:

6、變數作用域

一般在函數體外定義的變數成為全局變數,在函數內部定義的變數稱為局部變數。

(1)全局變數所有作用域都可讀,局部變數只能在本函數可讀

(2)函數在讀取變數時,優先讀取函數本身自有的局部變數,再去讀全局變數

(3)在函數內部也可以定義全局變數:(需使用函數內部global定義)

註:上面的案例中,可看出定義全局變數會對後面的函數造成影響,但是不會對前面的函數造成影響。

(4)特殊:列表,字典,可修改,但不能重新賦值,如果需要重新賦值,需要在函數內部使用global定義全局變數

(5)如果要修改嵌套作用域(enclosing 作用域,外層非全局作用域)中的變數則需要 nonlocal 關鍵字了,如下實例:

(七)模塊

若腳本上是用 python 解釋器來編程,當從 Python 解釋器退出再進入,所定義的所有的方法和變數就都消失了。

模塊則為 Python 提供了一個辦法,把這些定義存放在文件中,為一些腳本或者互動式的解釋器實例使用。

1、在 python 用 import 或者 from...import 來導入相應的模塊。

  • 將整個模塊(somemodule)導入,格式為: import somemodule
  • 從某個模塊中導入某個函數,格式為: from somemodule import somefunction
  • 從某個模塊中導入多個函數,格式為: from somemodule import firstfunc, secondfunc, thirdfunc
  • 將某個模塊中的全部函數導入,格式為: from somemodule import *

2、使用python標準庫中模塊如下:

  • import sys 引入 python 標準庫中的 sys.py 模塊;這是引入某一模塊的方法。
  • sys.argv 是一個包含命令行參數的列表。
  • sys.path 包含了一個 Python 解釋器自動查找所需模塊的路徑的列表。

3、第三方模塊使用

(八)數據結構

1、列表

(1)將列表當做堆棧使用

堆棧作為特定的數據結構,最先進入的元素最後一個被釋放(後進先出)。用 append() 方法可以把一個元素添加到堆棧頂。用不指定索引的 pop() 方法可以把一個元素從堆棧頂釋放出來

(2)將列表當作隊列使用

當列表當做隊列用,則是在隊列里第一加入的元素,第一個取出來(先進先出);但是拿列表用作這樣的目的效率不高。在列表的最後添加或者彈出元素速度快,然而在列表裡插入或者從頭部彈出速度卻不快(因為所有其他的元素都得一個一個地移動)

(3)嵌套列表解析

Python的列表還可以嵌套,以下實例展示了3X4的矩陣列表

還可以使用另一種方法:

2、遍歷技巧

①在字典中遍歷時,關鍵字和對應的值可以使用 items() 方法同時解讀出來

②在序列中遍歷時,索引位置和對應值可以使用 enumerate() 函數同時得到:

③同時遍歷兩個或更多的序列,可以使用 zip() 組合:

要反向遍歷一個序列,首先指定這個序列,然後調用 reversed() 函數:

要按順序遍歷一個序列,使用 sorted() 函數返回一個已排序的序列,並不修改原值:

(九)輸入和輸出

Python兩種輸出值的方式:表達式語句和print()函數。第三種方式是使用文件對象的wirte()方法,標準輸出文件可以用sys.stdout引用

下面學習幾種方法:

1、rjusta():可將字元串靠右,並在左邊填充空格

2、ljust():可將字元串靠左,並在右邊填充空格

註:上面這些方法並不會寫任何東西,它們僅是返回新的字元串

3、zfill():在數字的左邊填充0

註:負號『-』與小數點也是一個字元的

4、str.format():括弧及其裡面的字元(稱作格式化欄位)將會被format()中的參數替換

在括弧中的數字用於指向傳入對象在format()中的位置

若format()中使用關鍵字參數,那麼它們的值會指向使用該名字的參數

位置及關鍵字參數可以任意的結合:

5、!a (使用 ascii()), !s (使用 str()) 和 !r (使用 repr()) 可以用於在格式化某個值之前對其進行轉化

可選項 : 和格式標識符可以跟著欄位名。 這就允許對值進行更好的格式化。 下面的例子將 Pi 保留到小數點後三位:

在 : 後傳入一個整數, 可以保證該域至少有這麼多的寬度。 用於美化表格時很有用

若有一個很長的格式化字元串, 又不想將它們分開, 那麼在格式化時通過變數名而非位置會是很好的事情。

最簡單的就是傳入一個字典, 然後使用方括弧 [] 來訪問鍵值 :

也可以通過在 table 變數前使用 ** 來實現相同的功能:

6、舊式字元串格式化

% 操作符也可以實現字元串格式化。 它將左邊的參數作為類似 sprintf() 式的格式化字元串, 而將右邊的代入, 然後返回格式化後的字元串.

上面是第一階段的內容了,在學習的知識的過程中,更要學會以如果去解決過程中發生的問題,想要更好的解決問題可參考 @猴子 先生在下面的回答

>>>如何用好谷歌等搜索引擎

>>>如何優雅地使用Stack Overflow?

新手上路,請多多賜教……

在這30天里:

1、不想耍流氓了

2、學習一小點Python的入門知識,看了一部分的《父與子的編程》

3、看完《赤裸裸的統計學》,為下一課時做一個小小了解

後面的進程:

只想說努力努力再努力

(此圖,鎮樓,這才剛剛開始,hold住,我要去看一下宮崎駿的動漫,安慰一下我的內心,等待下一個進程)


推薦閱讀:

4 種最搶手的數據分析職業,你會選擇?
Python 數據分析學習路線
數據篇(1):數據分析

TAG:Python入門 | 數據分析 |