我做了一個玩具函式,我需要保存給這個函式的某些值......為了執行這個我通常將此存盤變數宣告x為全域..
但是如果我需要在同一個代碼中多次呼叫這個函式,那么x每次呼叫函式的結果顯然都是同一個全域變數。
我怎樣才能獲得這個簡單的任務?
下面是玩具示例。
import numpy as np
import pandas as pd
def _foo_append_(x_i,count):
global x
if count==0:
x = []
x.append(x_i)
return x
for i in range(0,10):
rv_1 = np.round(np.random.normal(10,5),decimals=2)
rv_2 = np.round(np.random.normal(22,3),decimals=2)
keep_1 = _foo_append_(x_i=rv_1,count=i)
keep_2 = _foo_append_(x_i=rv_2,count=i)
輸出應該是兩個陣列keep1和keep210 個元素,但是我得到了兩個 20 個元素的陣列。
如何做到這一點?謝謝
uj5u.com熱心網友回復:
使用全域/非區域變數會使不同的串列保持一致變得很困難,因為它們在同一范圍內共享相同的名稱。相反,您應該分別初始化每個陣列。
您的示例可以更簡單(和正確)撰寫為:
import numpy as np
keep_1 = [np.round(np.random.normal(10,5),decimals=2) for _ in range(10)]
keep_2 = [np.round(np.random.normal(22,3),decimals=2) for _ in range(10)]
如果您的“真實”示例更復雜并且您不能使用串列推導,或者您實際上不能將不同的變數宣告keeps為不同的命名變數,那么這里有一個使用您的示例_foo_append_(減去不必要的全域 var 內容,這只是一個簡單的呼叫append) 和一個跟蹤串列的keep_n串列:
def _foo_append_(x, x_i):
x.append(x_i)
params = [(10, 5), (22, 3)]
keeps = []
for p in params:
keeps.append([])
for _ in range(0, 10):
_foo_append_(keeps[-1], np.round(np.random.normal(*p), decimals=2))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/479032.html
上一篇:洗掉多列中的前nan行
