电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談Python 參數與變量

瀏覽:2日期:2022-07-20 10:34:56

形參與實參以及位置參數

什么是形參和實參

形參:即形式參數,函數定義時指定的可以接受的參數即為形參,比如定義函數時的max(a,b)函數中的a和b就是形參 實參:即實際參數,調用函數時傳遞給函數參數的實際值即為實參,比如調用上面函數用 max(1, 9)函數中的1和9就是實參;

什么是位置參數

我們定義函數max(a,b)后,在調用時,我們無需指定參數名,只需max(1,9),這個時候實參入參的的位置進行匹配,也就是在函數中,a=1,b=9。 當然,如果我們不想基于位置順序,也可以直接指定對應的參數名,比如max(b=9,a=1),這個時候調用后,不會按入參順序賦值,而是直接按指定的參數名賦值。

默認參數

編寫一個計算x的n次冪的函數,要求x、n可以作為參數傳入

def power(x, n): return x ** nprint(power(2,2))

上面的函數雖然解決了問題,但是顯然不夠完美,假設在大部分的調用里,基本都只是求x的2次冪,但是這個時候我在調用的時候依舊每次都得傳n,這就顯得有點多余。有沒有什么方法可以讓我調用的時候少些一個入參呢?

如果我們直接 print(power(2)),會發現這個時候行不通,有錯誤。

在函數入參處,使用等號賦值默認參數,

def power(x, n=2): return x ** nprint(power(2))

注意:必需要的參數在前,默認參數在后,否則會報錯

如果有多個默認參數呢?

def test(a=1, b=2, c=3): print('a=%d b=%d c=%d' % (a, b, c))test(c=2)

當有多個默認參數的時候,可以顯式指定傳入某個參數的值,在調用函數時,入參使用參數名=參數值的形式即可

如果默認參數是一個列表呢?

def test(L=[]): L.append('END') print(L)test([1, 1, 1])test([2, 2, 2])

上面的程序運行起來似乎看不出啥問題,但是,我們來看一個奇怪的現象:在調用test函數的時候不傳入任何參數,此時,輸出的結果變得有點詭異

def test(L=[]): L.append('END') print(L)test()test()

輸出結果:

[’END’][’END’, ’END’]

函數在定義的時候,默認參數的值已確定,換句話說,L指向的地址是確定,之后如果還是對其內容進行更改的話,默認參數的值也隨之改變了

注意:默認參數必須指向不可變對象

可變參數

什么是可變參數?

顧名思義就是調用函數時,傳遞參數的個數的可變的。

如果不使用可變參數,目前有哪些方式可以實現傳入不確定個數的 list、dict、set等

def sum(numbers): total = 0 for i in numbers: total += i return totalprint(sum([1, 2, 3]))

上面這種寫法,雖然可以實現不確定個數的入參,但是調用方并不清楚入參該是哪種類型,此時調用方還得看函數的具體實現方知入參要是可迭代類型,所以對調用方不友好

可變參數的基本格式

在定義函數的時候,入參前加*號,表示可變參數,如

def sum(*numbers): total = 0 for i in numbers: total += i return totalprint(sum(1, 2, 3))

可變參數,其實是將入參封裝成元組

def my_fun(*numbers): print(type(numbers)) total = 0 for i in numbers: total += i return total print(my_fun(1, 2, 3))輸出結果:<class ’tuple’>6

命名關鍵字參數

我們先來看看之前最普通的入參方式--位置參數

def person(name, age): print(name,age)person('wiggin',29)

這種方式無需指定入參的名字,只要位置相對應,就可以。

與位置參數相對的另一種方式,是每次調用的時候,都必需指定參數的名字,也就是命名關鍵字

什么是命名關鍵字參數

限制調用者不能按位置傳遞,需要放在形參的后面,并在前面使用星號*(獨占一個參數位)與普通形參分隔

為什么要有命名關鍵字參數

為了限制后面幾個參數只能按關鍵字傳遞,這往往是因為后面幾個形參名具有十分明顯的含義,顯式寫出有利于可讀性;或者后面幾個形參隨著版本更迭很可能發生變化,強制關鍵字形式有利于保證跨版本兼容性 與位置參數相對的另一種方式,是每次調用的時候,都必需指定參數的名字,也就是命名關鍵字

命名關鍵字用法

def person(name, age, *, pet): print(name,age,pet)person('wiggin',29,pet='tomcat')

命名關鍵字使用*做分隔,*之前的參數,基于位置參數,*后面的參數,在調用的時候必需指定其參數名

一旦使用命名關機字之后,如果調用時,沒指定參數名,會報相應的錯誤

def person(name, age, *, pet): print(name,age,pet)person('wiggin',29,'tomcat')TypeError: person() takes 2 positional arguments but 3 were given

TypeError: person() takes 2 positional arguments but 3 were given

*后面的參數,同樣也可以使用默認參數進行設置

def person(name, age, *, pet='cat'): print(name,age,pet)person('wiggin',29)

注意:如果函數定義中已經有了一個可變參數,后面跟著的命名關鍵字參數就不再需要一個特殊分隔符

關鍵字參數

什么是關鍵字參數?

關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict。

def person(name, age, **kw): print(’name:’, name, ’age:’, age, ’other:’, kw)person('wiggin',29,city='廣州',pet='cat')

也可以使用下面的方式傳參

def person(name, age, **kw): print(’name:’, name, ’age:’, age, ’other:’, kw)other_info = {'pet': 'cat'}person('wiggin',29,city='廣州',**other_info)

other_info表示把other_info這個dict的所有key-value用關鍵字參數傳入到函數的**kw參數,kw將獲得一個dict,注意kw獲得的dict是other_info的一份拷貝,對kw的改動不會影響到函數外的other_info。

混合使用參數

本章之前所學習的各種類型的參數,可以在定義函數時混合使用,但是,有一個核心注意的點:混合使用時,參數定義的順序必須是:必選參數、默認參數、可變參數、命名關鍵字參數和關鍵字參數。

以上就是淺談Python 參數與變量的詳細內容,更多關于Python 參數與變量的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 金属检测机_金属分离器_检针验针机_食品药品金属检探测仪器-广东善安科技 | (中山|佛山|江门)环氧地坪漆,停车场地板漆,车库地板漆,聚氨酯地板漆-中山永旺地坪漆厂家 | IWIS链条代理-ALPS耦合透镜-硅烷预处理剂-上海顶楚电子有限公司 lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 真空干燥烘箱_鼓风干燥箱 _高低温恒温恒湿试验箱_光照二氧化碳恒温培养箱-上海航佩仪器 | 筛分机|振动筛分机|气流筛分机|筛分机厂家-新乡市大汉振动机械有限公司 | 温州富欧金属封头-不锈钢封头厂家 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 无菌检查集菌仪,微生物限度仪器-苏州长留仪器百科 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 广州昊至泉水上乐园设备有限公司| 冷却塔改造厂家_不锈钢冷却塔_玻璃钢冷却塔改造维修-广东特菱节能空调设备有限公司 | 外观设计_设备外观设计_外观设计公司_产品外观设计_机械设备外观设计_东莞工业设计公司-意品深蓝 | 电杆荷载挠度测试仪-电杆荷载位移-管桩测试仪-北京绿野创能机电设备有限公司 | 自清洗过滤器,浅层砂过滤器,叠片过滤器厂家-新乡市宇清净化 | 净化车间装修_合肥厂房无尘室设计_合肥工厂洁净工程装修公司-安徽盛世和居装饰 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | 亚克力制品定制,上海嘉定有机玻璃加工制作生产厂家—官网 | 哲力实业_专注汽车涂料汽车漆研发生产_汽车漆|修补油漆品牌厂家 长沙一级消防工程公司_智能化弱电_机电安装_亮化工程专业施工承包_湖南公共安全工程有限公司 | 北京翻译公司_同传翻译_字幕翻译_合同翻译_英语陪同翻译_影视翻译_翻译盖章-译铭信息 | 破碎机_上海破碎机_破碎机设备_破碎机厂家-上海山卓重工机械有限公司 | 河南凯邦机械制造有限公司| 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 热风机_工业热风机生产厂家上海冠顶公司提供专业热风机图片价格实惠 | 全自动包装秤_全自动上袋机_全自动套袋机_高位码垛机_全自动包装码垛系统生产线-三维汉界机器(山东)股份有限公司 | 滑石粉,滑石粉厂家,超细滑石粉-莱州圣凯滑石有限公司 | 西安微信朋友圈广告投放_微信朋友圈推广_西安度娘网络科技有限公司 | 金属回收_废铜废铁回收_边角料回收_废不锈钢回收_废旧电缆线回收-广东益夫金属回收公司 | 彭世修脚_修脚加盟_彭世修脚加盟_彭世足疗加盟_足疗加盟连锁_彭世修脚技术培训_彭世足疗 | 驾驶人在线_专业学车门户网站 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 玻璃钢型材_拉挤模具_玻璃钢拉挤设备——滑县康百思 | 洗砂机械-球磨制砂机-洗沙制砂机械设备_青州冠诚重工机械有限公司 | 南京技嘉环保科技有限公司-杀菌除臭剂|污水|垃圾|厕所|橡胶厂|化工厂|铸造厂除臭剂 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 标策网-专注公司商业知识服务、助力企业发展| 上海乾拓贸易有限公司-日本SMC电磁阀_德国FESTO电磁阀_德国FESTO气缸 | 扬尘监测_扬尘监测系统_带证扬尘监测设备 - 郑州港迪科技有限公司 |