[英]PySide for Python 2.7.2 ImportError DLL load failed on Win32
[英]Python 2.7.2 Win32 # Loop Through List, Buffer Part Of List, Call Function Multiple Times, SAME Return
我已經編寫了一些小的Python腳本,該腳本多次調用一個函數。 該函數應始終返回其他值,因為該緩沖區始終是唯一的(由於.pop(0)
)。 但是回報總是一樣的。 如果我在循環外部兩次調用函數result1 = x(buffer1)
和result2 = x(buffer2)
,則結果是唯一的。 但是,一旦我嘗試像偽代碼中那樣調用函數,結果總是相同的。 似乎Python僅執行一次該函數,然后打印其結果。 我已經在PHP
和VB.net
實現了此代碼,它可以正常工作。 這似乎是特定於Python的事情。 有人可以解釋一下。 :/
偽代碼
function x()
list = []
buffer = []
for l in list:
buffer.append(l)
if len(buffer) == y:
return = x(buffer)
buffer.pop(0)
Python代碼
ema_length = {66:0,74:0,89:0}
def ema(length):
relevant = len(length)
multiplier = 2 / (relevant + 1)
sum_vector = 0
for vector in length:
sum_vector += vector
current_vector = vector
sma = sum_vector / relevant
if ema_length [relevant] == 0:
ema_length [relevant] = sma
else:
ema_length [relevant] = (current_vector - ema_length [relevant]) * multiplier + ema_length [relevant]
return ema_length [relevant]
buffer = []
for d in data:
buffer.append(d)
if len(buffer) == 89:
ema66 = ema(buffer [89 - 66:89]) # should be unique
ema74 = ema(buffer [89 - 74:89]) # should be unique
ema89 = ema(buffer [89 - 89:89]) # should be unique
ema_overall = ema66 - ema74 - ema89
buffer.pop(0)
您正在將緩沖區傳遞給該函數,但沒有使用它。 :-
def x(old_buffer):
list = []
buffer = old_buffer
for l in list:
buffer.append(l)
if len(buffer) == y:
return = x(buffer)
buffer.pop(0)
我們使用def
not function
定義function
...
順便說一句,使用此-> return = x(buffer)
返回方式的目的是什么。 ?? 那是什么=
在兩者之間做?
另外,在使用它之前,我看不到任何添加到list
內容。.您是否將任何list
粘貼到該function
? 否則,您也會在每個電話上重新創建該文件。
我認為這是問題所在:
def ema(length):
# ...
for vector in length:
sum_vector += vector
current_vector = vector
sma = sum_vector / relevant
if ema_length [relevant] == 0:
ema_length [relevant] = sma
else:
ema_length [relevant] = (current_vector - ema_length [relevant]) * multiplier + ema_length [relevant]
return ema_length [relevant]
函數ema
從緩沖區中獲取值列表。 最后一個元素總是相同的(就像您總是使用buffer[89 - X:89]
調用它一樣)。 現在,您遍歷元素,對其求和,並將current_vector
設置為當前元素。 循環結束后, current_vector
始終設置為最后一個,即buffer[89]
。 然后,使用current_vector
設置返回值。 因此,問題在於您要盡早退出循環。
multiplier = 2 / (relevant + 1) # floats are rounded! => * with 0 => same result
multiplier = float(2) / float(relevant + 1) # unique values! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.