Если значения являются логическими, самым быстрым подходом является использование оператора not :
>>> x = True
>>> x = not x # toggle
>>> x
False
>>> x = not x # toggle
>>> x
True
>>> x = not x # toggle
>>> x
False
Если значения являются численными, то вычитание из общего числа является простым и быстрым способом переключения значений:
>>> A = 5
>>> B = 3
>>> total = A + B
>>> x = A
>>> x = total - x # toggle
>>> x
3
>>> x = total - x # toggle
>>> x
5
>>> x = total - x # toggle
>>> x
3
Если значение переключается между 0 и 1 , вы можете использовать побитовое исключение или :
>>> x = 1
>>> x ^= 1
>>> x
0
>>> x ^= 1
>>> x
1
Техника работает обобщается на любую пару целых чисел. Шаг xor-one-one заменяется на xor-by-pre -put-constant-constant:
>>> A = 205
>>> B = -117
>>> t = A ^ B # precomputed toggle constant
>>> x = A
>>> x ^= t # toggle
>>> x
-117
>>> x ^= t # toggle
>>> x
205
>>> x ^= t # toggle
>>> x
-117
(эта идея была представлена Ником Когланом, а затем обобщена @zxxc.)
Если значения хешируются, вы можете использовать словарь:
>>> A = 'xyz'
>>> B = 'pdq'
>>> d = {A:B, B:A}
>>> x = A
>>> x = d[x] # toggle
>>> x
'pdq'
>>> x = d[x] # toggle
>>> x
'xyz'
>>> x = d[x] # toggle
>>> x
'pdq'
Самый медленный способ заключается в использовании условного выражения :
>>> A = [1,2,3]
>>> B = [4,5,6]
>>> x = A
>>> x = B if x == A else A
>>> x
[4, 5, 6]
>>> x = B if x == A else A
>>> x
[1, 2, 3]
>>> x = B if x == A else A
>>> x
[4, 5, 6]
Если у вас более двух значений, itertools.cycle ( ) обеспечивает общий быстрый способ переключения между последовательными значениями:
>>> import itertools
>>> toggle = itertools.cycle(['red', 'green', 'blue']).next
>>> toggle()
'red'
>>> toggle()
'green'
>>> toggle()
'blue'
>>> toggle()
'red'
>>> toggle()
'green'
>>> toggle()
'blue'
Обратите внимание, что в Python 3 метод next()
был изменен на __next__()
, поэтому первая строка будет теперь записанный как toggle = itertools.cycle(['red', 'green', 'blue']).__next__
Thanx много приятель, ваш код работал для меня.
Вот код:
$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, $url );
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true );
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true );
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $post_string);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen($post_string) ));
curl_setopt($soap_do, CURLOPT_USERPWD, $user . ":" . $password);
$result = curl_exec($soap_do);
$err = curl_error($soap_do);
Вы также используете неправильный Content-type, application / xml - правильный тип. Но это не должно иметь никакого значения для запроса cURL.
Попробуйте установить номер порта с помощью CURLOPT_PORT, поскольку, возможно, ему не нравится это как часть URL?
Для тех, кто нашел это у Google, у меня возникла аналогичная проблема, пытаясь взаимодействовать с сервером .NET SOAP с PHP, когда метод ASP работал нормально.
Я использовал сниффер пакетов, чтобы видеть что именно посылал клиент ASP, и заметил, что он включил куки после первоначального запроса на аутентификацию. Поэтому я включил файлы cookie в моем cURL, и он работал нормально.
$cookiePath = tempnam('/tmp', 'cookie');
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiePath);
Это может быть старым, но эта работа для меня. Первоначально я использовал эту функцию для сообщения XML, и мыло не работало, пока я не изменю HTTPHEADER
на text/xml
вместо application/xml
:
function doXMLCurl($url,$postXML){
$CURL = curl_init();
curl_setopt($CURL, CURLOPT_URL, $url);
curl_setopt($CURL, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($CURL, CURLOPT_POST, 1);
curl_setopt($CURL, CURLOPT_POSTFIELDS, $postXML);
curl_setopt($CURL, CURLOPT_HEADER, false);
curl_setopt($CURL, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($CURL, CURLOPT_HTTPHEADER, array('Accept: text/xml','Content-Type: text/xml'));
curl_setopt($CURL, CURLOPT_RETURNTRANSFER, true);
$xmlResponse = curl_exec($CURL);
return $xmlResponse;
}