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。

推薦閱讀: