淺談Python中的函數(shù)傳遞問題
函數(shù)參數(shù)如何傳遞
key-value方式傳遞參數(shù):
下面是非常常見的傳遞方式,參數(shù)名寫直白,寫死了:
def show_info(name, title): print("姓名為:",name) print("職稱為:",title)
我們?cè)谑褂玫臅r(shí)候可以用以下的方式:
show_info('雷學(xué)委', '大學(xué)生Python學(xué)習(xí)社區(qū)長(zhǎng)') show_info(name='雷學(xué)委', title='持續(xù)學(xué)習(xí)協(xié)會(huì)會(huì)長(zhǎng)')
可以寫成這樣,使用兩個(gè)*,這樣非常靈活,但是缺點(diǎn)也是明顯的(結(jié)構(gòu)靈活有時(shí)候需要判斷是否漏傳,直接取容易出錯(cuò))
def show_info_v2(**kv_dict): print("姓名為:", kv_dict['name']) print("職稱為:", kv_dict['title']) show_info_v2(name='雷學(xué)委', title='大學(xué)生Python學(xué)習(xí)社區(qū)長(zhǎng)')
下面是效果,看起來一樣的。
動(dòng)態(tài)長(zhǎng)度參數(shù)傳遞
通常使用*加參數(shù)名。
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/24 11:39 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷學(xué)委 # @XueWeiTag: CodingDemo # @File : func_call.py # @Project : hello def show_info(name, title): print("姓名為:", name) print("職稱為:", title) show_info('雷學(xué)委', '大學(xué)生Python學(xué)習(xí)社區(qū)區(qū)長(zhǎng)') show_info(name='雷學(xué)委', title='持續(xù)學(xué)習(xí)協(xié)會(huì)會(huì)長(zhǎng)') def show_info_v2(name, title, *info): print("姓名為:", name) print("職稱為:", title) print("其他評(píng)價(jià):", info) show_info_v2('雷學(xué)委', '大學(xué)生Python學(xué)習(xí)社區(qū)區(qū)長(zhǎng)', "熱愛技術(shù)", "熱愛生活")
運(yùn)行效果如下:
參數(shù)是否會(huì)被函數(shù)攥改?
我們看看下面的程序即可:
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2021/10/24 11:39 下午 # @Author : LeiXueWei # @CSDN/Juejin/Wechat: 雷學(xué)委 # @XueWeiTag: CodingDemo # @File : func_call.py # @Project : hello def compute_v1(list): sum = 0 for x in list: sum += x list = list + [sum] print("新地址:", id(list)) return sum def compute_v2(list): sum = 0 for x in list: sum += x list[0] = list[0] * 100 return sum _list = [1, 2, 3, 4, 5] print("調(diào)用計(jì)算函數(shù)v1之前:", _list) print("調(diào)用計(jì)算函數(shù)v1之前內(nèi)存地址:", id(_list)) print(compute_v1(_list)) print("調(diào)用計(jì)算函數(shù)v1之后:", _list) print("調(diào)用計(jì)算函數(shù)v1之后內(nèi)存地址:", id(_list)) _list = [1, 2, 3, 4, 5] print("調(diào)用計(jì)算函數(shù)v2之前:", _list) print("調(diào)用計(jì)算函數(shù)v2之前內(nèi)存地址:", id(_list)) print(compute_v2(_list)) print("調(diào)用計(jì)算函數(shù)v2之后:", _list) print("調(diào)用計(jì)算函數(shù)v2之后內(nèi)存地址:", id(_list))
這里兩個(gè)compute函數(shù),一個(gè)修改參數(shù)引用地址,一個(gè)并沒有修改參數(shù)引用而是修改了引用內(nèi)存空間的關(guān)聯(lián)地址(一個(gè)變量)的值。
可以說它們都成功了。但是外面的_list 的地址是任何時(shí)候都不會(huì)被修改的,除非賦值新地址(也就是在調(diào)用v2之前重新復(fù)制那次)
下面是運(yùn)行結(jié)果:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
相關(guān)文章
Python正則獲取、過濾或者替換HTML標(biāo)簽的方法
這篇文章主要介紹了Python通過正則表達(dá)式獲取、過濾或者替換HTML標(biāo)簽的方法,感興趣的小伙伴們可以參考一下2016-01-01Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,無序鏈表詳解
這篇文章主要為大家詳細(xì)介紹了Python數(shù)據(jù)結(jié)構(gòu)與算法之鏈表,使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03python?判斷字符串當(dāng)中是否包含字符(str.contain)
這篇文章主要介紹了python?判斷字符串當(dāng)中是否包含字符(str.contain),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06Python利用yarl實(shí)現(xiàn)輕松操作url
在諸如網(wǎng)絡(luò)爬蟲、web應(yīng)用開發(fā)等場(chǎng)景中,我們需要利用Python完成大量的url解析、生成等操作。本文為大家介紹了Pythonyarl操作url的方法,需要的可以了解一下2022-10-10簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼
Python編程是一種通用的編程語言,開源、靈活、功能強(qiáng)大且易于使用,python最重要的特性之一是其用于數(shù)據(jù)處理和分析任務(wù)的豐富實(shí)用程序和庫(kù)集,這篇文章主要給大家介紹了一些簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼,需要的朋友可以參考下2021-07-07