1. 程式人生 > >初識python 函數(定義,傳參,返回值)

初識python 函數(定義,傳參,返回值)

one shu exp name 就是 關系 pre 可變 efi

python基礎(二):

菜鳥教程基礎知識講解的非常全面,內容選擇我認為的重點輸出一遍

函數:

定義一個函數:

你可以定義一個由自己想要功能的函數,以下是簡單的規則:

  

def fun(arg):
    pass
    return arg

# 函數調用語法
fun(arg)
  • arg:argument,參數(也叫prarmeter) ,任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用於定義參數。
  • def:define,定義,創建函數 ,函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括號 ()
  • 代碼縮進表示語句塊,表明代碼從屬關系
  • return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

函數的調用:

  將參數傳入已經定義好的函數中,便可以調用此函數

def printme( str ):
   "打印任何傳入的字符串"
   print (str)
   return
 
# 調用函數
printme("我要調用用戶自定義函數!")
printme("再次調用同一函數")

以上實例輸出結果:
我要調用用戶自定義函數!
再次調用同一函數

函數返回值:

  • 所謂“返回值”,就是程序中函數完成一件事情後,最後給調用者的結果

  • #定義函數
        def add2num(a, b):
            return a+b
    
        #調用函數,順便保存函數的返回值
        result = add2num(100,98)
    
        #因為result已經保存了add2num的返回值,所以接下來就可以使用了
        print (result) --->198

    函數返回值可以為多個:

  • def divid(a, b):
    ... shang = a//b
    ... yushu = a%b 
    ... return shang, yushu
    ...
    >>> sh, yu = divid(5, 2)
    >>> sh
    5
    >>> yu
    1

4種函數的類型:

函數根據有沒有參數,有沒有返回值,可以相互組合,一共有4種

  • 無參數,無返回值

    •   
      # 函數定義,初級
      def numsum():
          a = 5
          b = 10
          c = a + b
          print(c)
      
      # 函數執行
      numsum() --->15

  • 無參數,有返回值

  • 有參數,無返回值

  • 有參數,有返回值

    • 輸入參數:
      • 形參:形式參數,聲明函數時,括號()中的參數
      • 實參:實際參數,調用函數是,括號()中的參數
      • 實參將值傳給形參,本質上是變量賦值
      • 返回值:return
        • 會終止函數執行(return是函數的最後一句),並返回一個值給調用方
        • 不帶表達式的return返回None
        • Print()不是返回值,只是輸出信息到界面
        • # 函數定義,帶輸入輸出
          def numsum2(a, b):
              c = a + b
              return c
          
          # 函數調用
          d = numsum2(10, 20)
          print(d)  --->30

函數中參數的類別:

  • 必需參數
    •   
      #可寫函數說明
      def printme( str ):
         "打印任何傳入的字符串"
         print (str)
         return
       
      #調用printme函數
      printme()

  • 關鍵字參數
    •   
      def about(name,course,site):
          print (name,course,site)
        
      about(site=www.baidu.com,name=green,course=100)   ##以關健字方式傳入參數(可以不按順序)
       

  • 默認參數
    •   
      def about(name,course,site):
          print (name,course,site)
        
      about(jim,100,www.baidu.com)   ## 必須按順序傳參

  • 不定長參數
    •   
      • 非關鍵字可變參數(元組)
        • 放在默認值參數後面
        • 可將傳入的不確定數量的默認參數聚合為元組方便函數使用
        • def fun(a, b, *args):
              print(a)
              print(b)
              print(args)
              print("="*30)
              ret = a + b
              for i in args: #便利args中的元素
                  ret += i
              return ret
          
          print(fun(1,2,3,4))
          
          結果:
          1
          2
          (3, 4)
          ==============================
          10

      • 關鍵字可變參數(字典)
        • 放在非關鍵字可變參數後面
        • 可將傳入的不確定數量的默認值參數聚合為字典方便函數使用
        • def fun(a, b, *args, **kwargs):
              print(a) 
              print(b)
              print(args)
              print(kwargs)
          
          fun(1, 2, 3, 4, name = "hello", age = 20)
          
          結果:
          1
          2
          (3, 4)
          {name: hello, age: 20}
盡量避免多種參數格式混合(主要是兩種可變參數)
多參數混合時註意順序:
    一般順序是:默認參數,默認值參數,非關鍵字可變參數,關鍵字可變參數
    註意:帶關鍵字的參數必須放在最後

匿名函數:

  • 語義上講,lambda 只是普通函數定義中的一個語法技巧,書寫代碼更簡潔(但不易懂)
  • lambda 是一個表達式(非代碼塊),比 def 簡單,僅能封裝有限的邏輯如if else分支,不能使用多項分支和循環,不適合復雜操作
# 普通函數
def def_sum(a, b):
    return a + b

def_sum(5, 10)

# 匿名函數:變量名 = lambda 參數... : 表達式計算
lambda_sum = lambda a, b: a + b
lambda_sum(5, 10)
--->15
分支匿名函數

# 普通函數
def def_gender(g):
    if g == 1:
        return 男性
    else:
        return 女性

def_gender(0)

# 匿名函數:變量名 = lambda 參數... : 分支1的值 if 判斷條件 else 分支2的值
lambda_gender = lambda a: 男性 if a == 1 else 女性
lambda_gender(1)
--->男性
# 普通函數
def absum(a, b):
    return a + b

def def_sum2(a, b, c):
    return absum(a, b) + c

def_sum2(1,2,3)

# 匿名函數:變量名 = lambda 參數... : 其他函數組成的表達式
def absum(a, b):
    return a + b

lambda_sum = lambda x, y, z: absum(x, y) + z
lambda_sum(1,2,3)

--->6

 

初識python 函數(定義,傳參,返回值)