Python函數(shù)值傳遞引用傳遞及形式參數(shù)和實(shí)際參數(shù)的區(qū)別
通常情況下,定義函數(shù)時(shí)都會(huì)選擇有參數(shù)的函數(shù)形式,函數(shù)參數(shù)的作用是傳遞數(shù)據(jù)給函數(shù),令其對(duì)接收的數(shù)據(jù)做具體的操作處理。
在使用函數(shù)時(shí),經(jīng)常會(huì)用到形式參數(shù)(簡稱“形參”)和實(shí)際參數(shù)(簡稱“實(shí)參”),二者都叫參數(shù),之間的區(qū)別是:
- 形式參數(shù):在定義函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)就是形式參數(shù),例如:
#定義函數(shù)時(shí),這里的函數(shù)參數(shù) obj 就是形式參數(shù) def demo(obj) print(obj)
- 實(shí)際參數(shù):在調(diào)用函數(shù)時(shí),函數(shù)名后面括號(hào)中的參數(shù)稱為實(shí)際參數(shù),也就是函數(shù)的調(diào)用者給函數(shù)的參數(shù)。例如:
a = "python" #調(diào)用已經(jīng)定義好的 demo 函數(shù),此時(shí)傳入的函數(shù)參數(shù) a 就是實(shí)際參數(shù) demo(a)
實(shí)參和形參的區(qū)別,就如同劇本選主角,劇本中的角色相當(dāng)于形參,而演角色的演員就相當(dāng)于實(shí)參。
明白了什么是形參和實(shí)參后,再來想一個(gè)問題,那就是實(shí)參是如何傳遞給形參的呢?
Python 中,根據(jù)實(shí)際參數(shù)的類型不同,函數(shù)參數(shù)的傳遞方式可分為 2 種,分別為值傳遞和引用(地址)傳遞:
- 值傳遞:適用于實(shí)參類型為不可變類型(字符串、數(shù)字、元組);
- 引用(地址)傳遞:適用于實(shí)參類型為可變類型(列表,字典);
值傳遞和引用傳遞的區(qū)別是,函數(shù)參數(shù)進(jìn)行值傳遞后,若形參的值發(fā)生改變,不會(huì)影響實(shí)參的值;而函數(shù)參數(shù)繼續(xù)引用傳遞后,改變形參的值,實(shí)參的值也會(huì)一同改變。
例如,定義一個(gè)名為 demo 的函數(shù),分別為傳入一個(gè)字符串類型的變量(代表值傳遞)和列表類型的變量(代表引用傳遞):
def demo(obj) : obj += obj print("形參值為:",obj) print("-------值傳遞-----") a = "python" print("a的值為:",a) demo(a) print("實(shí)參值為:",a) print("-----引用傳遞-----") a = [1,2,3] print("a的值為:",a) demo(a) print("實(shí)參值為:",a)
運(yùn)行結(jié)果為:
-------值傳遞-----
a的值為: python
形參值為: pythonpython
實(shí)參值為: python
-----引用傳遞-----
a的值為: [1, 2, 3]
形參值為: [1, 2, 3, 1, 2, 3]
實(shí)參值為: [1, 2, 3, 1, 2, 3]
分析運(yùn)行結(jié)果不難看出,在執(zhí)行值傳遞時(shí),改變形式參數(shù)的值,實(shí)際參數(shù)并不會(huì)發(fā)生改變;而在進(jìn)行引用傳遞時(shí),改變形式參數(shù)的值,實(shí)際參數(shù)也會(huì)發(fā)生同樣的改變。
到此這篇關(guān)于Python函數(shù)值傳遞引用傳遞及形式參數(shù)和實(shí)際參數(shù)的區(qū)別的文章就介紹到這了,更多相關(guān)Python函數(shù)值傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何以Winsows Service方式運(yùn)行JupyterLab
這篇文章主要介紹了如何以Winsows Service方式運(yùn)行JupyterLab的教程2020-08-08一起解密Python中的*args和**kwargs無限可能的函數(shù)參數(shù)
這篇文章主要來跟大家一起解密Python中的*args和**kwargs無限可能的函數(shù)參數(shù)使用的靈活性,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解
這篇文章主要介紹了Python數(shù)據(jù)清洗之利用pandas篩選數(shù)據(jù)詳解,Pandas是一個(gè)用于數(shù)據(jù)分析和處理的Python庫,它提供了高效的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,使得數(shù)據(jù)的清洗、轉(zhuǎn)換、分析和可視化變得更加容易和靈活,需要的朋友可以參考下2023-08-08python機(jī)器學(xué)習(xí)XGBoost梯度提升決策樹的高效且可擴(kuò)展實(shí)現(xiàn)
這篇文章主要為大家介紹了python機(jī)器學(xué)習(xí)XGBoost梯度提升決策樹的高效且可擴(kuò)展實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01python的scrapy框架之Pipeline文件的用法詳解
這篇文章主要介紹了python的scrapy框架之Pipeline文件的用法詳解,Pipeline是一個(gè)獨(dú)立的模塊,用于處理從Spider中提取的Item對(duì)象,實(shí)現(xiàn)對(duì)數(shù)據(jù)的進(jìn)一步處理、存儲(chǔ)和清洗等操作,下面將詳細(xì)介紹Scrapy框架中Pipeline的用法,需要的朋友可以參考下2023-10-10基于Python socket的端口掃描程序?qū)嵗a
這篇文章主要介紹了基于Python socket的端口掃描程序?qū)嵗a,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02分享一下Python數(shù)據(jù)分析常用的8款工具
Python是數(shù)據(jù)處理常用工具,可以處理數(shù)量級(jí)從幾K至幾T不等的數(shù)據(jù),具有較高的開發(fā)效率和可維護(hù)性,還具有較強(qiáng)的通用性和跨平臺(tái)性,這里就為大家分享幾個(gè)不錯(cuò)的數(shù)據(jù)分析工具,需要的朋友可以參考下2018-04-04Python利用Pandas進(jìn)行數(shù)據(jù)分析的方法詳解
Pandas是最流行的用于數(shù)據(jù)分析的?Python?庫。它提供高度優(yōu)化的性能。本文將利用Python進(jìn)行數(shù)據(jù)分析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-09-09Linux上使用Python統(tǒng)計(jì)每天的鍵盤輸入次數(shù)
這篇文章主要介紹了Linux上使用Python統(tǒng)計(jì)每天的鍵盤輸入次數(shù),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04