Co oznaczają te operatory (**, ^, %, //)? [zamknięte]
Inne niż standardowe +
, -
, *
i /
operatorów; ale co one oznaczają (**
, ^
, %
, //
) ?
>>> 9+float(2) # addition
11.0
>>> 9-float(2) # subtraction
7.0
>>> 9*float(2) # multiplication
18.0
>>> 9/float(2) # division
4.5
>>>
>>> 9**float(2) # This looks like a square, (i.e. power 2)
81.0
>>> 9**float(3) # So ** is equivalent to `math.pow(x,p)` ?
729.0
A co z operatorem ^
?
>>> 9^int(2) # What is `^` in `x^u` , it only allows `int` for `u`
11
>>> 9^int(3)
10
>>> 9^int(4)
13
>>> 9^int(5)
12
>>> 9^int(6)
15
>>> 9^int(7)
14
>>> 9^int(8)
1
>>> 9^int(9)
0
>>> 9^int(10)
3
>>> 9^int(11)
2
>>> 9^int(12)
5
%
W x%m
zwraca normalny moduł reszty, ale tylko wtedy, gdy m < x
, dlaczego tak jest? Co robi %
?
>>> 9%float(2)
1.0
>>> 9%float(3)
0.0
>>> 9%float(4)
1.0
>>> 9%float(5)
4.0
>>> 9%float(6)
3.0
>>> 9%float(7)
2.0
>>> 9%float(8)
1.0
>>> 9%float(9)
0.0
>>> 9%float(10)
9.0
>>> 9%float(11)
9.0
>>> 9%float(12)
9.0
A co z operatorem //
? co to robi?
>>> 9//float(2)
4.0
>>> 9//float(3)
3.0
>>> 9//float(4)
2.0
>>> 9//float(5)
1.0
>>> 9//float(6)
1.0
>>> 9//float(7)
1.0
>>> 9//float(8)
1.0
>>> 9//float(9)
1.0
>>> 9//float(1)
9.0
>>> 9//float(0.5)
18.0
3 answers
-
**
: wykładnik -
^
: exclusive-or (bitwise) -
%
: Moduł -
//
: podziel z wynikiem całkowym (Odrzuć resztę)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 03:07:35
Możesz znaleźć wszystkie te operatory w referencji języka Python , chociaż będziesz musiał trochę przewinąć, aby znaleźć je wszystkie. Jak napisano w innych odpowiedziach:
- operator
**
wykonuje wykładnik.a ** b
jesta
podniesione do potęgib
. Ten sam symbol**
jest również używany w argumencie funkcji i w notacjach wywołujących, o innym znaczeniu (przekazywaniu i odbieraniu dowolnych argumentów słów kluczowych). - operator
^
wykonuje binarny xor.a ^ b
will Zwraca wartość tylko z bitami ustawionymi wa
lub wb
, ale nie w obu. Ten jest prosty! - operator
%
polega głównie na znalezieniu modułu dwóch liczb całkowitych.a % b
Zwraca resztę po podzieleniua
przezb
. W przeciwieństwie do operatorów modułu w niektórych innych językach programowania (takich jak C), w Pythonie moduł będzie miał taki sam znak jakb
, a nie ten sam znak jaka
. Ten sam operator jest również używany do" starego " stylu formatowania łańcuchów, więca % b
może zwrócić string, jeślia
jest ciągiem formatującym, a {[3] } jest wartością (lub krotką wartości), którą można wstawić doa
. - operator
//
wykonuje wersję Pythona dzielenia liczb całkowitych. Podział liczb całkowitych Pythona nie jest dokładnie taki sam jak podział liczb całkowitych oferowany przez niektóre inne języki (jak C), ponieważ zaokrągla się w kierunku ujemnej nieskończoności, a nie w kierunku zera. Razem z operatorem modułu można powiedzieć, żea == (a // b)*b + (a % b)
. W Pythonie 2, Podział podłogi jest domyślnym zachowaniem, gdy podziel dwie liczby całkowite (używając normalnego operatora dzielenia/
). Ponieważ może to być nieoczekiwane (zwłaszcza, gdy nie jesteś wybredny co do tego, jakie typy liczb otrzymujesz jako argumenty funkcji), Python 3 zmienił się tak, aby podział "true" (zmiennoprzecinkowy) stał się normą dla podziału, który w przeciwnym razie byłby zaokrąglony, i zrobi podział "floor" tylko wtedy, gdy jest to wyraźnie wymagane. (Możesz również uzyskać nowe zachowanie w Pythonie 2, umieszczającfrom __future__ import division
na górze swoich plików. Zdecydowanie polecam to!)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-04 14:24:57
Masz rację, że **
jest funkcją mocy.
^
jest bitowym XOR.
%
jest rzeczywiście operacją modularną, ale zauważ, że dla liczb dodatnich, x % m = x
ilekroć m > x
. Wynika to z definicji modułu. (Dodatkowo Python określa x % m
, aby mieć znak m
.)
//
jest operacją podziału, która zwraca liczbę całkowitą poprzez odrzucenie reszty. Jest to standardowa forma podziału przy użyciu /
w większości języków programowania. Jednak Python 3 zmieniono zachowanie /
na dzielenie zmiennoprzecinkowe , nawet jeśli argumenty są liczbami całkowitymi. Operator //
został wprowadzony w Pythonie 2.6 i Pythonie 3 w celu zapewnienia operatora dzielenia liczb całkowitych, który zachowywałby się spójnie pomiędzy Pythonem 2 i Pythonem 3. Oznacza to:
| context | `/` behavior | `//` behavior |
---------------------------------------------------------------------------
| floating-point arguments, Python 2 & 3 | float division | int divison |
---------------------------------------------------------------------------
| integer arguments, python 2 | int division | int division |
---------------------------------------------------------------------------
| integer arguments, python 3 | float division | int division |
Aby uzyskać więcej szczegółów, zobacz to pytanie: podział w Pythonie 2.7. i 3.3
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-14 23:39:58