Python基礎學習:關鍵字def
阿新 • • 發佈:2019-02-04
關鍵字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中資料的儲存問題。這將在資料現象中講解