Python3簡單教程(五)函式

2021-08-02 09:10:04 字數 4792 閱讀 7168

相關檔案及後續更新會上傳至:

#函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的**段。

#函式能提高應用的模組性,和**的重複利用率。

#規則:

#函式**塊以def關鍵字開頭,後接函式識別符號名稱和圓括號()。

#任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。

#函式的第一行語句可以選擇性的使用文件字串-----用於存放函式說明。

#函式內容以冒號開始,並且縮排。

#return[表示式]結束函式,選擇性地返回乙個值給呼叫方。不帶表示式的return相當於返回none。

#例項:defhello():

print("hello world!")

hello() #return hello world!defarea(width,height):returnwidth*height

print(area(4,5)) #return 20

#在python中,strings,tuples和numbers是不可更改的物件,而list,dict等則是可以修改的物件。

#不可變型別:變數賦值a=5後再賦值a=10,這裡實際是新生成乙個int值物件10,再讓a指向它,而5被丟棄,不是改變a的值,相當於新生成了a。

#可變型別:變數賦值la=[1,2,3,4]後再賦值la[2]=5則是將list la的第三個元素值更改,本身la沒有動,只是其內部的一部分值被修改了。

# python函式的引數傳遞

#不可變型別:類似c++的值傳遞,如 整數、字串、元組。如fun(a),傳遞的只是a的值,沒有影響a物件本身。比如在fun(a)內部修改a的值,只是修改另乙個複製的物件,不會影響a本身。

#可變型別:類似c++的引用傳遞,如 列表、字典。如 fun(la) ,則是將 la 真正的傳過去,修改後fun外部的la也會受影響

#python中一切都是物件,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變物件和傳可變物件。

defchangeint(a):

a = 10

b = 2

changeint(b)

print(b) #return 結果是2

#例項中有int物件2,指向它的變數是b,在傳遞給changeint函式時,按傳值得方式複製了變數b,a和b都指向了同乙個int物件,

#在a=10時,則新生成乙個int值物件10,並讓a指向它。

#可變物件在函式裡修改了引數,那麼呼叫這個引數的函式裡,原始的引數也被改變了。例如:defchangelist(list):

"修改傳入的列表"

print("函式內取值:",list)returnlist = [10,20,30]

changelist(list)

print("函式外取值:",list)

#return

# 函式內取值: [10, 20, 30, [1, 2, 3, 4, 5]]

# 函式外取值: [10, 20, 30, [1, 2, 3, 4, 5]]

#必須引數

#關鍵字引數

#預設引數

#不定長度引數

defprintme(str):pass#printme() #return typeerror: printme() missing 1 required positional argument: 'str'

#關鍵字引數和函式呼叫關係緊密,函式呼叫使用關鍵字引數來確定傳入的引數值。defprintinfo(name,age):passprintinfo(age='50',name='shayu')

#呼叫函式時,如果沒有傳遞引數,則會使用預設引數。defprintinfo(name,age=35):

print("名字:",name,end=" ")

print("年齡:",age)returnprintinfo(age=50,name='shayu') #return 名字: shayu 年齡: 50

printinfo(name='shayu') #return 名字: shayu 年齡: 35

#你可能需要乙個函式能處理比當初宣告時更多的引數。這些引數叫做不定長引數,和上述2中引數不同,宣告時不會命名。

#基本語法如下:

# def functionname([formal_args,] *var_args_tuple):

# function_suite

# return [expression]

#加了星號(*)的變數名會存放所有未命名的變數引數。如果在函式呼叫時沒有指定引數,它就是乙個空元組。

#我們也可以不向函式傳遞未命名的變數。如下:defprintinfo(arg1,*vartuple):

print(arg1,end=",")forvarinvartuple:

print(var,end=",")returnprintinfo(10) #return 10,

printinfo(70,80,90) #return 70,80,90,

#python使用lambda來建立匿名函式。

#所謂匿名,意即不再使用def語句這樣標準的形式定義乙個函式。

#lambda只是乙個表示式,函式體比def簡單很多。

#lambda的主體是乙個表示式,而不是乙個**塊。僅僅能在lambda表示式中封裝有限的邏輯進去。

#lambda函式擁有自己的命名空間,且不能訪問自有引數列表之外或全域性命名空間裡的引數。

#雖然lambda函式看起來只能寫一行,卻不等同於c或c++的內聯函式,後者的目的是呼叫小函式時不占用棧

#記憶體從而增加執行效率。

#語法#lambda函式的語法只包含乙個語句,如下:

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

#例項:

sum =lambdaarg1,arg2:arg1 + arg2

print(sum(10,20)) #return 30

#python中,程式的變數並不是在哪個位置都可以訪問的,訪問許可權決定於這個變數是在**賦值的。

#變數的作用域決定了在哪一部分程式了可以訪問哪個特別的變數名稱。python的作用域一共有4種,分別是:

#l(local)區域性作用域

#e(enclosing)閉包函式外的函式中

#g(global)全域性作用域

#b(built-in)內建作用域

#以l->e->g->b的規則查詢,即:在區域性找不到,便會去區域性外的區域性找(例如:閉包),再找不到就會

#去全域性找,再者去內建中找。

x = int(2.9) #內建作用域

g_count = 0 #全域性作用域defouter():

o_count = 1 #閉包函式外的函式中definner():

i_count = 2 #區域性作用域

#python 中只有模組(module),類(class)以及函式(def、lambda)才會引入新的作用域,其它的**塊

#(如 if/elif/else、try/except、for/while等)是不會引入新的作用域的,也就是說這些語句內定義的變數,

#外部也可以訪問。

#當內部作用域想修改外部作用域的變數時,就要用到global和nonlocal關鍵字了。

#以下例項修改全域性變數 num:

num = 1deffun1():globalnum #需要使用global關鍵字宣告

print(num)

num = 123

print(num)

fun1()

print(num)

#return

# 1# 123

# 123

#如果要修改巢狀作用域(enclosing作用域,外層非全域性作用域)中的變數則需要nonlocal關鍵字了,如下例項:defouter():

num = 10definner():nonlocalnum

num = 100

print(num)

inner()

print(num)

outer()

#return

# 100

# 100

手機python3教程 python3基礎教程

python 基礎教程 python 是一種解釋型 物件導向 動態資料型別的高階程式語言。python 由guido van rossum 於年底發明,第乙個公開發行版發行於年。像 perl 語言一樣 python 源 同樣遵循 gpl gnu general public license 協議。現...

Python3基礎教程之遞迴函式簡單示例

概述 遞迴函式即直接或間接呼叫自身的函式,且遞迴過程中必須有乙個明確的遞迴結束條件,稱為遞迴出口。遞迴極其強大一點就是能夠遍歷任意的,不可預知的程式的結構,比如遍歷複雜的巢狀列表。www.cppcns.com 遞迴求和 我們可以利用遞迴函式實現乙個python內建函式sum 的遞迴版。遞迴 def ...

安裝python3教程

python3 安裝教程 步驟 1.python 的官網 則在終端中輸入 wget 3.6.0 python 3.6.0.tgz 2.然後,解壓壓縮檔案 終端輸入命令 tar xvf python 3.6.0.tgz 3.建立安裝檔案的路徑 sudomkdir usr local python3 4...