python學(xué)習(xí)筆記(3)

  1. 函數(shù)

1)函數(shù)定義函數(shù)代碼塊以 def 關(guān)鍵詞開頭,后接函數(shù)標(biāo)識符名稱和圓括號()。
任何傳入?yún)?shù)和自變量必須放在圓括號中間。圓括號之間可以用于定義參數(shù)。
函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。
函數(shù)內(nèi)容以冒號起始,并且縮進(jìn)。
return [表達(dá)式] 結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回 None。

def functionname( parameters ):
   "函數(shù)_文檔字符串"
   function_suite
   return [expression]

2) 函數(shù)調(diào)用:定義一個函數(shù)只給了函數(shù)一個名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結(jié)構(gòu)。
這個函數(shù)的基本結(jié)構(gòu)完成以后,你可以通過另一個函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。
3)參數(shù)傳遞
在 python 中,類型屬于對象,變量是沒有類型的:
a=[1,2,3]
a="Runoob"
以上代碼中,[1,2,3] 是 List 類型,"Runoob" 是 String 類型,而變量 a 是沒有類型,她僅僅是一個對象的引用(一個指針),可以是 List 類型對象,也可以指向 String 類型對象。

可更改(mutable)與不可更改(immutable)對象
在 python 中,strings, tuples, 和 numbers 是不可更改的對象,而 list,dict 等則是可以修改的對象。
不可變類型:變量賦值 a=5 后再賦值 a=10,這里實際是新生成一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當(dāng)于新生成了a。
可變類型:變量賦值 la=[1,2,3,4] 后再賦值 la[2]=5 則是將 list la 的第三個元素值更改,本身la沒有動,只是其內(nèi)部的一部分值被修改了。

python 函數(shù)的參數(shù)傳遞:
不可變類型:類似 c++ 的值傳遞,如 整數(shù)、字符串、元組。如fun(a),傳遞的只是a的值,沒有影響a對象本身。比如在 fun(a)內(nèi)部修改 a 的值,只是修改另一個復(fù)制的對象,不會影響 a 本身。
可變類型:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改后fun外部的la也會受影響

關(guān)鍵詞參數(shù):使用關(guān)鍵詞來確定傳入的值,而不是參數(shù)的順序

def printinfo(name, age):
    "打印任何傳入的字符串"
    print "Name: ", name
    print "Age ", age
    return
# 調(diào)用printinfo函數(shù)
printinfo(age=50, name="miki"), 
  1. python模塊

1)Python 模塊(Module),是一個 Python 文件,以 .py 結(jié)尾,包含了 Python 對象定義和Python語句。
2)模塊的引入
模塊定義好后,我們可以使用 import 語句來引入模塊,一個模塊只會被導(dǎo)入一次,不管你執(zhí)行了多少次import。這樣可以防止導(dǎo)入模塊被一遍又一遍地執(zhí)行。
3)Python 的 from 語句讓你從模塊中導(dǎo)入一個指定的部分到當(dāng)前命名空間中。語法如下:
from modname import name1[, name2[, ... nameN]]
from…import* 語句
把一個模塊的所有內(nèi)容全都導(dǎo)入到當(dāng)前的命名空間也是可行的
from…import *語句與import區(qū)別在于:
import 導(dǎo)入模塊,每次使用模塊中的函數(shù)都要是定是哪個模塊。
from…import * 導(dǎo)入模塊,每次使用模塊中的函數(shù),直接使用函數(shù)就可以了;注因為已經(jīng)知道該函數(shù)是那個模塊中的了。
4)搜索路徑
搜索路徑
當(dāng)你導(dǎo)入一個模塊,Python 解析器對模塊位置的搜索順序是:
a、當(dāng)前目錄
b、如果不在當(dāng)前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個目錄。
c、如果都找不到,Python會察看默認(rèn)路徑。UNIX下,默認(rèn)路徑一般為/usr/local/lib/python/。
模塊搜索路徑存儲在 system 模塊的 sys.path 變量中。變量里包含當(dāng)前目錄,PYTHONPATH和由安裝過程決定的默認(rèn)目錄。
5)dir()函數(shù)
dir() 函數(shù)一個排好序的字符串列表,內(nèi)容是一個模塊里定義過的名字。
6)globals() 和 locals() 函數(shù)
根據(jù)調(diào)用地方的不同,globals() 和 locals() 函數(shù)可被用來返回全局和局部命名空間里的名字。
7)python 包
包是一個分層次的文件目錄結(jié)構(gòu),它定義了一個由模塊及子包,和子包下的子包等組成的 Python 的應(yīng)用環(huán)境。
簡單來說,包就是文件夾,但該文件夾下必須存在 init.py 文件, 該文件的內(nèi)容可以為空。init.py 用于標(biāo)識當(dāng)前文件夾是一個包。

  1. 異常

異常即是一個事件,該事件會在程序執(zhí)行過程中發(fā)生,影響了程序的正常執(zhí)行。當(dāng)Python腳本發(fā)生異常時我們需要捕獲處理它,否則程序會終止執(zhí)行。
以下為簡單的try....except...else的語法:

try:
<語句>        #運(yùn)行別的代碼
except <名字>:
<語句>        #如果在try部份引發(fā)了'name'異常
except <名字>,<數(shù)據(jù)>:
<語句>        #如果引發(fā)了'name'異常,獲得附加的數(shù)據(jù)
else:
<語句>        #如果沒有異常發(fā)生

try的工作原理是,當(dāng)開始一個try語句后,python就在當(dāng)前程序的上下文中作標(biāo)記,這樣當(dāng)異常出現(xiàn)時就可以回到這里,try子句先執(zhí)行,接下來會發(fā)生什么依賴于執(zhí)行時是否出現(xiàn)異常。

  • 如果當(dāng)try后的語句執(zhí)行時發(fā)生異常,python就跳回到try并執(zhí)行第一個匹配該異常的except子句,異常處理完畢,控制流就通過整個try語句(除非在處理異常時又引發(fā)新的異常)。
  • 如果在try后的語句里發(fā)生了異常,卻沒有匹配的except子句,異常將被遞交到上層的try,或者到程序的最上層(這樣將結(jié)束程序,并打印缺省的出錯信息)。
  • 如果在try子句執(zhí)行時沒有發(fā)生異常,python將執(zhí)行else語句后的語句(如果有else的話),然后控制流通過整個try語句。

你可以不帶任何異常類型使用except,如下實例:

try:
    正常的操作
   ......................
except:
    發(fā)生異常,執(zhí)行這塊代碼
   ......................
else:
    如果沒有異常執(zhí)行這塊代碼

以上方式try-except語句捕獲所有發(fā)生的異常。但這不是一個很好的方式,我們不能通過該程序識別出具體的異常信息。因為它捕獲所有的異常。
try-finally 語句無論是否發(fā)生異常都將執(zhí)行最后的代碼。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容