二、函式的引數與作用域
三、函式返回值
函式相當於程式設計過程中剪下貼上的操作,可以降低**冗餘,將複雜的系統分解為可管理的部分。
最大化**重用和最小化**冗餘;實現流程的分解。
def是乙個可執行語句,即在python執行到def語句之前函式並不存在。因此def語句的作用是建立乙個函式物件並將其賦值給乙個變數名,常用的def語句為:
def reture
建立乙個物件並將其作為結果返回。
從函式被呼叫開始到函式完成它額工作,函式通過return語句將函式呼叫結果傳遞給呼叫者。
yield語句可以掛起函式的狀態以便在稍後恢復原來的狀態,可以給呼叫者發回乙個結果物件並讓它記住離開的地方。
在預設情況下在函式中被賦值的物件是這個函式的本地變數,且僅在函式執行的過程中存在。global則是宣告了乙個模組級的變數並賦值。
nonlocal語句允許函式來賦值一條語法封閉的def語句的作用域中已有的名稱,即宣告了將要賦值的乙個封閉的函式變數。
在任何情況下,變數的作用域總是由**中被賦值的地方所決定與函式的呼叫完全沒有關係,因此又被稱為語義作用域。通常情況下變數可以在三個不同的地方分配,分別對應三種不同的作用域:1.如果乙個變數在def內賦值它的作用域在這個函式內;2.如果乙個變數在乙個巢狀的def中被賦值,對於巢狀的函式來說是非本地的;3.如果在def之外賦值,它的作用域是檔案全域性的。
函式定義的是本地作用域,而模組定義的是全域性作用域。兩個作用域之間的關係:內嵌模組是全域性作用域;全域性作用域的範圍僅限於單個檔案;每次對函式的呼叫都相當於建立了乙個本地作用域;賦值的變數名除非宣告為全域性變數或者非本地變數,否則均為本地變數;所有其他的變數名都可以歸納為本地(在def內部),全域性變數(模組命名空間內部),內建變數(由python預定義的內建模組提供)。
legb:其中l:本地作用域;e:上一層結構中的lambda或def的本地作用域;g:全域性作用域;b:內建作用域。
引數是通過賦值來傳遞的。引數的傳遞是通過自動將物件賦值給本地變數名來實現的;函式內部引數名的賦值不會影響呼叫;改變函式可變物件引數的值會對呼叫有影響。
關鍵字引數:在呼叫函式時允許通過變數名匹配而不是通過位置;
位置引數:通過位置進行引數值的傳遞;
預設引數:如果沒有傳入值,在函式執行前引數就被賦了預設值。
在python中的函式都有返回值,預設為none。也可以使用return value語句來定義乙個且只能定義乙個或多個任意型別的返回值。
函式中print()和return()的區別:
return()返回值並結束函式,print()僅僅是列印輸出,函式沒有返回值,為none。
示例:
def sum1(x,y):
print(x+y)
def sum2(x,y):
return x+y
x=int(input('請輸入乙個值:'))
y=int(input("請再輸入乙個值:"))
Python學習筆記 Day4
4.1 類和物件 1.定義類 class 類名 class televison 定義乙個電視機 defwatch self print watching 這個電視機能看電視 2.建立物件 物件名 類名 sony televison 索尼這個牌子的電視機 使用watch功能 物件名.watch son...
Python學習筆記 Day4
在python中,and和or的用法有點奇怪,不想c 中的位運算和邏輯判斷公用 和 倘若兩側都為真,則返回右側的值,否則返回假 倘若兩側都為真,則返回左側的值,否則返回假 在c 中有形如?的三目運算子,然而在python中,三目運算是使用if和else達成的,例如 a if a b else b表達...
python學習筆記 Day 4
建立generator,第一種方法很簡單,只要把乙個列表生成式的改成 就建立了乙個generator l x x for x in range 10 l 0,1,4,9,16,25,36,49,64,81 g x x for x in range 10 g at 0x1022ef630 定義gene...