1. 程式人生 > >Python基礎學習:關鍵字def

Python基礎學習:關鍵字def

關鍵字def是用來定義方法(即函式)

1.應用格式

def 函式名(引數1,引數2,…)#引數1,引數2等為形參

       執行語句

def test(a,b):

       pass   #佔位,可以用方法實現的具體操作代替

2.方法的呼叫

def test(a,b):
	print(a +'  '+ b)

test('1','2')

方法呼叫時一定要向方法傳遞符合要求的引數(屬性),方法才能被正確執行。

3.方法的引數傳遞方法

(1)相對位置引數傳遞

如2中所示,將要傳遞的引數值與對應的形參位置匹配

def test(a,b):          #引數a,b為形參
	print(a +'  '+ b)

test('1','2')           #輸入進去的字元1與字元2為實參,實參可以是字元、數字、變數、字典、陣列、元組等函式支援的資料

(2)絕對位置(或關鍵字)引數傳遞

def test(a,b):
	print(a +'  '+ b)

test(b = '1',a = '2')

與上文程式相比,引數的傳遞就與相對位置無關,而與傳遞物件有關

(3)引數預設值

def add(a,b,c=3):
	print(str(a+b+c))

add(1,2,3)

這樣,預設引數就可以被直接使用

但是,如果這樣去設定預設引數,編譯器就會報錯:

def add(a=1,b,c=3):
	print(str(a+b+c))

add(1,2,3)

因此,預設引數應該被放置於所有引數的後列

(4)包裹(可增長引數)傳遞

包裹傳遞可以用來向方法傳遞不定長度的陣列或者字典,以便於隨時擴充套件同類型資料的處理容量。一般來說,在方法體內應當用for迴圈對其進行分解處理。

①傳遞陣列

def func(*num):
	for i in num:
		print (str(i))
 

func(1,4,6)

也可以這樣傳遞:

def func(*num):
	for i in num:
		print (str(i))
 
a =[1,4,6]
func(a)


也可以通過解析:

def func(*num):
	for i in num:
		print (str(i))
 
a = (1,4,6)
func(*a)

②傳遞字典

def make_car(**parameters):

	for k,v in parameters.items():
		print(k + ' : '+ v)
	
make_car(       color = 'yellow',
				choose_form = 'GPS'
				)

而下列程式碼的操作會導致索引錯誤:

def make_car(**parameters):

	for k,v in parameters.items():
		print(k + v)

car_1 = {'color' : 'yellow','choose_form' : 'GPS'}	
make_car(car_1)

將錯誤程式碼修改一下,就又可以運行了:

def make_car(**parameters):

	for k,v in parameters.items():
		print(k + v)

car_1 = {'color' : 'yellow','choose_form' : 'GPS'}	
make_car(**car_1)


在引數呼叫處給傳入字典新增**代表著解析字典,這樣python直譯器就知道該如何操作這個資料了。

4,.方法對傳入引數的操作(是否修改傳入引數的本體)

Python方法的引數傳遞時,值得注意的是,傳入引數為變數是會被臨時賦值給引數變數,如果傳入引數是物件則會被引用。臨時賦值不改變本體資料,而引用會改變本體資料。當然如果資料被gobal定義為全域性資料,那它在任何地方的操作都會改變其所引用的資料。

def test(p1,p2):
    p1 = 10
    p2.append('hello')
      
a = 20
b = []      
test(a,b)  
print(a)     
for v in b: 
    print(v)

為什麼會出現這種情況,這就涉及到python中資料的儲存問題。這將在資料現象中講解