python中為main方法傳參問題
python為main方法傳參
執行python腳本的時候,想給main方法傳入參數的例子
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author(s): xili # @Created: 2020/6/30 import sys if __name__ == '__main__': arg1 = sys.argv[1] arg2 = sys.argv[2] print(arg1) print(arg2)
執行結果:
[root@xili]# python test1.py 1 2
1
2
python函數傳參的幾種方式
python函數的參數類型分為以下五種
- 位置參數
- 默認參數
- 可變參數(*args)
- 關鍵字參數(**args)
- 命名關鍵字參數
位置參數
調用函數時傳的實參與函數的形參位置上一一對應的參數,如下:
#!/usr/bin/python # -*- coding: utf-8 -*- def info(name,age,major): print("姓名:%s"%(name)) print("年齡:%s"%(age)) print("職業:%s"%(major)) info("zhulang",27,"IT") #實參與形參一一對應
打印結果為:
姓名:zhulang
年齡:27
職業:IT
默認參數
在定義函數的時候,給形參一個默認的值,如下:
#!/usr/bin/python # -*- coding: utf-8 -*- def info(name,major,age=25): #默認參數必須放在位置參數後面,否則出錯 print("姓名:%s"%(name)) print("年齡:%s"%(age)) print("職業:%s"%(major)) info("zhulang","IT")
打印結果為:
姓名:zhulang
年齡:25
職業:IT
註意:
1、一個參數帶參數名,另一個參數不帶參數名,其中默認參數必須帶參數名;
2、如果形參中默認參數在必須參數之前,那麼調用函數時實參中默認參數也應當在前面;如果形參中默認參數在必須參 數之後,那麼調用函數時實參中默認函數應當在後面,否則會報錯
可變參數
可變參數就是傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個,*args將所有的實參的位置參數聚合到一個元組,並將這個元組賦值給args
如下函數:
def calc(l): sum = 0 for n in l: sum += n return sum calc([1,2,3]) #參數傳入的是列表,結果為7
如果用可變參數類型傳參,可變成如下:
def calc(*nums): sum = 0 for n in nums: sum += n return sum
這樣以來,參數可以傳入任意多個,函數內部,參數接受到的是一個元組,傳入參數時,可寫成:cal(1,2,3,4),可跟多個參數,無限制寫下去,如果有一個列表瞭,想把列表元素傳進去,可寫成如下:
>>> nums = [1, 2, 3] >>> calc(*nums) 7
*nums表示把nums這個list的所有元素作為可變參數傳進去
關鍵字參數
關鍵字參數允許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝為一個dict,在傳遞參數時用等號(=)連接鍵和值
def person_info(name, age, **kw): print("name", name, "age", age, "other", kw) >>> person_info("zhulang", 12) name zhulang age 12 other{} >>> person_info("zhulang", 27, city = "Beijing") name zhulang age 27 other {'city':'Beijing'}
命名關鍵字參數
和普通關鍵字參數不同,命名關鍵字參數需要一個用來區分的分隔符*,它後面的參數被認為是命名關鍵字參數
#這裡星號分割符後面的city、job是命名關鍵字參數 person_info(name, age, *, city, job): print(name, age, city, job) >>> person_info("zhulang", 17, city = "Beijing", job = "Engineer") zhulang 17 Beijing Engineer #看來這裡不再被自動組裝為字典
總結:參數在書寫時要遵循一定的順序,即:位置參數、默認參數、變長參數、關鍵字參數、命名關鍵字參數
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Python詳解如何動態給對象增加屬性和方法
- 代碼詳解Python的函數基礎(2)
- python中protobuf和json互相轉換應用處理方法
- python3中apply函數和lambda函數的使用詳解
- python 下劃線的多種應用場景總結