python可變參數函數二階導數公式_Python中函數的參數定義和可變參數

剛學用Python的時候,特別是看一些庫的源碼時,經常會看到func(*args, **kwargs)這樣的函數定義,這個*和**讓人有點費解。其實只要把函數參數定義搞清楚了,就不難理解了。

先說說函數定義,我們都知道,下面的代碼定義了一個函數funcA

def funcA():

pass

顯然,函數funcA沒有參數(同時啥也不干:D)。

下面這個函數funcB就有兩個參數了,

def funcB(a, b):

print a

print b

調用的時候,我們需要使用函數名,加上圓括號擴起來的參數列表,比如 funcB(100, 99),執行結果是:

100

99

很明顯,參數的順序和個數要和函數定義中一致,如果執行funcB(100),Python會報錯的:

TypeError: funcB() takes exactly 2 arguments (1 given)

我們可以在函數定義中使用參數默認值,比如

def funcC(a, b=0):

print a

print b

在函數funcC的定義中,參數b有默認值,是一個可選參數,如果我們調用funcC(100),b會自動賦值為0。

OK,目前為止,我們要定義一個函數的時候,必須要預先定義這個函數需要多少個參數(或者說可以接受多少個參數)。一般情況下這是沒問題的,但是也有在定義函數的時候,不能知道參數個數的情況(想一想C語言里的printf函數),在Python里,帶*的參數就是用來接受可變數量參數的。看一個例子

def funcD(a, b, *c):

print a

print b

print "length of c is: %d " % len(c)

print c

調用funcD(1, 2, 3, 4, 5, 6)結果是

1

2

length of c is: 4

(3, 4, 5, 6)

我們看到,前面兩個參數被a、b接受了,剩下的4個參數,全部被c接受了,c在這里是一個tuple。我們在調用funcD的時候,至少要傳遞2個參數,2個以上的參數,都放到c里了,如果只有兩個參數,那么c就是一個empty tuple。

好了,一顆星我們弄清楚了,下面輪到兩顆星。

上面的例子里,調用函數的時候,傳遞的參數都是根據位置來跟函數定義里的參數表匹配的,比如funcB(100, 99)和funcB(99, 100)的執行結果是不一樣的。在Python里,還支持一種用關鍵字參數(keyword argument)調用函數的辦法,也就是在調用函數的時候,明確指定參數值付給那個形參。比如還是上面的funcB(a, b),我們通過這兩種方式調用

funcB(a=100, b=99)

funcB(b=99, a=100)

結果跟funcB(100, 99)都是一樣的,因為我們在使用關鍵字參數調用的時候,指定了把100賦值給a,99賦值給b。也就是說,關鍵字參數可以讓我們在調用函數的時候打亂參數傳遞的順序!

另外,在函數調用中,可以混合使用基于位置匹配的參數和關鍵字參數,前題是先給出固定位置的參數,比如

def funcE(a, b, c):

print a

print b

print c

調用funcE(100, 99, 98)和調用funcE(100, c=98, b=99)的結果是一樣的。

好了,經過以上鋪墊,兩顆星總算可以出場了:

如果一個函數定義中的最后一個形參有 ** (雙星號)前綴,所有正常形參之外的其他的關鍵字參數都將被放置在一個字典中傳遞給函數,比如:

def funcF(a, **b):

print a

for x in b:

print x + ": " + str(b[x])

調用funcF(100, c='你好', b=200),執行結果

100

c: 你好

b: 200

大家可以看到,b是一個dict對象實例,它接受了關鍵字參數b和c。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539039.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539039.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539039.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows找不到文件gpedit.msc_此電腦右鍵管理提示windows找不到文件的解決方法

也許當你右鍵點擊此電腦管理時,也許會出現Windows找不到文件的提示,下面提供一些解決方法:1、首先按下“Windows”R組合鍵打開運行,在彈出的“運行“對話框中輸入”compmgmt.msc“,點擊”確定“;2、如果此時…

java序列化流_java 序列化流與反序列化流

一 對象序列化流ObjectOutputStreamObjectOutputStream 將Java對象的基本數據類型和圖形寫入OutputStream。可以使用ObjectInputStream讀取(重構)對象。通過在流中使用文件可以實現對象的持久存儲。注意:只能將支持 java.io.Serializable 接口的對象寫入流中用于從流…

【spring boot】注解@ApiParam @PathVariable @RequestParam三者區別

1.ApiParam,就是用于swagger提供開發者文檔,文檔中生成的注釋內容。 ApiOperation( value "編輯公告", notes "編輯公告", httpMethod "POST" )RequestMapping( value "/edit", method RequestMethod.POST…

Zookeeper Watch監聽

概述 ZooKeeper -server host:port cmd args stat path [watch] ls path [watch] ls2 path [watch] get path [watch] watch監聽有不同的類型,有監聽狀態的stat ,內容的get,目錄結構的ls。 命令使用一次,只監聽…

win10文件顯示后綴名_win10系統,如何去除“此電腦” 里的6個多余文件夾

Windows系統從XP到win7,再到進化到如今的win10,在系統性能和使用便捷性方面,確實改進了很多,但是,金無赤足,沒有完美的東西,總是有一些小細節讓我們感覺不舒服,如如鯁在喉。比如我們下面看到的這…

ubuntu sun-java6-jre_在 Ubuntu Lucid 下請回 Sun Java6 Jre, 趕走 OpenJDK

Ubuntu Lucid 將 sun-java6-jre 系列包移出了源,java軟件用 openjdk系列包提供支持。然而在某些軟件(比如FreeRapid)的使用中,openjdk還是喜歡出一些莫名其妙的錯誤(比如棧溢出),因此考慮請回sun-java6-jre。具體方法很簡單,首先添…

數字化工廠的五大系統_如何搭建以MES系統為核心的數字化工廠?

MES強調車間級的過程集成、控制和監控,以及合理地配置和組織所有資源。滿足車間信息化需要,提高車間對隨機事件的快速響應和處理能力,有力地促進企業信息化進程向車間層拓展。通過構建以“精益生產、智能制造”為特點的車間管理系統&#xff…

zookeeper數據結構及Znode類型

結構 1、層次化的目錄結構,命名符合常規文件系統規范 2、每個節點在zookeeper中叫做znode,并且其有一個唯一的路徑標識。 3、節點Znode可以包含數據和子節點(但是EPHEMERAL類型的節點不能有子節點)。 4、客戶端應用可以在節點上設置監視器…

Windows10下手工強制清理刪掉安裝版的JRE8導致java.exe無法運行的解決辦法

error:could not open xxxx.jvm.cfg 參考:https://blog.csdn.net/u010102493/article/details/18425267 1.搜索并刪掉C:\Windows\System32下:java*.exe 仍然不行: 在WIN10的開始菜單搜索java C:\ProgramData\Oracle\Java下還有一些東西。 確認…

設計企業網站大綱_企業網站設計布局

網站制作一年350元,五站合一,快速建站 ,www.sxjcwzjs.com,只需進入網站右上角注冊快速建站即可(需要電腦登錄注冊),需要聯系我吧!電話:13752214574,微信號:m1078582894企業網站布局很…

python畫子圖_Python使用add_subplot與subplot畫子圖操作示例

本文實例講述了Python使用add_subplot與subplot畫子圖操作。分享給大家供大家參考,具體如下:子圖:就是在一張figure里面生成多張子圖。Matplotlib對象簡介FigureCanvas 畫布Figure 圖Axes 坐標軸(實際畫圖的地方)注意&#…

vue導入靜態js_如何在vue js中加載靜態圖像

我有一個組件,它接受一個prop字符串,即一個url。它可以是遠程圖片,也可以是資產文件夾中的本地靜態資產。目錄結構:-assets/- logo.png-app.vue-components/-ImageTest.vue圖像測試.vue{{imagelink}}export default {name: "ImageTest",props:{imagelink: String,},c…

Zookeeper JavaApi 增刪改查

官網API http://zookeeper.apache.org/doc/r3.4.6/api/index.html JAR包 \zookeeper-3.3.6\lib\ jline-0.9.94.jar \zookeeper-3.3.6\lib\ log4j-1.2.15.jar \zookeeper-3.3.6\ zookeeper-3.3.6.jar Demo代碼 注意代碼中的注解 package hello.zookeeper.api;import java.uti…

搭建linux測試環境有什么用_談談現在搭建網站用什么程序好,選擇對的程序是很重要的開頭...

目前可以選擇的網站程序還是蠻多的,開源的系統也很多,也有很多精品。更多時候,選擇網站程序要結合網站的定位。說說dedecms,就是我們都知道的織夢程序,功能很齊全,作為一個簡單的資訊門戶網站,算…

python練習筆記——利用信號signal處理僵尸進程

1 signal處理僵尸進程的基于語法 利用信號signal處理僵尸進程的方法:signal(SIGCHLD,SIG_IGN),該方法也是第三種處理僵尸進程的方法。 SIGCHLD:子進程狀態改變后產生此信號,父進程需要調用一個wait函數以確定發生了什么。 1&#…

Zookeeper應用:服務端上下線

需求 客戶端感知服務器的上下線。 示意圖 步驟 服務端: 1、所有機子向Zookeeper注冊,注冊znode為臨時的。 2、有機子下線,連接斷開后被Zookeeper自動刪除,觸發監聽事件。 3、有機子上線,觸發監聽事件。 客戶端&am…

哈希表查找失敗的平均查找長度_你還應該知道的哈希沖突解決策略

本文首發于 vivo互聯網技術 微信公眾號 鏈接:https://mp.weixin.qq.com/s/5vxYoeARG1nC7Z0xTYXELA作者:Xuegui Chen哈希是一種通過對數據進行壓縮, 從而提高效率的一種解決方法,但由于哈希函數有限,數據增大等緣故,哈希…

hive 創建訪問用戶_hive創建角色并賦權

1 角色管理命令1.1 創建角色創建一個新角色,需要 admin 用戶執行CREATE ROLE role_name;1.2 刪除角色刪除一個角色,需要 admin 用戶執行DROP ROLE role_name;1.3 顯示當前角色顯示用戶當前角色列表SHOW CURRENT ROLES;1.4 設定角色如果指定了role_name&a…

python 正則替換_5分鐘速覽Python正則表達式常用函數!五分鐘就掌握它!

導讀:正則表達式是處理字符串類型的"核武器",不僅速度快,而且功能強大。本文不過多展開正則表達式相關語法,僅簡要介紹python中正則表達式常用函數及其使用方法,以作快速查詢瀏覽。01 Re概覽Re模塊是python的…

MFC鼠標OnMouseHover使用

ON_WM_MOUSEHOVER消息要生效,要配合ON_WM_MOUSEMOVE一起使用.代碼如下:void CYuButton::OnMouseMove(UINT nFlags, CPoint point) {// TODO: 在此添加消息處理程序代碼和/或調用默認值TRACKMOUSEEVENT tme { 0 };tme.cbSize sizeof(TRACKMOUSEEVENT);tme.dwFlags TME_HOVER…