1. 程式人生 > >Python3函式傳參和函式形參定義方式

Python3函式傳參和函式形參定義方式

1、函式呼叫時的引數傳遞方式:(呼叫函式)
    傳遞方式有以下四種:
   位置傳參
   序列傳參
   關鍵字傳參
   字典關鍵字傳參

(1)位置傳參:
   實際引數(實參)的對應關係與形式引數(形參)對應關係是按位置依次對應的
   實參的個數和形參的個數要嚴格一直
   例項:def myfun1(a, b, c):   # 形參
           print(a)
           print(b)
           print(c)
     # 呼叫      myfun1(1, 2, 3)   # 實參

(2)序列傳參
   序列傳參是指在函式呼叫過程中,用*將序列拆解後按位置進行傳遞的方式
   序列傳參時,序列拆解的位置將與形參一一對應
   序列的位置資訊對應相應的引數
   例項:# 假設已經有序列可用
      L1 = [11,22,33]
      T1 = (4.4,5.5,6.6)
      S1 = "ABC"
      myfun1(*L1)
      myfun1(*T1)
      myfun1(*S1)

(3)關鍵字傳參:
   關鍵字傳參是指傳參時,按形參的名稱給形參賦值
   實參和形參按形參名進行匹配(可以不按位置順序進行匹配)
   例項:# 關鍵字傳參
      myfun1(c = 33, b = 22, a = 11)

(4)字典關鍵字傳參:
   是指實參為字典,將字典用**拆解後進行關鍵字傳參
   例項:d1 = {"c":33, "b":22, "a":11}
      myfun1(**d1)
   說明:字典的鍵名和形參名必須一致
            字典的鍵名必須為字串,並符合關鍵字的命名
            字典的鍵名要在形參中存在

(5)函式的綜合
   傳參方式,在能確定每個形參否能唯一匹配一個實參的情況也可以任意傳參
   傳參時,位置傳參和序列傳參要先於關鍵字傳參和字典關鍵子傳參
   例項: myfun1(100, *[200, 300])
             myfun1(*[10,20],30)
             myfun1(*[10], 20, *[30])
             myfun1(100, **{"c":300, "b":200})
             myfun1(**{"c":300, "b":200}, a = 100)              myfun1(b = 200, c = 300, 100)   # 錯的

注意傳參時:
   1、不可變型別的資料作為函式引數傳入時,函式內部不會改變變數的原資料的值
   2、可變型別的資料作為函式引數傳遞時,函式內部可以改變原資料,多用與返回更多函式執行結果
例項:寫一個函式,在函式內輸入一些整數,
      (1)把所有奇數放入全域性列表odds中
      (2)把所有的偶數放入全域性的列表evens中
odds = []
evens = []
def input_number(o, e):
    while True:
        n = int(input("請輸入整數:"))
        if n < 0:
            break
        # 如果n為奇數則新增列表odds中
        if n % 2 == 1:
            o.append(n)
        else: # 如果n為偶數則新增到列表evens中
            e.append(n) input_number(odds, evens)
print(odds)   # 此列表將被修改
print(evens)    # 此列表也將被修改


2、函式引數的定義規則(建立函式)
函式的預設引數:
語法:def 函式名(形參名1 = 預設實參1, 形參名2 = 預設實參2, ....):
          語句塊
例項:以下示意函式的預設引數
def info(name, age=1, address="未填寫"):
    print(name, "住在:", address, "今年:", age, "歲")
info("莊AC", 23,  "北京")
info("莊AC", 23)
說明:(1)預設引數必須自右至左依次存在,如果一個引數有預設引數,則其右側的所有引數都必須有預設引數
                如:def test_fn(a, b = 10, c):    # 是錯的
         (2)預設引數可以有0個或多個,甚至全部都有預設引數


3、函式的引數定義方式:
     位置形參
     星號元組形參
     命名關鍵字形參
     雙星號字典形參

(1)位置形參語法:
   def 函式名(形參名1, 形參名2, 形參名3,......):
       語句塊
(2)星號元組形參語法:
   def 函式名(*元組形參名):        語句塊
   作用:收集多餘的位置傳參    例項:
   def funs(*args):
       # args繫結一個元組,此元組內的元素是為了剩餘的位置傳參
       print("施參個數是:", len(args))
       print("args繫結", args)
   funs()  # 以無參呼叫
   funs(1, 2, 3, 4)
   funs("ABC", 1, 2.3, 4+5J)

(3)命名關鍵字形參語法:
   def 函式名(*, 命名關鍵字形參):
       語句塊
   或
   def 函式名(*args, 命名關鍵字形參):        語句塊
   作用:所有的命名關鍵字形參,必須用關鍵字傳參或字典關鍵字傳參進行引數傳遞
   例項:
   def fn(*, a, b):
       print("a的值為:", a)
       print("b的值為:", b)
   # fn(1, 2)  # 錯的,a和b 必須是用關鍵字傳參
   fn(a = 1, b = 2)  #必須這麼傳
   fn(b = 0, a = 20)
   fn(**{"b":200, "a":100})
--------------------------
   def f2(*args, a, b):
       print("args=", args)
       print("a=", a)
       print("b=", b)
   f2(1, 2, 3, 4, a=100, b=200)
   f2(a=100, b=200)


(4)雙星號字典形參語法:
   def 函式名(**字典形參名):
       語句塊
   作用:收集多餘的關鍵字傳參(例如:dict()),通常只有一個
   例項:
   def func(**kwagrs):  # kwagrs繫結一個字典
       print("引數個數:", len(kwagrs))
       print("kwagrs的值為:", kwagrs)
   func(name="zhuang", age=35, address="dgas")
   func()

(5)函式引數自左至右的順序為:
   位置形參, 星號元組形參, 命名關鍵字形參, 雙星號字典形參
   例項:
      def fn(a, b, *args, c, **kwargs):
          pass
      fn(100,200,300,400,c=5.5,d=6.6,e=7.7)
      fn(10,*"AB",20,*{"a":100, "b":200, "c":300})
      # ----------以下函式可以接受任意的位置傳參和關鍵字傳參------------
      def fn(*args, **kwargs):



相關推薦

C++ 引用指標

從引用形參和非引用形參的區別來看,似乎任何時候使用引用形參都指標好, 既少了實參到形參拷貝的開消,也同樣可以操作(非const )實參。 那指標形參有沒有什麼優點呢? 1. 指標形參比引用形參更能清晰的向函式呼叫者表明函式可能會修改實引數 void f1(int *

Python3函式函式定義方式

1、函式呼叫時的引數傳遞方式:(呼叫函式)     傳遞方式有以下四種:    位置傳參    序列傳參    關鍵字傳參    字典關鍵字傳參(1)位置傳參:    實際引數(實參)的對應關係與形式

中斷服務函式能不能帶返回值

從本質上來講,中斷是一種電訊號,當裝置有某種事件發生時,它就會產生中斷,通過匯流排把電訊號傳送給中斷控制器。如果中斷的線是啟用的,中斷控制器就把電訊號傳送給處理器的某個特定引腳。處理器於是立即停止自己正在做的事,跳到中斷處理程式的入口點,進行中斷處理。 (1) 硬中斷 由與系統相連

C語言函式篇(二)

參引數:形參和實參 ------------------------------- 形參實現一種資料傳入的介面 ,由實參 拷貝 給 形參 拷貝!!!!!!!!!!! 拷貝1: void func(int tmp

函式中以陣列作為

說明: 陣列的兩個特殊性質對我們定義和使用作用在陣列上的函式有影響,這兩個性質分別是: 不允許拷貝陣列; 使用陣列時通常會將其轉換成指標。 因為不能拷貝陣列,所以我們無法以值傳遞的方式使用陣列引數。 因為陣列會被轉換成指標,所以當我們為函式傳遞一個

Android Studio檢視函式(方法)的列表,返回值,以及提示資訊

在Eclipse中,當我們需要使用某個函式(方法)時,滑鼠移到對應的函式(方法)上,就會自動有一個懸 浮窗提示該函式的說明(所包含的引數含義,該方法功能)。 在Android Studio中,滑鼠移到

C++函式中string型別的宣告方…

注意即使添加了#include <string> 在寫函式原型時寫成這樣也會報錯: string output( string str ) {   retrun str; } 使用方法如下: #include <string> string output( std::strin

C語言程式設計基礎-09函式與返回值及

函式 返回值 形參實參 函式 在大規模的程式中需要對語句進行分組管理,把相互之間聯絡比較緊密的語句合併成一組; 分組可以在多個不同層次上進行,最低一級分組的結果叫程式碼塊,程式碼塊由{}大括號包括; 在大括號前面新增     型別名 函式名()的就是函式; 函式的形式如 v

函式中的問題(指標、引用、二重指標作為)

(1)用指標傳遞引數,可以實現對實參進行改變的目的,是因為傳遞過來的是實參的地址,因此使用*a實際上是取儲存實參的記憶體單元裡的資料,即是對實參進行改變,因此可以達到目的。在使用的過程中需要通過對地址的解引用來操作其所指向的變數,同時可以通過指標的自增自減移動從而改變所指向

C/C++中函式引數傳之指標

     指標的行為和其他非引用型別一樣。當執行指標拷貝操作時,拷貝的是指標的值。拷貝之後,;兩個指標是不同的指標。因為指標使我們可以間接地訪問它所指的物件,所以通過指標可以修改它所指物件的值:        Int n = 0, i = 42;        int *p

Python函數中多類型冗余數及函數的遞歸調用

rgb {} rgs fun mini eight 分享圖片 not strong 1.多類型傳值和冗余參數多類型傳值: def fun(x,y): return x +y print fun(3,5) 8 print fun(*t)

總結java方法(函式)引用的問題

java方法中傳值和傳引用的問題是個基本問題,但是也有很多人一時弄不清。 (一)基本資料型別:傳值,方法不會改變實參的值。 public class TestFun { public static void testInt(int i){    i=5;    }  public static void m

js函數的兩種定義形式,函數的實列表arguments/列表函數名

cti 函數名 arguments ros 表達 length 16px 列表 microsoft 1.聲明式函數:function test(){}; 2.表達式函數:var test=function(){} 例:function test(a,b){} test(

函式過載(overload)函式重寫(override)的基本規則

本文由Markdown語法編輯器編輯完成。 1. 前言:   在C++中有兩個非常容易混淆的概念,分別是函式過載(overload)和函式重寫(overwirte)。雖然只相差一個字,但是它們兩者之間的差別還是非常巨大的。而通過深入瞭解這兩個概念的區別,

指標函式(Pointer Function)函式指標(Pointer to Function或Function Pointer)

一、指標函式 1、解釋:指標函式很好理解:簡單來說,就是一個返回指標的函式,本質是一個函式。如:  int fun(int x,int y);    //這是一個普通函式的宣告,返回值是一個int型別,是一個數值。  int *fun(in x,int y);  //這就是

函式去抖函式節流

為什麼會有會出現debounce和throttle以下場景往往由於事件頻繁被觸發,而重複執行DOM操作、資源載入等重行為、會導致UI停頓甚至瀏覽器崩潰。1、window物件的resize、scroll和拖拽時的mousemove事件2、射擊遊戲中的mousedown、key

argument實Vs. parameter

When you define a Function or Sub procedure, you specify a parameter list in parentheses immediately following the procedure name. An

移動端事件(四)—— 函式防抖函式節流

函式防抖   在對於函式高頻次執行時,只執行一次。   有兩種情況:     1.尾部執行:高頻次觸發時,只執行最後一次     2.頭部執行:高頻次觸發時,只執行第一次   尾部執行實現很簡單,先設一個定時器,一開始觸發的時候我不執行,稍微延遲一會後再執行,當你下次執行時,我把上一次的定時器消失,

移動端事件(五)—— 函式防抖函式節流的封裝

我們瞭解了函式防抖與函式節流的思路後,我們現在來將他們封裝起來,提高程式碼複用性。 今天直接上菜   cb 要處理防抖的函式  time 預設的高頻間隔時間  isStart 是否在頭部執行 函式防抖封裝:呼叫debounce 函式,返回一個處理過防抖的函式 <!DOCTYPE html> &l

python3的url編碼解碼,自定義gbk、utf-8

因為很多時候要涉及到url的編碼和解碼工作,所以自己製作了一個類,廢話不多說 碼上見!# coding:utf-8 import urllib.parse class Urlchuli(): """Url處理類,需要傳入兩個實參:Urlchuli('實參','編碼