函數(shù)參數(shù)如何傳遞
key-value方式傳遞參數(shù):
下面是非常常見的傳遞方式,參數(shù)名寫直白,寫死了:
def show_info(name, title): print("姓名為:",name) print("職稱為:",title)
我們在使用的時候可以用以下的方式:
- show_info('雷學(xué)委', '大學(xué)生Python學(xué)習(xí)社區(qū)長')
- show_info(name='雷學(xué)委', title='持續(xù)學(xué)習(xí)協(xié)會會長')
可以寫成這樣,使用兩個*,這樣非常靈活,但是缺點(diǎn)也是明顯的(結(jié)構(gòu)靈活有時候需要判斷是否漏傳,直接取容易出錯)
- 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ū)長')
下面是效果,看起來一樣的。
動態(tài)長度參數(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ū)長')
- show_info(name='雷學(xué)委', title='持續(xù)學(xué)習(xí)協(xié)會會長')
- def show_info_v2(name, title, *info):
- print("姓名為:", name)
- print("職稱為:", title)
- print("其他評價:", info)
- show_info_v2('雷學(xué)委', '大學(xué)生Python學(xué)習(xí)社區(qū)區(qū)長', "熱愛技術(shù)", "熱愛生活")
運(yùn)行效果如下:
參數(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 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))
這里兩個compute函數(shù),一個修改參數(shù)引用地址,一個并沒有修改參數(shù)引用而是修改了引用內(nèi)存空間的關(guān)聯(lián)地址(一個變量)的值。
可以說它們都成功了。但是外面的_list 的地址是任何時候都不會被修改的,除非賦值新地址(也就是在調(diào)用v2之前重新復(fù)制那次)
下面是運(yùn)行結(jié)果:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注服務(wù)器之家的更多內(nèi)容!
原文鏈接:https://blog.csdn.net/geeklevin/article/details/121368864