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
Author: coldspeed, 2013-03-04

3 answers

  • **: wykładnik
  • ^: exclusive-or (bitwise)
  • %: Moduł
  • //: podziel z wynikiem całkowym (Odrzuć resztę)
 68
Author: John Zwinck,
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 jest a podniesione do potęgi b. 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 w a lub w b, 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 podzieleniu a przez b. 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 jak b, a nie ten sam znak jak a. Ten sam operator jest również używany do" starego " stylu formatowania łańcuchów, więc a % b może zwrócić string, jeśli a jest ciągiem formatującym, a {[3] } jest wartością (lub krotką wartości), którą można wstawić do a.
  • 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ć, że a == (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ąc from __future__ import division na górze swoich plików. Zdecydowanie polecam to!)
 18
Author: Blckknght,
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

 3
Author: Kyle Strand,
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