1. 程式人生 > >Python] Python函式引數中的*,** 以及不帶*的差異!

Python] Python函式引數中的*,** 以及不帶*的差異!

Python的函式定義中有兩種特殊的情況,即出現*,**的形式,加上不帶*的,三種情況,差異性在哪裡呢?

第一種:引數個數固定,可以帶引數名字,或者不帶名字。

第二種:引數個數任意,但不能帶引數名字,引數是tuple型別。

第三種,引數個數任意,但必須帶引數名字,引數是dict型別。

看程式碼:
     如:def fun1(arg)或def fun2(arg),def fun3( **arg),等。

def fun1(arg):
    print ("arg  type=" + str(type(arg)))
    print ("arg=" + str(arg))
fun1(2)
fun1(arg=3)

執行結果:

arg type=<class 'int'>
arg=3
arg type=<class 'int'>
arg=2

沒有帶*引數,但可以使用帶引數名稱來傳遞引數,葉不可以不帶名字,但引數個數必須一致。

def fun2(*arg):
    print ("arg type=" + str(type(arg)))
    print ("arg=" + str(arg))

    for i in range(0, len(arg)):
        print ("arg[" + str(i) + "]=" + str(arg[i]))

fun2(2,3)
fun2()

執行結果:

arg type=<class 'tuple'>
arg=(2, 3)
arg[0]=2
arg[1]=3
arg type=<class 'tuple'>
arg=()
>>>帶*的引數,可以任意多的引數,或者無引數,但只能是無名字引數。

def fun3(**arg):
    print ("arg type=" + str(type(arg)))
    print ("arg=" + str(arg))

    print ("age:" + str(arg['age']))
    print ("name:" + str(arg['name']))

fun3(age=2,name=3)
fun3(name=2, age=3)

執行結果:

def fun3(**arg):
    print ("arg type=" + str(type(arg)))
    print ("arg=" + str(arg))

    print ("age:" + str(arg['age']))
    print ("name:" + str(arg['name']))

fun3(age=2,name=3)
fun3(name=2, age=3)

執行結果:

arg type=<class 'dict'>
arg={'name': 3, 'age': 2}
age:2
name:3
arg type=<class 'dict'>
arg={'name': 2, 'age': 3}
age:3
name:2
arg type=<class 'dict'>
arg={}

>>>帶**的引數,可以任意多的引數,或者無引數,但只能是有名字引數。

相關推薦

Python] Python函式引數的*,** 以及*的差異

Python的函式定義中有兩種特殊的情況,即出現*,**的形式,加上不帶*的,三種情況,差異性在哪裡呢? 第一種:引數個數固定,可以帶引數名字,或者不帶名字。 第二種:引數個數任意,但不能帶引數名字,引數是tuple型別。 第三種,引數個數任意,但必須帶引數名字,引數是di

你所知道的Python函式引數的演進之路

  函式引數處理機制是Python中一個非常重要的知識點,隨著Python的演進,引數處理機制的靈活性和豐富性也在不斷增加,使得我們不僅可以寫出簡化的程式碼,也能處理複雜的呼叫。 關鍵字引數 呼叫時指定引數的名稱,且與函式宣告時的引數名稱一致。 關鍵字引數是Pyt

Python函式引數傳遞後 引數可變與可變問題

首先看下面的例子: a = 1 def func(a): a=2 func(a) print(a) ##1 a = [] def func(a): a.append(1) func(a) print(a) ##[1] 解釋如下: 型別是屬於物件的,而不是變

Python函式定義預設引數正確方式和錯誤方式

正確的方式:def x_y_sum(x,y=20):    print("x={}".format(x))    print("y={}".format(y))        return x+yres1 = x_y_sum(10)print("res1={}".format

python函式引數一鍵轉化成字典的技巧,非**kwargs,抵制kwargs。

1、有時候使用設計模式,例如工廠方法模式,函式傳的引數還需要一一根據條件傳遞到各個類裡面去例項化或者其他原因,直接複製所有的引數看起來不太好,造成很多相同的行。   2、直接函式/方法中寫**kwargs,那就不需要轉化了,但寫程式碼要抵制這樣的寫法,這樣造成補全困難和使呼叫者不知道需要傳遞什麼

Python---限定函式引數的型別及預設值

python作為一門動態語言,在使用變數之前是不需要進行定義,而是通過動態繫結的方法將變數繫結為某種型別。這樣做為我們使用變數時提供了方便,但有時也給我們使用變數時造成了一定的困擾,例如在使用變數時不知道變數的型別,使用函式時不知道該傳什麼型別·的引數。有時候我們定義函式時也想限定引數型

Python split()函式使用遇到的問題

Pythonsplit() 通過指定分隔符對字串進行切片,如果引數 num 有指定值,則僅分隔 num 個子字串。 split() 方法語法: str.split(str="", num=string.count(str)). 引數 str -- 分隔符,預設為所有的

Python 4.函式引數 返回值與文件檢視(基礎篇)

  本章大綱:(以後文筆格式都會在開頭有個大綱)                  -五大引數-                                普通引數                                預設引數                                關鍵

Leetcode刷題筆記python---兩句話常見單詞

兩句話中的不常見單詞 題目 給定兩個句子 A 和 B 。 (句子是一串由空格分隔的單詞。每個單詞僅由小寫字母組成。) 如果一個單詞在其中一個句子中只出現一次,在另一個句子中卻沒有出現,那麼這個單詞就是不常見的。 返回所有不常用單詞的列表。 您可以按任何順序返回列

5、python基礎——函式引數

參考原文:http://www.cnblogs.com/superwuchaofan/p/7118169.html python中函式的引數 形參:定義函式時代表函式的形式引數 定義函式時,形參分為普通引數,預設引數,和動態引數(普通動態引數,關鍵字動態引數) 順序:普通引數,預設引數,

python爬蟲-解決網頁到的資訊-”真假網頁“

首先介紹一下我所理解的“真假網頁”,“真網頁”就是我們可以直接通過網址(URL),獲取這個“真網頁”上的任何內容。“假網頁”就是我們通過URL爬取網頁資訊時得到的結果為空,這一點相信大家在寫爬蟲程式時會經常遇到。比如我們想獲取一個網頁的資訊,利用requests的get方法對

Python的坑(7) -- 定義預設引數要牢記一點:預設引數必須指向變物件

原文連結: http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431752945034eb82ac80a3e64b9bb4929b16eeed1eb90

Problem#1 Python函式引數傳遞

     本專欄會不定期增加一些Python基本問題的分析和解答以促進Python知識的理解和掌握。第一道Python題如下: #第一題Python題 a = 1 def fun(a): a = 2 fun(a) print(a) b = [] def fun(

python函式引數

前記     定義函式時,把引數的名字和位置確定,函式的介面定義就完成。函式呼叫者只需要知道如何傳遞正確的引數,以及函式返回什麼值,函式內部的邏輯被封裝;     python函式定義中,除了正常定義的必選引數外,還有預設引數、可變引數、關鍵字引數。     預設引數一定要

Spring AOP動態獲取函式引數的值

一個簡單的栗子,我們需要記錄一個訂單系統的訂單狀態流轉日誌。為了符合開閉原則,我們只能新加程式碼,隨之引入AOP。AOP的引入是這個功能實現的基礎。接著AOP的作用域是我們要思考的。最方便直觀的當然是註解。所以我們要自定義一個註解。作用於需要記錄日誌的方法上。然後,問題又來了,不通的函式,可能介面引數並不一致

函式引數的3個點表示什麼

轉載於網友的一片文章,寫的很好!          標準庫提供的一些引數的數目可以有變化的函式。例如我們很熟悉的printf,它需要有一個格式串,還應根據需要為它提供任意多個“其他引數”。這種函式被稱作“具有變長度引數表的函式”,或簡稱為“變引數

np.random.random()函式 引數用法以及numpy.random系列函式大全

原文作者:aircraft 原文連結:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函式引數 np.random.random((1000, 20)) 上面這個就代表一千個浮點數,從0-20中隨機。 2.num

SpringBoot傳送郵件(附件以及附件)

1.QQ郵箱 首先登入QQ郵箱>>>登入成功後找到設定>>>然後找到郵箱設定>>>點選賬戶>>>找到POP3|SMTP服務>>>點選開啟(開啟需要驗證,驗證成功後會有一串授

函式引數使用const

轉自:http://blog.csdn.net/mathe/article/details/1271519 在函式的引數中使用const,可以讓編譯器知道在函式呼叫過程中,對於某個引數不會修改資料,從而可以提供給編譯器更多的優化機會。 比如標準函式 char *strcpy(char *

關於C/C++main函式引數argc和argv的解釋

    相信大家在剛開始看OpenCV的C/C++程式碼時,會有這樣的疑惑:為什麼有些程式碼中main函式的引數中有argc和argv這樣的引數呢??今天就給大家詳細講解一下這兩個引數的含義和用法。      我們經常見到的兩種形式如下: 1. in