国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【數據科學系統學習】Python # 編程基礎[一]

luckyyulin / 3130人閱讀

摘要:在定義函數時給定的名稱稱作形參,在調用函數時你所提供給函數的值稱作實參。調用函數要調用一個函數,需要知道函數的名稱和參數。默認參數值可以有效幫助解決這一情況。是默認參數定義默認參數要牢記一點默認參數必須指向不變對象。

關于數據科學在做什么,我們已經在前兩篇文章中進行了總結,即專題概述和描述性統計分析。要進行數據科學的探索,需要一個“好工具”,就是Python。從本篇開始,將總結學習Python的學習要點。


Python是什么

官方對 Python 的介紹如下:

“Python 是一款易于學習且功能強大的編程語言。 它具有高效率的數據結構,能夠簡單又有效地實現面向對象編程。Python 簡潔的語法與動態輸入之特性,加之其解釋性語言的本質,使得它成為一種在多種領域與絕大多數平臺都能進行腳本編寫與應用快速開發工作的理想語言。”

Python 名字的由來:

“Python 的創造者吉多·范羅蘇姆(Guido van Rossum)采用 BBC 電視節目《蒙提·派森的飛行馬戲團(Monty Python"s Flying Circus,一譯巨蟒劇團)》的名字來為這門編程語言命名。盡管他本人并不特別喜歡蟒蛇這種通過在獵物身邊卷曲自己的身體以此來碾碎獵物身體來進食的動物。”
基礎 字面常量

字面常量(Literal Constants)是諸如 5、1.23 這樣的數字,或者是如“這是一串文本”或“This is a string”這樣的文本。它們是字面上的,所用的就是它字面意義上的值或是內容。

數字

數字主要分為兩種類型——整數(Integers)與浮點數(Floats)。如 2 和 3.23 或 52.3E-4,其中 E 表示 10 的冪。

字符串

字符串(String)是字符(Characters)的序列(Sequence)。字符串是不可變的。

格式化方法
一個字符串可以使用某些特定的格式(Specification),隨后,format 方法將被調用,使用這一方法中與之相應的參數替換這些格式。即將每個參數值替換至格式所在的位置。舉例如下:

age = 14
name = "Tom"

print("{0} is a {1} years old boy".format(name, age))
print("{0} is a good boy".format(name))”

此外,可以指定更詳細的格式:

# 對于浮點數 "0.333" 保留小數點(.)后三位
print("{0:.3f}".format(1.0/3))

# 使用下劃線填充文本,并保持文字處于中間位置
# 使用 (^) 定義 "___hello___"字符串長度為 11
print("{0:_^11}".format("hello"))

# 基于關鍵詞輸出 "Jack was confirmed as captain for the rest of the season"  
print("{name} was confirmed as {position} for the rest of the season".format(name="Jack", position="captain"))

每次調用print將在獨立的一行中打印,即總是以換行符 結尾,若有時需避免這一換行符,可以end指定其結尾方式。例如以空白結尾:

print("a", end=" ")
print("b", end=" ")
print("c")

輸出a b c.

轉義序列
要輸入如What"s your name?這樣的字符串有兩種方式。一種是使用雙引號"What"s your name?",另一種需要用到反斜杠來指定單引號"What"s your name?"。其它需要轉義的字符同理,通過反斜杠來轉義,包括它自身。

原始字符串
在處理正則表達式時,應全程使用原始字符串,即在字符串前增加rR來指定一個原始字符串。如"1"可以通過"r1"來實現。

變量

變量的值是可以變化的,即可以用變量儲存任何東西,只需通過一些方式訪問這些變量。

標識符命名

標識符(Identifiers)是為某些東西提供的給定名稱。變量是標識符的一個例子。命名規則如下:

第一個字符必須是字母表中的字母(大寫 ASCII 字符或小寫 ASCII 字符或 Unicode 字符)或下劃線(_)。

標識符的其它部分可以由字符(大寫 ASCII 字符或小寫 ASCII 字符或 Unicode 字符)、下劃線(_)、數字(0~9)組成。

標識符名稱區分大小寫。

數據類型

變量可以將各種形式的值保存為不同的數據類型(Data Type)。基本的類型是數字字符串,在面向對象編程中將介紹如何通過來創建我們自己的類型。

對象

Python 是強(Strongly)面向對象的,因為所有的一切都是對象, 包括數字、字符串與函數。

運算符與表達式

運算符

+

-

*

乘方**

/

整除//

取模%

左移<<

右移>>

按位與&

按位或|

按位異或^

按位取反~

小于<

大于>

小于等于<=

大于等于>=

等于==

不等于!=

布爾“非”not

布爾“與”and

布爾“或”or

表達式
在下面的例子中:

length = 5
breadth = 2

area = length * breadth
print("Area is", area)
print("Perimeter is", 2 * (length + breadth))

我們將表達式 length * breadth 的結果存儲在變量 area 中并將其通過使用 print 函數打印出來。在第二種情況中,我們直接在 print 函數中使用了表達式 2 * (length + breadth) 的值。

控制流

在 Python 中有三種控制流語句,ifforwhile

條件

if age >= 18:

注意不要少寫了冒號:。

elifelse if的縮寫,完全可以有多個elif,所以if語句的完整形式就是:

if <條件判斷1>:
    <執行1>
elif <條件判斷2>:
    <執行2>
elif <條件判斷3>:
    <執行3>
else:
    <執行4>

if語句執行有個特點,它是從上往下判斷,如果在某個判斷上是True,把該判斷對應的語句執行后,就忽略掉剩下的elifelse

if判斷條件還可以簡寫,比如寫:

if x:
    print("True")

只要x是非零數值、非空字符串、非空list等,就判斷為True,否則為False

循環
Python 的循環有兩種。

第一種是for...in循環,依次把listtuple中的每個元素迭代出來

所以for x in ...循環就是把每個元素代入變量x,然后執行縮進塊的語句。

Python 提供一個range()函數,可以生成一個整數序列,再通過list()函數可以轉換為list。比如range(5)生成的序列是從 0 開始小于 5 的整數:

計算:

第二種循環是while循環:

在循環中,break語句可以提前退出循環。

在循環過程中,也可以通過continue語句,跳過當前的這次循環,直接開始下一次循環。continue的作用是提前結束本輪循環,并直接開始下一輪循環。

要特別注意,不要濫用breakcontinue語句。breakcontinue會造成代碼執行邏輯分叉過多,容易出錯。大多數循環并不需要用到breakcontinue語句,上面的兩個例子,都可以通過改寫循環條件或者修改循環邏輯,去掉breakcontinue語句。

有些時候,如果代碼寫得有問題,會讓程序陷入“死循環”,也就是永遠循環下去。這時可以用Ctrl+C退出程序,或者強制結束 Python進程。

函數 函數是什么

函數(Functions)是指可重復使用的程序片段。它們允許你為某個代碼塊賦予名字,允許你通過這一特殊的名字在你的程序任何地方來運行代碼塊,并可重復任何次數。這就是所謂的調用(Calling)函數。

在 Python 中,函數可以通過關鍵字 def 來定義。這一關鍵字后跟一個函數的標識符名稱,再跟一對圓括號,其中可以包括一些變量的名稱,再以冒號結尾,結束這一行。隨后而來的語句塊是函數的一部分。

在定義函數時給定的名稱稱作“形參”(Parameters),在調用函數時你所提供給函數的值稱作“實參”(Arguments)。

調用函數

要調用一個函數,需要知道函數的名稱和參數。函數的參數只是輸入到函數之中,以便我們可以傳遞不同的值給它,并獲得相應的結果。

Python 內置的常用函數包括數據類型轉換函數,比如int()函數可以把其他數據類型轉換為整數。用input()讀取用戶的輸入:

因為input()返回的數據類型是strstr不能直接和整數比較,必須先把str轉換成整數。Python 提供了int()函數來完成這件事情:

函數名其實就是指向一個函數對象的引用,完全可以把函數名賦給一個變量,相當于給這個函數起了一個“別名”:

如果函數調用出錯,一定要學會看錯誤信息。

定義函數

在 Python 中,定義一個函數要使用def語句,依次寫出函數名、括號、括號中的參數和冒號:,然后,在縮進塊中編寫函數體,函數的返回值用return語句返回。

在 Python 交互環境中定義函數時,注意 Python 會出現...的提示。函數定義結束后需要按兩次回車重新回到>>>提示符下:

如果你已經把my_abs()的函數定義保存為abstest.py文件了,那么,可以在該文件的當前目錄下啟動Python 解釋器,用from abstest import my_abs來導入my_abs()函數,注意abstest是文件名(不含.py擴展名)。

定義一個什么事也不做的空函數,可以用pass語句:

def nop():
    pass

pass語句什么都不做,實際上它可以用作為占位符,比如現在還沒想好怎么寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。

pass還可以用在其他語句里,比如:

if age >= 18:
    pass

缺少了pass,代碼運行就會有語法錯誤。

數據類型檢查可以用內置函數isinstance()實現。

Python 的函數返回多值其實就是返回一個tuple;Python 函數返回的是單一值時,返回值仍然是一個tuple。但是,在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值。函數可以同時返回多個值,但其實就是一個tuple

函數執行完畢也沒有return語句時,自動return None

函數的參數

Python 的函數定義非常簡單,但靈活度卻非常大。除了正常定義的必選參數外,還可以使用默認參數可變參數關鍵字參數,使得函數定義出來的接口,不但能處理復雜的參數,還可以簡化調用者的代碼。

位置參數:

power(x, n)函數有兩個參數:xn,這兩個參數都是位置參數,調用函數時,傳入的兩個值按照位置順序依次賦給參數xn

默認參數:
對于一些函數來說,你可能為希望使一些參數可選并使用默認的值,以避免用戶不想為他們提供值的情況。默認參數值可以有效幫助解決這一情況。你可以通過在函數定義時附加一個賦值運算符=來為參數指定默認參數值。要注意到,默認參數值應該是常數。更確切地說,默認參數值應該是不可變的。

n = 2 是默認參數

定義默認參數要牢記一點:默認參數必須指向不變對象。且只有那些位于參數列表末尾的參數才能被賦予默認參數值,意即在函數的參數列表中擁有默認參數值的參數不能位于沒有默認參數值的參數之前。
?

可變參數:
有時你可能想定義的函數里面能夠有任意數量的變量,也就是參數數量是可變的,這可以通過使用星號來實現。即傳入的參數個數是可變的。


我們聲明一個諸如 *param 的星號參數時,從此處開始直到結束的所有位置參數(Positional Arguments)都將被收集并匯集成一個稱為param的元組(Tuple)。

類似地,當我們聲明一個諸如 **param 的雙星號參數時,從此處開始直至結束的所有關鍵字參數都將被收集并匯集成一個名為 param字典(Dictionary)

關鍵字參數:
如果你有一些具有許多參數的函數,而你又希望只對其中的一些進行指定,那么你可以通過命名它們來給這些參數賦值——這就是關鍵字參數(Keyword Arguments)——我們使用命名(關鍵字)而非位置來指定函數中的參數。

關鍵字參數允許你傳入 0 個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict

舉個例子,擴展函數的功能。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外,其他都是可選項,利用關鍵字參數來定義這個函數就能滿足注冊的需求。

和可變參數類似,也可以先組裝出一個dict,然后,把該dict轉換為關鍵字參數傳進去:

命名關鍵字參數:
如果要限制關鍵字參數的名字,就可以用命名關鍵字參數,例如,只接收cityjob作為關鍵字參數。這種方式定義函數并調用:

和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符**后面的參數被視為命名關鍵字參數。

命名關鍵字參數必須傳入參數名,這和位置參數不同。如果沒有傳入參數名,調用將報錯。

使用命名關鍵字參數時,要特別注意,如果沒有可變參數,就必須加一個*作為特殊分隔符。如果缺少*,Python 解釋器將無法識別位置參數和命名關鍵字參數,即缺少 *cityjob被視為位置參數。

參數組合:
在 Python 中定義函數,可以用必選參數、默認參數、可變參數、關鍵字參數和命名關鍵字參數,這 5 種參數都可以組合使用。

但是參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。雖然可以組合多達 5 種參數,但不要同時使用太多的組合,否則函數接口的可理解性很差。

通過一個tupledict,你也可以調用函數:

對于任意函數,都可以通過類似func(*args, **kw)的形式調用它,無論它的參數是如何定義的。

遞歸函數

如果一個函數在內部調用自身本身,這個函數就是遞歸函數。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。

使用遞歸函數需要注意防止棧溢出。在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出。

通過下面的代碼可以查看你的電腦最大算到多少:

解決遞歸調用棧溢出的方法是通過尾遞歸優化,事實上尾遞歸和循環的效果是一樣的,所以,把循環看成是一種特殊的尾遞歸函數也是可以的。

尾遞歸是指,在函數返回的時候,調用自身本身,并且,return語句不能包含表達式。這樣,編譯器或者解釋器就可以把尾遞歸做優化,使遞歸本身無論調用多少次,都只占用一個棧幀,不會出現棧溢出的情況。

要改成尾遞歸方式,需要多一點代碼,主要是要把每一步的乘積傳入到遞歸函數中。Python 標準的解釋器沒有針對尾遞歸做優化,任何遞歸函數都存在棧溢出的問題。


參考鏈接:
簡明Python教程(電子書可閱讀)
廖雪峰Python教程

如有不足,歡迎指正。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42167.html

相關文章

  • 數據學系學習Python # 編程基礎[三]

    摘要:新的稱為子類,而被繼承的稱為基類父類或超類。繼承最大的好處是子類獲得了父類的全部功能。在繼承關系中,如果一個實例的數據類型是某個子類,那它的數據類型也可以被看做是父類。 在上一篇中我們介紹了模塊和數據結構,這一篇將介紹面向對象編程。 面向對象編程 面向對象編程——Object Oriented Programming,簡稱 OOP,是一種程序設計思想。OOP 把對象作為程序的基本單元...

    molyzzx 評論0 收藏0
  • 數據學系學習Python # 數據分析基本操作[] numpy

    摘要:提供了使我們能夠快速便捷地處理結構化數據的大量數據結構和函數。結構化數據,例如多維數據矩陣表格行數據,其中各列可能是不同的類型字符串數值日期等。基礎數組和矢量計算高性能科學計算和數據分析的基礎包。 本篇內容為整理《利用Python進行數據分析》,博主使用代碼為 Python3,部分內容和書本有出入。 利用 Python 進行科學計算的實用指南。本書重點介紹了用于高效解決各種數據分析問...

    wushuiyong 評論0 收藏0
  • 數據學系學習Python # 數據分析基本操作[三] matplotlib

    摘要:有一些表示常見圖形的對象稱為塊,完整的集合位于。中的繪圖函數在中,有行標簽列標簽分組信息。密度圖通過計算可能會產生觀測數據的連續概率分布的估計而產生的。在探索式數據分析工作中,同時觀察一組變量的散布圖是很有意義的。 我們在上一篇介紹了 pandas,本篇介紹 matplotlib。 繪圖和可視化 一個用于創建出版質量圖表的桌面繪圖包。 Matplotlib API入門 Figure ...

    BDEEFE 評論0 收藏0

發表評論

0條評論

luckyyulin

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<