亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

訪問函數內所有參數名稱和所有參數值的列表

訪問函數內所有參數名稱和所有參數值的列表

青春有我 2021-11-23 20:10:09
我正在嘗試為我希望函數采用的參數創建一個名稱列表。長度應該是32,我想要類似的東西,bs=[b0,b1,b2,...,b31]但我不想b0,b1,...手寫,所以有沒有辦法用 Python 編寫一個可以生成這樣一個列表的小程序?編輯:無論如何要使參數值不是字符串?我試圖將它們作為參數放在一個函數中,如下所示:def chiwork(a0,a1,a2,a3,bs):    ana=np.array([a0,a1,a2,a3])    betalat=[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3]    chia=sum((ana-a)**2)+sum((bs*a[betalat]-amssr)**2)    return chia該函數需要“知道”有 32 個 bs,但是當 bs 中的元素在列表中時,無法將其解包。
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

使用列表理解:

bs=['b'+str(i) for i in range(32)]


查看完整回答
反對 回復 2021-11-23
?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

我認為這可以滿足您的所有要求,充分利用Python 的函數對象數據模型:


def my_func (b1, b2, b3, a1, a2, a3):


    par_names = my_func.__code__.co_varnames[:6]    # A tuple of strings of all param names

                                                    # It's ok to hard-code 6.

    local_ns = locals()

    par_vals  = [local_ns[x] for x in par_names]    # A list of all param values


    another_func(par_vals[0], par_vals[3])

    another_func(*par_vals[0:2])                    # Unpacking first 2 params


def another_func(param1, param2):

    print ("Inside another_func, (param1, param2) are:", param1, ",", param2)


my_func(10, 20, 30, 40, 50, 60)

輸出:


Inside another_func, (param1, param2) are: 10 , 40

Inside another_func, (param1, param2) are: 10 , 20

筆記:

  1. 對于參數名稱b1,無需遵循, b2,等命名約定。

  2. 適用于任意數量的參數(不僅僅是示例中的 32 個)。

  3. 即使某些參數是 kwargs 也能工作。

  4. 如文檔所述,__code__.co_varnames將包含參數名稱,后跟局部變量名稱。因此,我們對前 6 個元素進行索引,以僅獲取參數名稱。


查看完整回答
反對 回復 2021-11-23
  • 2 回答
  • 0 關注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號