2013-03-04 17 views
23

Inne niż standardowe +, -, * i / operatorów; ale to, co robi te oznaczają (**, ^, %, //)?co oznaczają te operatory (**, ^,%, //)? - Python?

>>> 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 

Jak o wykonawcy ^?

>>> 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 pozostałą normalny moduł, 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 

Jak o wykonawcy //? 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 
+18

Czuję, że odpowiedziałeś na własne pytanie. – squiguy

+0

Jeśli jesteś "operatorem python" Google, pierwszym linkiem jest lista operatorów. –

+0

Jeśli masz konkretne pytanie dotyczące dokumentacji, którą połączyłeś, podaj ten fragment, którego nie rozumiesz i zapytaj o to. – phant0m

Odpowiedz

52
  • **: potęgowanie
  • ^: wyłączne albo (bitowe)
  • %: moduł
  • //: podzielić ze zintegrowanym związku (odrzutów reszta)
2

Ci są poprawne, że ** to pow er funkcja.

^ jest bitowym XOR.

% to rzeczywiście operacja modułowa, ale zauważ, że dla liczb dodatnich, x % m = x zawsze, gdy m > x. Wynika to z definicji modułu. (Dodatkowo, Python określa x % m na znak m.)

// to operacja dzielenia, która zwraca liczbę całkowitą, odrzucając resztę. Jest to standardowa forma podziału przy użyciu języka / w większości języków programowania. Jednak Python zmienił zachowanie /, aby wykonać podział zmiennoprzecinkowy , nawet jeśli argumentami są liczby całkowite. Operator // wprowadzono Pythonie 2,6 Python 3, aby umożliwić operatorowi całkowitą podziałem, które zachowują się stale między Pythonie 2 Python 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, patrz na to pytanie: Division in Python 2.7. and 3.3

+1

Warto zauważyć, że 'x% m' zawsze daje wynik ze znakiem' m'. – HyperNeutrino

+0

@HyperNeutrino Dzięki. Początkowo interesowało mnie tylko wyjaśnienie konkretnej sytuacji, o którą pytał OP, ale ponieważ ta odpowiedź urosła do czegoś nieco bardziej ogólnego, dodałem notatkę o takim skutku. –

17

Możesz znaleźć wszystkie te operatory w numerze Python language reference, ale będziesz musiał trochę przewinąć, aby znaleźć je wszystkie. Jak inne odpowiedzi powiedziały:

  • Operator ** wykonuje potęgowanie. a ** b jest a podniesiona do mocy b.Ten sam symbol ** jest również używany w argumencie funkcji i wywołaniu notacji o innym znaczeniu (przekazywanie i odbiór dowolnych argumentów słów kluczowych).
  • Operator ^ tworzy binarny xor. a^b zwróci wartość tylko bitami ustawionymi w a lub b, ale nie obu. Ten jest prosty!
  • Operator % służy głównie do znalezienia modułu dwóch liczb całkowitych. a % b zwraca pozostałą część po podzieleniu a przez b. W przeciwieństwie do operatorów modulus w niektórych innych językach programowania (takich jak C), w Pythonie moduł będzie miał taki sam znak jak b, a nie taki sam znak jak a. Ten sam operator jest również używany do "starego" stylu formatowania ciągów znaków, więc a % b może zwrócić ciąg znaków, jeśli a jest łańcuchem formatu, a b jest wartością (lub krotką wartości), które można wstawić do a.
  • Operator // wykonuje podział na liczby całkowite w Pythonie. Podział na liczby całkowite w Pythonie nie jest dokładnie taki sam jak podział całkowity oferowany przez niektóre inne języki (np. C), ponieważ zaokrągla się w kierunku ujemnej nieskończoności, a nie w kierunku zera. Razem z operatorem modulus można powiedzieć, że a == (a // b)*b + (a % b). W Pythonie 2 podział pięter jest domyślnym zachowaniem przy dzieleniu dwóch liczb całkowitych (przy użyciu operatora podziału normalnego /). Ponieważ może to być nieoczekiwane (szczególnie, gdy nie jesteś wybredny co do typów liczb otrzymasz jako argumenty do funkcji), Python 3 został zmieniony, aby podział na "prawdziwy" (zmiennoprzecinkowy) był normą dla podziału, który byłby zaokrąglony w przeciwnym razie wykona podział "na podłogę" tylko wtedy, gdy zostanie wyraźnie zażądany. (Nowe zachowanie można również uzyskać w Pythonie 2, umieszczając na wierzchu plików from __future__ import division. Gorąco polecam!)
+0

Co do '%': nie tylko znak jest inny, wartości bezwzględne również są różne! – phant0m

+0

Dziękuję za te dodatkowe opisy szczególnie operatorów modułów i całkowitych podziałów. – javadba