Наряду с принятым ответом, который правильно объяснил проблему, в понимании вашего списка, если вы используете python-2.x, используйте xrange()
, который возвращает более эффективный генератор (range()
в python 3 выполняет ту же работу ) _
вместо переменной throw n
:
[[1]*4 for _ in xrange(3)] # and in python3 [[1]*4 for _ in range(3)]
Кроме того, в качестве более Pythonic способа вы можете использовать itertools.repeat()
для создания объекта итератора повторяющихся элементов:
>>> a=list(repeat(1,4))
[1, 1, 1, 1]
>>> a[0]=5
>>> a
[5, 1, 1, 1]
PS Используя numpy, если вы хотите создать только массив единиц или нулей, вы можете использовать np.ones
и np.zeros
и / или для использования других чисел np.repeat()
:
In [1]: import numpy as np
In [2]:
In [2]: np.ones(4)
Out[2]: array([ 1., 1., 1., 1.])
In [3]: np.ones((4, 2))
Out[3]:
array([[ 1., 1.],
[ 1., 1.],
[ 1., 1.],
[ 1., 1.]])
In [4]: np.zeros((4, 2))
Out[4]:
array([[ 0., 0.],
[ 0., 0.],
[ 0., 0.],
[ 0., 0.]])
In [5]: np.repeat([7], 10)
Out[5]: array([7, 7, 7, 7, 7, 7, 7, 7, 7, 7])
У Lua нет встроенных локальных переменных потока, но вы можете использовать отдельную таблицу для каждого потока Lua для хранения локальных переменных потока и выяснить, какой поток работает с помощью coroutine.running
(или lua_pushthread
в C ). Затем сделайте его более удобным с metatables. Что-то вроде:
local _G, coroutine = _G, coroutine
local main_thread = coroutine.running() or {} -- returns nil in Lua 5.1
local thread_locals = setmetatable( { [main_thread]=_G }, { __mode="k" } )
local TL_meta = {}
function TL_meta:__index( k )
local th = coroutine.running() or main_thread
local t = thread_locals[ th ]
if t then
return t[ k ]
else
return _G[ k ]
end
end
function TL_meta:__newindex( k, v )
local th = coroutine.running() or main_thread
local t = thread_locals[ th ]
if not t then
t = setmetatable( { _G = _G }, { __index = _G } )
thread_locals[ th ] = t
end
t[ k ] = v
end
-- convenient access to thread local variables via the `TL` table:
TL = setmetatable( {}, TL_meta )
-- or make `TL` the default for globals lookup ...
if setfenv then
setfenv( 1, TL ) -- Lua 5.1
else
_ENV = TL -- Lua 5.2+
end
Нити Lua являются дочерними состояниями из одного материнского состояния. Все глобальные переменные разделяются этими потоками Lua.
Отдельные состояния Lua имеют отдельные глобальные переменные.