Вызов не-WSDL Мыла PHP: как Вы передаете параметры?

Меньше и быстрее, чем функция Нолена:

def partitions(n, I=1):
    yield (n,)
    for i in range(I, n//2 + 1):
        for p in partitions(n-i, i):
            yield (i,) + p

Давайте сравним их:

In [10]: %timeit -n 10 r0 = nolen(20)
1.37 s ± 28.7 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [11]: %timeit -n 10 r1 = list(partitions(20))
979 µs ± 82.9 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [13]: sorted(map(sorted, r0)) == sorted(map(sorted, r1))
Out[14]: True

Похоже, что это в 1370 раз быстрее n = 20.

Во всяком случае, это все еще далеко от accel_asc :

def accel_asc(n):
    a = [0 for i in range(n + 1)]
    k = 1
    y = n - 1
    while k != 0:
        x = a[k - 1] + 1
        k -= 1
        while 2 * x <= y:
            a[k] = x
            y -= x
            k += 1
        l = k + 1
        while x <= y:
            a[k] = x
            a[l] = y
            yield a[:k + 2]
            x += 1
            y -= 1
        a[k] = x + y
        y = x + y - 1
        yield a[:k + 1]

Это не только медленнее, но требует гораздо больше памяти (но, очевидно, гораздо легче запомнить):

In [18]: %timeit -n 5 r2 = list(accel_asc(50))
114 ms ± 1.04 ms per loop (mean ± std. dev. of 7 runs, 5 loops each)

In [19]: %timeit -n 5 r3 = list(partitions(50))
527 ms ± 8.86 ms per loop (mean ± std. dev. of 7 runs, 5 loops each)

In [24]: sorted(map(sorted, r2)) == sorted(map(sorted, r3))
Out[24]: True

В ActiveState можно найти другие версии: Генератор целочисленных разделов (рецепт Python) .


Я использую Python 3.6.1 и IPython 6.0.0.

10
задан Dave C 29 May 2009 в 21:09
поделиться

3 ответа

Спасибо. Вот полный пример, который теперь работает:

$URL = 'http://www.nanonull.com/TimeService/TimeService.asmx';

$client = new SoapClient(null, array(
    'location' => $URL,
    'uri'      => "http://www.Nanonull.com/TimeService/",
    'trace'    => 1,
    ));

$return = $client->__soapCall("getTimeZoneTime",
   array(new SoapParam('ZULU', 'ns1:timezone')),
   array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);
10
ответ дан 3 December 2019 в 16:10
поделиться

Вы можете попробовать добавить еще один вызов array () вокруг своих параметров, например:

$params = array('timezone'=>'ZULU' );
$return = $client->__soapCall("getTimeZoneTime",
    array($params),
    array('soapaction' => 'http://www.Nanonull.com/TimeService/getTimeZoneTime')
);

Я не могу это проверить, но вы можете.

0
ответ дан 3 December 2019 в 16:10
поделиться

Проблема заключается где-то в отсутствии информации о пространстве имен в параметре. Я использовал первый случай вашего примера, поскольку он был наиболее близок к тому, что я придумал.

Если вы измените строку:

array(new SoapParam('ZULU', 'timezone')),

на:

array(new SoapParam('ZULU', 'ns1:timezone')),

, она должна дать вам ожидаемый результат.

5
ответ дан 3 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: