পাইথনে | = (আইওর) কী করবে?


111

গুগল আমাকে অনুসন্ধান করতে দেবে না |=যাতে প্রাসঙ্গিক ডকুমেন্টেশন খুঁজে পেতে আমার সমস্যা হচ্ছে। কেউ জানেন?


5
আমি মনে করি এটি |
নীতির সাথে

10
2019 এ গুগল আপনাকে অনুসন্ধান করতে দেবে` | = = `! :-)
rbennell

উত্তর:


44

|=জোড়া বস্তুর মধ্যে একটি ইন-প্লেস + অপারেশন সম্পাদন করে। বিশেষত: এর মধ্যে:

বেশিরভাগ ক্ষেত্রে, এটি |অপারেটরের সাথে সম্পর্কিত । নীচে উদাহরণ দেখুন।

সেট

উদাহরণস্বরূপ, দুটি নির্ধারিত সেটগুলির ইউনিয়ন s1এবং s2নিম্নলিখিত সমমানের এক্সপ্রেশনগুলি ভাগ করুন:

>>> s1 = s1 | s12                                          # 1
>>> s1 |= s2                                               # 2
>>> s1.__ior__(s2)                                         # 3

যেখানে এর চূড়ান্ত মান s1উভয় দ্বারা সমতুল্য:

  1. একটি নির্ধারিত OR অপারেশন
  2. একটি জায়গা বা অপারেশন
  3. বিশেষ পদ্ধতি ++ এর মাধ্যমে একটি ইন-প্লেস বা অপারেশন

উদাহরণ

এখানে আমরা সেটগুলিতে OR ( |) এবং ইনপ্লেস OR ( |=) প্রয়োগ করব :

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

অভিধানের

ইন পাইথন 3.9+ , নতুন একত্রীকরণ ( |) এবং আপডেট করুন ( |=) অপারেটরদের অভিধান মধ্যে প্রস্তাব করা হয়। দ্রষ্টব্য: এগুলি উপরে উল্লিখিত সেট অপারেটরগুলির মতো নয়।

দুটি নির্ধারিত ডিক্ট d1এবং এর মধ্যে দেওয়া অপারেশন d2:

>>> d1 = d1 | d2                                           # 1
>>> d1 |= d2                                               # 2

যেখানে d1মাধ্যমে সমতুল্য:

  1. একটি নির্ধারিত মার্জ-রাইট অপারেশন
  2. একটি ইন-প্লেস মার্জ-রাইট (আপডেট) অপারেশন; সমতুল্যd1.update(d2)

উদাহরণ

এখানে আমরা একত্রীকরণ (প্রযোজ্য |) এবং আপডেট করুন ( |=করা) dicts :

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

কাউন্টার

collections.Counterএকটি গাণিতিক datastructure একটি নামক সঙ্গে সম্পর্কযুক্ত multiset (mset)। এটি মূলত (বস্তু, বহুগুণ) কী-মান জোড়ার একটি ডিক।

দুটি নির্ধারিত কাউন্টার c1এবং এর মধ্যে দেওয়া অপারেশন c2:

>>> c1 = c1 | c2                                           # 1
>>> c1 |= c2                                               # 2

যেখানে c1মাধ্যমে সমতুল্য:

  1. একটি নির্ধারিত ইউনিয়ন অপারেশন
  2. একটি স্থান মধ্যে ইউনিয়ন অপারেশন

মাল্টিসেটগুলির একটি ইউনিয়নে প্রতি প্রবেশে সর্বাধিক গুণ রয়েছে। দ্রষ্টব্য, এটি দুটি সেট এর মধ্যে বা দুটি নিয়মিত ডিস্কের মধ্যে একইভাবে আচরণ করে না।

উদাহরণ

এখানে আমরা ইউনিয়ন ( |) এবং অন্তর্ভুক্ত ইউনিয়ন ( |=) কাউন্টারগুলিতে প্রয়োগ করি :

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

নাম্বার

শেষ অবধি, আপনি বাইনারি গণিত করতে পারেন।

দুটি নির্ধারিত সংখ্যা n1এবং n2:

>>> n1 = n1 | n2                                           # 1
>>> n1 |= n2                                               # 2

যেখানে n1মাধ্যমে সমতুল্য:

  1. একটি নির্ধারিত বিটওয়াইস বা অপারেশন
  2. একটি ইন-প্লেস বিটওয়াইস বা অপারেশন

উদাহরণ

এখানে আমরা সংখ্যায় বিটওয়াইড OR ( |) এবং ইন-প্লেস বিটওয়াইস OR ( |=) প্রয়োগ করব :

>>> n1 = 0
>>> n2 = 1

>>> # Bitwise OR, |
>>> n1 | n2
1
>>> n1
0

>>> # Inplace Bitwise OR, |=
>>> n1 |= n2
>>> n1
1

পুনঃমূল্যায়ন

এই বিভাগটি সংক্ষিপ্তভাবে কিছু বিটওয়াসার গণিত পর্যালোচনা করে। সহজ ক্ষেত্রে, বিটওয়াইস বা অপারেশন দুটি বাইনারি বিটের তুলনা করে। 1উভয় বিটগুলি বাদে এটি সর্বদা ফিরে আসবে 0

>>> assert 1 == (1 | 1) == (1 | 0) == (0 | 1)
>>> assert 0 == (0 | 0)

আমরা এখন বাইনারি সংখ্যার বাইরে এই ধারণাটি প্রসারিত করি। দুটি দুটি অবিচ্ছেদ্য সংখ্যা দেওয়া (ভগ্নাংশ উপাদান অভাব) দেওয়া, আমরা বিটওয়াইড OR প্রয়োগ করি এবং একটি অবিচ্ছেদ্য ফলাফল পাই:

>>> a = 10 
>>> b = 16 
>>> a | b
26

কিভাবে? সাধারণভাবে, বিটওয়াইজ অপারেশনগুলি কিছু "বিধি" অনুসরণ করে:

  1. অভ্যন্তরীণভাবে বাইনারি সমতুল্য তুলনা করুন
  2. অপারেশন প্রয়োগ করুন
  3. প্রদত্ত প্রকার হিসাবে ফলাফলটি ফিরিয়ে দিন

উপরের আমাদের নিয়মিত পূর্ণসংখ্যার উপর এই নিয়মগুলি প্রয়োগ করি।

(1) বাইনারি সমতুল্য তুলনা করুন, এখানে স্ট্রিং হিসাবে দেখা ( 0bবাইনারি বোঝায়):

>>> bin(a)
'0b1010'
>>> bin(b)
'0b10000'

(২) প্রতিটি কলামে কিছুদিকের 0দিকের বা অপারেশন প্রয়োগ করুন ( যখন উভয়ই থাকে 0, অন্যথায় 1):

01010
10000
-----
11010

(3) প্রদত্ত প্রকারের ফলাফল, যেমন, বেস 10, দশমিক:

>>> int(0b11010)
26

অভ্যন্তরীণ বাইনারি তুলনা মানে আমরা পরবর্তীগুলি কোনও বেসে উদাহরণস্বরূপ পূর্ণসংখ্যায় প্রয়োগ করতে পারি, যেমন হেক্স এবং অষ্টাল:

>>> c = 0xa
>>> d = 0o32
>>> c | d
26

আরো দেখুন

+ ইন-প্লেস বিটওয়াইজ বা অপারেটর আক্ষরিক ক্ষেত্রে প্রয়োগ করা যায় না; নামে বস্তু নির্ধারণ করুন।

++ বিশেষ পদ্ধতিগুলি তাদের সংশ্লিষ্ট অপারেটরগুলির মতো একই ক্রিয়াকলাপগুলি ফিরিয়ে দেয়।


2
পুরোপুরি পরিষ্কার হওয়ার জন্য, আমি এই প্রদর্শনীতে যোগ করব যে নিয়মিত অ্যাসাইনমেন্ট (x = x | y) করার পরে আইডি (এক্স) পরিবর্তিত হয়েছে কারণ এটি একটি নতুন অবজেক্ট, যখন | = একই আইডি রাখে কারণ এটি আসল x পরিবর্তিত হয়েছে, সুতরাং "ইনপ্লেস" নামটি।
ফ্লোরিডমন্ড

1
এটি শীর্ষ উত্তর হওয়া উচিত - এটি সর্বাধিক বিস্তৃত।
নিক

সংখ্যা বিভাগে, আপনি দাবী করছেন যে দ্বিতীয় বিবৃতিটি যথাস্থানে কাজ করে। আমি মনে করি এটি সত্য নয়, যেহেতু intপাইথনগুলিতে s পরিবর্তনীয় নয়।
Asocia

106

পাইথন, এবং অনেক অন্যান্য প্রোগ্রামিং ভাষা ইন, |হয় , bitwise-বা প্রক্রিয়া|=হয় |যেমন +=হয় +, অর্থাত্ একটি অপারেশন এবং asignment সমন্বয়।

তাই var |= valueজন্য সংক্ষিপ্ত var = var | value

একটি সাধারণ ব্যবহারের ক্ষেত্রে দুটি সেট মার্জ করা হয়:

>>> a = {1,2}; a |= {3,4}; print(a)
{1, 2, 3, 4}

21
আপনি একটি উদাহরণ প্রদান করতে পারেন?
খনিজগুলি

নীচে আমার ব্যবহারের একটি কেস দেওয়া হয়েছে
scharfmn

53

সেটগুলির সাথে ব্যবহার করার সময় এটি ইউনিয়ন পরিচালনা করে per


1
আমি কিছু কোড পড়ছিলাম |=এবং সেটটি প্রসঙ্গে ব্যবহার করা হয়েছিল, এবং যতক্ষণ না আমি আশেপাশে
গণ্ডগোল

41

এটি বর্তমান চলক এবং অন্যটির মধ্যে কেবল একটি OR অপারেশন। সত্তা T=Trueএবং F=False, আউটপুটটি গ্রাফিকভাবে দেখুন:

r    s    r|=s
--------------
T    T    T
T    F    T
F    T    T
F    F    F

উদাহরণ স্বরূপ:

>>> r=True
>>> r|=False
>>> r
True
>>> r=False
>>> r|=False
>>> r
False
>>> r|=True
>>> r
True

7
এটি অপারেটরের এক ধরণের রেপিত ছাপ দেয়; |পূর্ণসংখ্যার জন্য বিটওয়াইস-বা অপারেটর, বিশেষত কোনও বুলিয়ান অপারেটর নয়, এবং boolএস ব্যতীত অন্য কোনও কিছুর জন্য এটি আসলে উত্পাদন Trueবা Falseআউটপুট দেয় না। boolএটি একটি সাবক্লাস int, এবং সুন্দর হওয়ার জন্য, তারা boolউত্পাদন True/ Falseআউটপুট রাখার জন্য এটিকে ওভারলোড করে ফেলেছিল, তবে বেশিরভাগ ক্ষেত্রে, বুলিয়ান অপারেশনগুলি দিয়ে করা উচিত or, নয় |। সাধারণ ব্যবহারগুলি |হ'ল বিটওয়াইস-বা, বা সেট-ইউনিয়ন। ব্যবহারের আরও ভাল উদাহরণ হতে পারে a = 0b1001; a |= 0b0010; print(bin(a))যা উত্পন্ন করে 0b1011
শ্যাডোর্যাঞ্জার


3

এটি কিছুটা বা। ধরা যাক আমাদের আছে 32 |= 10, 32 এবং 10 টি চিত্র বাইনারি।

32 = 10 0000
10 = 00 1010

এখন কারণ | হয় বা, কিছুটা দিক বা দুটি সংখ্যায় করুন

অর্থাত্ 1 বা 0 -> 1, 0 বা 0 -> 0 এটিকে শৃঙ্খলে রেখে চালিয়ে যান

10 0000 | 00 1010 = 10 1010.

এখন বাইনারিটি দশমিক দশমিক 1010 = 42 এ পরিবর্তন করুন।

| = এর জন্য, পরিচিত উদাহরণগুলি সম্পর্কে ভাবেন x +=5,। এটি এর অর্থ x = x + 5,যদি আমাদের থাকে x |= 5তবে এর অর্থ x = x bitwiseor with 5


এটি সেই ব্যাখ্যাটি আমি খুঁজছিলাম, সবাই সেট এবং বুল সম্পর্কে কথা বলেছিল তবে কেউ সংখ্যা সহ এর ব্যবহারের কথা উল্লেখ করেনি।
অঙ্কুশ ভার্মা

আপনি যে উদাহরণ দিয়েছেন তা নয় 32 |= 10বরং 32 | 10। কেবল ভবিষ্যতের পাঠকদের জন্য এটি স্পষ্ট করার জন্য :)
স্নাইপার 71

@ স্নিপার 71 ফলাফল 32 | = 10
ভবিষ্যত-জিম

2

ব্যবহারের ক্ষেত্রে (অন্যান্য উত্তরের সাথে সময় কাটিয়ে) দেওয়ার জন্য:

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

মূলত any শর্ট সার্কিট ছাড়া: আপনার যদি প্রতিটি আইটেম প্রসেস করতে হয় এবং কমপক্ষে একটি সাফল্য রেকর্ড করতে হয় তবে এটি কার্যকর হতে পারে etc.

এই উত্তরে সতর্কতাও দেখুন


1

পাইথনে, | = (ior) ইউনিয়ন পরিচালনার মতো কাজ করে। x = 5 এবং x | = 5 এর মত যদি উভয় মান প্রথমে বাইনারি মানতে রূপান্তরিত হয় তবে ইউনিয়ন অপারেশন সম্পাদন করবে এবং আমরা উত্তর 5 পাব।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.