python-函式入門(一)

weixin_34221276發表於2018-07-30

1.什麼是函式:

可重複使用的,用來實現單一,或相關聯功能的程式碼段。

函式分為內建函式和自定義函式,這裡先講自定義函式

2.如何定義函式:

#語法
def 函式名(引數1,引數2,引數3,...):
    '''註釋'''
    函式體
    return 返回的值

注:函式必須先定義才能使用,定義階段不執行程式碼只檢測語法.意思就是語法錯誤在定義階段就會檢測出來,程式碼的邏輯錯誤只有在執行時才會提示.

3.定義函式的三種形式

無參:用於執行一些列印等操作,不需要引數傳進去

有參:需要根據傳進去的引數進行運算

空函式:用於設計程式碼結構

#     1.無參函式
# def foo():
#     print('from foo')
# foo()
#     # 2.有參函式
# def bar():
#     print(x,y)
# bar(1,2)
#     # 3,空函式
# def func():
#     pass

4.函式呼叫

函式呼叫就是函式名加個()即可

4.1呼叫函式的三種形式:

# 1.語句形式
# def foo():
#     print('from foo')
# foo() 
#
# 2.表示式形式
# def foo(x,y):
#     res = x+y
#     return  res
# res = foo(1,2) 

# 3.可以當做引數傳給另外一個函式
# def max2(x,y):
#     if x>y:
#         return x
#     else:
#         return y
# res = max2(max2(1,2),3)
# print(res)

4.2函式的返回值

1.返回值沒有型別限制

2.返回值沒有個數限制

注:返回多個值的結果就是返回一個元組,0個值返回為None

return是函式結束的標準,可以有多個return但只執行一次

# def f1():
#     print('111')
#     return 1
#     print('222')
#     return 2
#     print('333')
#     return 3
#def f1()
#只執行 print('111')

4.3函式的引數

函式的引數分為形參和實參.形參即為變數名,實參為變數值,在函式呼叫時,把值繫結到變數名上,在函式呼叫結束後,解除繫結

形參與實參的具體分類(重點)

1.位置引數

1.1位置形參

  在定義函式階段按照從左到右的順序定義的形參.   注:按位置定義的形參必須被傳值,多一個不行,少一個也不行

# def foo(x,y)
#     print(x,y)
#
# foo(1,2)    #正確
# foo(1,2,3) #錯誤

1.2位置實參

  在呼叫函式階段按照從左到右的順序依次傳入的值.

2.關鍵字引數

  關鍵字實參:在呼叫函式階段,按照key=value的形式指名道姓的為指定值傳值

  注:可以完全打亂順序,仍可以為指定的形參傳值

    可以混合使用位置實參和關鍵字實參,但必須注意(1)位置實參必須放在關鍵字實參前面(2)不能對一個形參重複賦值

 

def foo(name,age):
    print(name,age)

foo('zfj',18)
foo(age=18,name='egon')
# foo(name='zfj',18)#報錯
# foo('zfj', age=18)

 

3.預設引數

  指的是在定義階段就已經為某個形參賦值了,該形參稱之為有預設值的形參

注意:1.在定義階段就已經被賦值,意味著在呼叫階段就可以直接使用,預設引數

   2.位置形參應該放到預設形參前面

   3.預設引數的值,通常應該為不可變型別

 

def foo(x,y=2):
    print(x,y)
foo(1)#1,2
foo(1,3)#1,3

 

4.可變長度引數

  站在實參的角度,引數長度可變指的是在呼叫函式時,傳入的實參的值個數不固定

  4.1在形參中帶“*”:會將呼叫函式時溢位的位置實參儲存為元組的形式,然後賦值給*後的變數

def foo(x,y,*z):
    print(x,y,z)
foo(1,2,3,4,5)#1 2 (3, 4, 5)

  4.2在形參中帶“**”:會將呼叫函式時溢位的關鍵字實參儲存成字典的形式,然後賦值給**後的變數名

def foo(x,y,**z):
    print(x,y,z)
foo(1,2,a=1,b=2)#1 2 {'a': 1, 'b': 2}

  4.3在實參中帶“*”:在傳值前先被打散成位置實參,然後再進行賦值

def foo(x,y,*z):
    print(x,y,z)
foo(1,*[2,3,4,5,6])#1 2 (3, 4, 5, 6)

  4.4在實參中帶“**”:在傳值前先被打散成關鍵字實參,然後再進行賦值

def foo(x,y,z):
    print(x,y,z)
foo(1,**{'y':2,'z':1})#1 2 1

5.命名關鍵字引數

放到*與**之間的引數稱為命名關鍵字引數。函式的呼叫者可以傳入任意不受限制的關鍵字引數

注意:命名關鍵字引數必須按照key = value的形式傳值

 

補充:

在形參中帶*與**的,*後的變數名應該為args,**後應該是kwargs

# 當我們想要將傳給一個函式的引數格式原封不動地轉嫁給其內部的一個函式,應該使用下面這種格式
def bar(x,y,z):
    print(x,y,z)
def wrapper(*args,**kwargs):
    bar(*args,**kwargs)
wrapper(1,2,z=3) #雖然呼叫的是wrapper,但是要遵循的卻是bar的引數標準

 

焚膏油以繼晷,恆兀兀以窮年。

相關文章