python的函數參數傳遞是"引用傳遞(地址傳遞)"。
共青城網站建設公司創新互聯建站,共青城網站設計制作,有大型網站制作公司豐富經驗。已為共青城成百上千提供企業網站建設服務。企業網站搭建\外貿網站制作要多少錢,請找那個售后服務好的共青城做網站的公司定做!
python中賦值語句的過程(x = 1):先申請一段內存分配給一個整型對象來存儲數據1,然后讓變量x去指向這個對象,實際上就是指向這段內存(這里有點和C語言中的指針類似)。
在Python中,會為每個層次生成一個符號表,里層能調用外層中的變量,而外層不能調用里層中的變量,并且當外層和里層有同名變量時,外層變量會被里層變量屏蔽掉。函數? 調用 ?會為函數局部變量生成一個新的符號表。
局部變量:作用于該函數內部,一旦函數執行完成,該變量就被回收。
全局變量:它是在函數外部定義的,作用域是整個文件。全局變量可以直接在函數里面應用,但是如果要在函數內部改變全局變量,必須使用global關鍵字進行聲明。
注意 :默認值在函數? 定義 ?作用域被解析
在定義函數時,就已經執行力它的局部變量
python中不可變類型是共享內存地址的:把相同的兩個不可變類型數據賦給兩個不同變量a,b,a,b在內存中的地址是一樣的。
對于可變參數默認是引用傳值, 但是不能去修改它的指向, 一旦修改就是按值傳遞.
#?coding=utf-8
def?f(a):
a?=?[0]
print(a)
if?__name__?==?'__main__':
a?=?[1,?2,?3]
f(a)
print(a)
上面的代碼對a重新賦值, 試圖改變a的指向, 那么這時的a就是一個新的局部變量, 而非全局變量a
像a[0] = 100, a.append(0)的操作不會觸發上述規則, 和你的輸出一樣
標準形式是 func(*args, **kwargs)
args及kwargs是Python函數接受的可變參數
*args表示任何多個無名參數,它是一個tuple
**kwargs表示關鍵字參數,它是一個dict
示例代碼:
def?foo(*args,**kwargs):
print?'args=',args
print?'kwargs=',kwargs
print?'**********************'
if?__name__=='__main__':
foo(1,2,3)
foo(a=1,b=2,c=3)
foo(1,2,3,a=1,b=2,c=3)
foo(1,'b','c',a=1,b='b',c='c')
運行結果:
args=?(1,?2,?3)
kwargs=?{}
**********************
args=?()
kwargs=?{'a':?1,?'c':?3,?'b':?2}
**********************
args=?(1,?2,?3)
kwargs=?{'a':?1,?'c':?3,?'b':?2}
**********************
args=?(1,?'b',?'c')
kwargs=?{'a':?1,?'c':?'c',?'b':?'b'}
**********************
上一期我們學習參數傳遞怎么傳遞,也了解了參數的幾種類型。
首先,我們再來回顧一下,形參和實參:
形參是在定義函數時定義的,放在函數名后面的圓括號里,可為空
實參是調用函數時為形參傳入具體的參數值
簡單總結一下,誰調用函數,誰就負責傳入參數。
好吶,本期我們來詳細學習函數幾種參數類型,大綱如下:
python函數的參數名是無意義的,Python允許在調用函數時通過通過名字來傳入參數值。
位置參數:按照形參位置傳入的參數
調用函數時,實參默認按位置順序傳遞的。同時實參個數也要和形參匹配
舉一個小栗子
如果實參的個數與形參不匹配時,調用函數運行就會報錯
Python中,形參與調用函數緊密聯系在一起的。
關鍵字參數:調用函數時,使形參名稱來傳遞參數,形式為“形參名=實參”
關鍵字參數,又叫命名參數,傳遞時無需考慮參數位置和順序
舉一個小栗子
默認參數:定義函數時,我們可以為形參提前設置具體的值。
在定義函數時,默認參數要放到位置等其他參數后面
在調用函數時,默認參數是可選的。如果傳入新值,則會覆蓋默認值
舉一個小栗子
注意,默認值不能位于位置參數前面,否則程序會報錯誤
不定長參數又名可變參數。
不定長參數指的是可變數量的參數,分兩種情況:
如果不定長參數后面,可以新增參數嗎?
我們通過例子來看,會發生什么?
運行上面的程序,Python解釋器會報錯
原因是,形參a已經是不定長參數,我們調用的test(2,3,4)傳入的三個實參,系統自動把它們屬于形參a的值,形參b 和形參c就等于沒有值傳入,這時候系統就認為,調用函數的對象,參數沒有傳夠。
為了解決這一報錯,python引入了 強制命名參數
規定,調用不定參數后面有跟位置參數的函數時,傳入給位置參數時,必須要強制命名參進行傳參。
逆向參數收集針對的對象傳入函數的實參
調用函數時,如果實參是元組,列表或者字典,通過在實參前面加入星號,可以自動把元素進行隔開,然后再轉入給函數進行處理
舉一個小栗子
本期,我們詳細學習了參數幾種類型,為后面我們學習函數,打好基礎。
實踐是檢驗真理的過程,大家多動手練習練習,會有不一樣的奇妙旅程~
好吶,以上是本期內容,歡迎大佬們評論區指正~
函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發生時進行通信的方法問題。基本的參數傳遞機制有兩
種:值傳遞和引用傳遞。
推薦:Python教程
值傳遞(passl-by-value)過程中,被調函數的形式參數作為被調函數的局部變量處理,即在堆棧中開辟了內存空間以存放由主調函數放
進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變量進行,不會影響主調函
數的實參變量的值。
引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變量在堆棧中開辟了內存空間,但是這時存放的是由主調函
數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調函數中的實參變量。正
因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。
更多技術請關注Python視頻教程。
有
b.傳參方式
i:位置傳參
就是在不知名傳參參數名的情況下直接利用參數的索引來進行傳參,如上個栗子
ii:關鍵字傳參
與位置傳參相對,直接利用參數名進行傳參,如下:
分享文章:python函數傳參數 python函數傳參數組
分享URL:http://vcdvsql.cn/article34/hejese.html
成都網站建設公司_創新互聯,為您提供外貿建站、建站公司、品牌網站設計、用戶體驗、網站改版、虛擬主機
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯