函式是可重用的程式**塊,函式的作用,不僅可以實現**的復用,更能實現**的一致性
python函式的分類:
內建函式:str()、len()等
標準庫函式:通過import語句導入庫,然後使用其中定義的函式。
第三方函式
使用者自定義函式
函式的定義和呼叫:
我們使用 def 來定義函式,然後就是乙個空格和函式名稱;
(1) python 執行 def 時,會建立乙個函式物件,並繫結到函式名變數上。
引數列表
(1) 圓括號內是形式引數列表,有多個引數則使用逗號隔開
(2) 形式引數不需要宣告型別,也不需要指定函式返回值型別
(3) 無引數,也必須保留空的圓括號
(4) 實參列表必須與形參列表一一對應
return 返回值
(1) 如果函式體中包含 return 語句,則結束函式執行並返回值;
(2) 如果函式體中不包含 return 語句,則返回 none 值。
文件字串(函式的注釋):使用三個單引號或者三個雙引號進行注釋。使用help(函式名._doc_)可以列印函式的文件字串。
變數的作用域( 全域性變數和區域性變數)
變數起作用的範圍稱為變數的作用域,不同作用域內同名變數之間互不影響。變數分為:全域性變數、區域性變數。
全域性變數:
1. 在函式和類定義之外宣告的變數。作用域為定義的模組,從定義位置開始直到模組結束。
2. 全域性變數降低了函式的通用性和可讀性。應盡量避免全域性變數的使用。
3. 全域性變數一般做常量使用。
4. 函式內要改變全域性變數的值,使用 global 宣告一下
區域性變數:
1. 在函式體中(包含形式引數)宣告的變數。
2. 區域性變數的引用比全域性變數快,優先考慮使用。
3. 如果區域性變數和全域性變數同名,則在函式內隱藏全域性變數,只使用同名的區域性變數
引數的傳遞
函式的引數傳遞本質上就是:從實參到形參的賦值操作。具體操作時分兩類:
對「可變物件」進行「寫操作」,直接作用於原物件本身。
對「不可變物件」進行「寫操作」,會產生乙個新的「物件空間」,並用新的值填充這塊空間。
可變物件:字典、列表、集合、自定義的物件等。
不可變物件:數字、字串、元組、function等。
淺拷貝和深拷貝
淺拷貝(copy):不拷貝子物件的內容,只是拷貝子物件的引用。
深拷貝(deepcopy):會連子物件的記憶體也全部拷貝乙份,對子物件的修改不會影響源物件。
引數的幾種型別:
位置引數:函式呼叫時,實參預設按位置順序傳遞,需要個數和形參匹配。
預設值引數:可以為某些引數設定預設值,預設值引數放在普通位置引數後面。
命名引數:我們可以按照形參的名稱傳遞引數,也稱為「關鍵字引數」。
可變引數:指的是「可變數量的引數」,分兩種情況:
1.*param(乙個星號),將多個引數收集到乙個「元組」物件中。
2.**param(兩個星號),將多個引數收集到乙個「字典」物件中。
強制命名引數:在帶星號的「可變引數」後面增加新的引數,必須是「強制命名引數」。
lambda表示式和匿名函式
lambda表示式可以用來宣告匿名函式。lambda函式是一種簡單的、在同一行中定義函式的方法,實際生成了乙個函式物件。
lambda表示式只允許包含乙個表示式,不能含複雜語句,該表示式的計算結果就是函式的返回值。
lambda表達是的基本語法如下:lambda arg1,arg2,arg3...:《表示式》
f = lambda a,b,c,d:a*b*c*d
def test(a,b,c,d):
return a*b*c*d
print(f(1,2,3,4))
eval()函式
功能:將字串str當成有效的表示式來求值並返回計算結果。
語法:eval(source[,globals[,locals]]) ->value
引數:source:乙個python表示式或函式compile()返回的**物件。globals:可選,必須是dictionary。locals:可選,任 意對映物件。
遞迴函式
遞迴函式指的是:自己呼叫自己的函式,在函式體內部直接或間接的自己呼叫自己。每個遞迴函式必須包含兩個部分:
終止條件:表示遞迴什麼時候結束。一般用於返回值,不在呼叫自己。
#使用遞迴函式,計算階乘
def factorial(n):
if n==1:
return 1
else:
return n*factorial(n-1)
result = factorial(5)
print(result)
nonlocal關鍵字:用來宣告外層的區域性變數。
#測試nonlocal,global關鍵字的用法
def outer():
b = 10
def inner():
nonlocal b
print("inner b:",b)
b = 20
global a
a = 1000
inner()
print("outer b:",b)
outer()
結果:inner b: 10
outer b: 20
a: 1000
testlib h從入門到入墳
學了這麼久oi連個spj都不會寫真是慚愧啊。趁著沒退役趕緊學一波吧 我是直接暴力複製貼上的。然後扔到mingw的目錄裡 直接引用就好啦 引用testlib.h後,我們可以從三個地方讀入資料 inf 輸入檔案 ouf 選手輸出 ans 標準輸出 當然,肯定不能直接用scanf讀入,testlib裡內建...
python從入門到入墳 三(呂萬友)
上一節學習了字串的處理,其中也涉及到一些方法 等以後真正實用後再進行回顧。今天繼續學習新的知識。python 的三種資料儲存方式 tuple,list,dictionary list 沒有什麼特殊的地方,可能如果有,則需要對二維list做下了解。tuple 元組中只包含乙個元素時,需要在元素後面新增...
Git 從入門到入坑
當你想要學習 git 的時候,我猜你應該已經了解了什麼時候 git。沒錯,它就是分布式版本管理系統。講人話系列,就拿你上學時候考試來說吧,老師發了一張英語試卷給同學們做。這時你就想偷懶了,和幾個朋友商量好,乙個人做聽力,乙個人做閱讀,乙個人做完形填空。最後,你們把各自做的和並起來,一張卷子就做完了。...