Yanıtlar:
|=nesne çiftleri arasında yerinde + işlem yapar . Özellikle şunlar arasında:
Çoğu durumda, |operatörle ilgilidir. Aşağıdaki örneklere bakın.
Setleri
Örneğin, atanan iki kümenin birleşimi s1ve s2aşağıdaki eşdeğer ifadeleri paylaşın:
>>> s1 = s1 | s12 # 1
>>> s1 |= s2 # 2
>>> s1.__ior__(s2) # 3
burada son değeri aşağıdakilerden biri s1ile eşdeğerdir:
Misal
Burada OR ( |) ve yerinde OR ( |=) 'yi setlere uygularız :
>>> s1 = {"a", "b", "c"}
>>> s2 = {"d", "e", "f"}
>>> # OR, |
>>> s1 | s2
{'a', 'b', 'c', 'd', 'e', 'f'}
>>> s1 # `s1` is unchanged
{'a', 'b', 'c'}
>>> # Inplace OR, |=
>>> s1 |= s2
>>> s1 # `s1` is reassigned
{'a', 'b', 'c', 'd', 'e', 'f'}
Sözlükler
In Python 3.9+ , yeni birleştirme ( |) ve güncelleme ( |=) operatörleri sözlükleri arasında önerilmiştir. Not: Bunlar yukarıda belirtilen küme operatörleriyle aynı değildir.
Atanmış iki dikt arasındaki işlemler verildi d1ve d2:
>>> d1 = d1 | d2 # 1
>>> d1 |= d2 # 2
nerede d1ile eşdeğerdir:
d1.update(d2)Misal
Burada diktlere merge ( |) ve update ( |=) uygularız :
>>> d1 = {"a": 0, "b": 1, "c": 2}
>>> d2 = {"c": 20, "d": 30}
>>> # Merge, |
>>> d1 | d2
{"a": 0, "b": 1, "c": 20, "d": 30}
>>> d1
{"a": 0, "b": 1, "c": 2}
>>> # Update, |=
>>> d1 |= d2
>>> d1
{"a": 0, "b": 1, "c": 20, "d": 30}
Sayaçlar
collections.CounterOlarak adlandırılan bir matematiksel veri tipleri de ilgilidir multiset (Mist). Temelde (nesne, çokluk) anahtar-değer çiftlerinin bir diktesidir.
Atanmış iki sayaç arasındaki işlemler verildi c1ve c2:
>>> c1 = c1 | c2 # 1
>>> c1 |= c2 # 2
nerede c1ile eşdeğerdir:
Çoklu kümelerden oluşan bir birlik, giriş başına maksimum çoklukları içerir. Bu, iki set arasındaki veya iki normal dikt arasındaki ile aynı şekilde davranmaz.
Misal
Burada Union ( |) ve yerinde birleşimi ( |=) Sayaçlara uyguluyoruz :
import collections as ct
>>> c1 = ct.Counter({2: 2, 3: 3})
>>> c2 = ct.Counter({1: 1, 3: 5})
>>> # Union, |
>>> c1 | c2
Counter({2: 2, 3: 5, 1: 1})
>>> c1
Counter({2: 2, 3: 3})
>>> # Inplace Union, |=
>>> c1 |= c2
>>> c1
Counter({2: 2, 3: 5, 1: 1})
Sayılar
Son olarak, ikili matematik yapabilirsiniz.
İki atanmış numara arasında verilen işlemler n1ve n2:
>>> n1 = n1 | n2 # 1
>>> n1 |= n2 # 2
nerede n1ile eşdeğerdir:
Misal
Burada bit OR (uygulamak |) ve yerinde bit OR ( |=kadar) sayılar :
>>> n1 = 0
>>> n2 = 1
>>> # Bitwise OR, |
>>> n1 | n2
1
>>> n1
0
>>> # Inplace Bitwise OR, |=
>>> n1 |= n2
>>> n1
1
gözden geçirmek
Bu bölüm, bazı bitsel matematiği kısaca gözden geçirir. En basit durumda, bit tabanlı OR işlemi iki ikili biti karşılaştırır. Her 1iki bitin de olduğu durumlar dışında her zaman geri dönecektir 0.
>>> assert 1 == (1 | 1) == (1 | 0) == (0 | 1)
>>> assert 0 == (0 | 0)
Şimdi bu fikri ikili sayıların ötesine genişletiyoruz. Herhangi iki integral sayı verildiğinde (kesirli bileşenler eksik), bitsel OR'yi uygularız ve integral bir sonuç alırız:
>>> a = 10
>>> b = 16
>>> a | b
26
Nasıl? Genel olarak, bitsel işlemler bazı "kuralları" izler:
Bu kuralları yukarıdaki normal tam sayılarımıza uygulayalım.
(1) Burada dizeler olarak görülen ikili eşdeğerleri karşılaştırın ( 0bikiliyi gösterir):
>>> bin(a)
'0b1010'
>>> bin(b)
'0b10000'
(2) Her sütuna bit düzeyinde VEYA işlemi uygulayın (her 0ikisi de 0geçerliyse 1):
01010
10000
-----
11010
(3) Sonucu verilen türde döndürün, örneğin 10 tabanı, ondalık:
>>> int(0b11010)
26
Dahili ikili karşılaştırma, ikincisini herhangi bir tabandaki tamsayılara uygulayabileceğimiz anlamına gelir, örneğin onaltılık ve sekizlik:
>>> c = 0xa
>>> d = 0o32
>>> c | d
26
Ayrıca bakınız
__ior__()yöntemi aşırı yükleme örneğiMutableSet|=bir başlık+ Yerinde bitsel OR operatörü değişmez değerlere uygulanamaz; isimlere nesneler atayın.
++ Özel yöntemler, karşılık gelen işleçlerle aynı işlemleri döndürür.
intPython'da s değişkenleri değiştirilemediği için bunun doğru olmadığını düşünüyorum .
Python ve diğer birçok programlama dillerinde, |bir bit seviyesinde VEYAlayın operasyon . |=için |olduğu gibi +=da +, işletme ve asignment yani bir kombinasyonu olabilir.
Kısaltması da var |= valueöyle var = var | value.
Yaygın bir kullanım örneği, iki grubu birleştirmektir:
>>> a = {1,2}; a |= {3,4}; print(a)
{1, 2, 3, 4}
Setlerle birlikte kullanıldığında birleştirme işlemi gerçekleştirir.
|=set bağlamında kullanıldı ve etrafta dolanıp bu cevabın da burada olduğunu fark
Bu sadece mevcut değişken ile diğeri arasındaki bir VEYA işlemidir. Var olmak T=Trueve F=Falseçıktıyı grafik olarak görmek:
r s r|=s
--------------
T T T
T F T
F T T
F F F
Örneğin:
>>> r=True
>>> r|=False
>>> r
True
>>> r=False
>>> r|=False
>>> r
False
>>> r|=True
>>> r
True
|tamsayılar için bit düzeyinde veya operatördür, özellikle bir boole operatörü değildir ve bools dışında herhangi bir şey için , gerçekte üretmez Trueveya Falseçıktı üretmez . boolbir alt sınıfıdır intve güzel olmak gerekirse, / çıktı boolüretmeye devam etmek için onu aşırı yüklediler, ancak çoğu durumda, boole işlemleri ile yapılmamalıdır . Normal kullanımları bitsel veya veya set birleşimidir. Daha iyi kullanım örnekleri, üreten gibi bir şey olacaktır . TrueFalseor||a = 0b1001; a |= 0b0010; print(bin(a))0b1011
Atamanın sol ve sağ taraflarının ikili bit düzeyinde OR gerçekleştirir, ardından sonucu sol el değişkeninde depolar.
http://docs.python.org/reference/expressions.html#binary-bitwise-operations
Bitsel veya. Diyelim ki biz var 32 |= 10, resim 32 ve 10 ikili.
32 = 10 0000
10 = 00 1010
Şimdi çünkü | veya, bitler halinde veya iki sayı üzerinde yapın
ör. 1 veya 0 -> 1, 0 veya 0 -> 0. Buna zincir boyunca devam edin
10 0000 | 00 1010 = 10 1010.
Şimdi ikiliyi ondalık sayıya çevirin, 10 1010 = 42.
| = İçin, bilinen örnekleri düşünün x +=5. Bu x = x + 5,nedenle, eğer sahipsek x |= 5, demek oluyor x = x bitwiseor with 5.
32 |= 10daha ziyade değil 32 | 10. Bunu gelecekteki okuyucular için açıklığa kavuşturmak için :)
Kullanım senaryosu vermek için (diğer cevaplarla vakit geçirdikten sonra):
def process(item):
return bool(item) # imagine some sort of complex processing taking place above
def any_success(data): # return True if at least one is successful
at_least_one = False
for item in data:
at_least_one |= process(item)
return at_least_one
>>> any_success([False, False, False])
False
>>> any_success([True, False, False])
True
>>> any_success([False, True, False])
True
Temelde anykısa devre olmadan: her öğeyi işlemeniz ve en az bir başarı kaydetmeniz gerekiyorsa yararlı olabilir.
Bu yanıttaki uyarılara da bakın
|aynı zamanda set sendika operatörü olarak kullanıldığını