Python'dagi or operatori: misollar bilan to'liq qo'llanma
Python'ning or operatori sizni chalg'ityaptimi? U Boolean bo'lmagan qiymatlar bilan aslida qanday ishlashini, real qo'llanish holatlarini va qochish kerak bo'lgan xatolarni bilib oling. O'rganishni boshlang.
Muallif: Kimberly Fessel
Bo'lish yoki bo'lmaslik? Gerbmi yoki raqam? Shu yerda yeysizmi yoki olib ketasizmi?
Dunyomiz bizdan doimo qaror qabul qilishni talab qiladi va tanlovlarimizni bildirish uchun "yoki" so'ziga tayanadi. Python ham or'dan foydalanadi, ammo logical operator sifatida: u qaysi qiymatni qaytarishni aniqlash uchun operand'larining truthiness'ini baholaydi.
Ushbu maqolada biz sizga or operatori nima ekanini, Python'da u nima qilishini va uni amalda ko'rish uchun bir nechta amaliy qo'llanish holatlarini tushuntirib beramiz. Shuningdek, kodingiz xato yoki tushunarsiz bo'lib qolmasligi uchun or bilan bog'liq ba'zi keng tarqalgan "tuzoq"larni ham bilib olasiz. Keling, Python'dagi or bilan tanishishdan boshlaymiz.
Python'da or nima?
Ko'plab boshqa tillar singari, Python ham or'ni logical operator sifatida ishlatadi. Undan ikki (yoki undan ko'p) expression'ni bitta logical expression'ga birlashtirish uchun foydalanasiz. Agar operand'laridan kamida bittasi truthy bo'lsa, umumiy or expression'i True bo'ladi; aks holda, ya'ni barcha operand'lar falsy bo'lsa, natija ham falsy bo'ladi.
or ko'pincha Boolean expression'lar bilan birga uchraydi, lekin u Boolean bo'lmagan obyektlar bilan ham ishlaydi. Samaradorlik uchun or short-circuit evaluation'dan foydalanadi, ya'ni truthy operand topishi bilanoq to'xtaydi. Endi esa or'ning asosiy sintaksisini ko'rsatamiz, shunda uni o'z kodingizda ishlatishni boshlay olasiz.
Boolean'lar uchun asosiy sintaksis
Odatda or'dan foydalanganda expression1 or expression2 deb yozasiz. Python avval chap expression'ni hisoblaydi, o'ng expression'ni esa faqat zarur bo'lgandagina qayta ishlaydi. Boolean'lar bilan ishlaganda or operatori ikkala expression'dan biri True bo'lsa, True qaytaradi. Masalan, bularning barchasi True qaytaradi:
-
True or False -
False or True -
True or True
or operatori faqat ikkala expression ham False bo'lgandagina False qaytaradi:
False or False
Boolean expression'lar uchun or
Boolean amallar Boolean expression'larni birlashtirish yoki o'zgartirish imkonini beradi va or ulardan eng ko'p ishlatiladiganlaridan biri. Quyidagi kod age 35 dan kattami yoki name "Steve"ga tengmi, shuni tekshiradi:
age = 42
name = "Maria"
print((age > 35) or (name == "Steve"))
# Expected output:
# True
Bu yerda name "Steve" emas, lekin age 35 dan katta bo'lgani uchun natija baribir True. E'tibor bering, o'qishni osonlashtirish uchun har bir shartni qavs ichiga oldik. Bu misolda qavslar majburiy emas, lekin ular murakkab logical expression'larni tushunishni osonlashtirishi mumkin. and bilan bir qatorda not operatori yanada murakkab tarkibli shartlar tuzish imkonini beradi.
Bittadan ko'p or yordamida bir nechta shartni zanjir qilib bog'lashingiz ham mumkin. Python ularning har birini chapdan o'ngga tekshiradi va ulardan biri True bo'lishi bilanoq to'xtaydi. Agar shartlarning hech biri True bo'lmasa, u butun expression'ni qayta ishlab chiqadi va False qaytaradi. Quyidagi kod False chiqaradi, chunki uchta shartning hech biri True bo'lmaydi:
age = 19
name = "Hayden"
num_pets = 0
print((age > 35) or (name == "Steve") or (num_pets >= 1))
# Expected output:
# False
or operatori Boolean bo'lmagan qiymatlar bilan qanday ishlaydi
Boolean operand'larni talab qiladigan ba'zi boshqa tillardan farqli o'laroq, Python or operatoriga truthiness'ni tekshirish orqali Boolean bo'lmagan qiymatlar bilan ham ishlash imkonini beradi.
False'dan tashqari, Python quyidagilarni ham falsy deb hisoblaydi:
-
None -
0,0.0yoki0j -
''(bo'sh string) -
[],{},()yokiset()(bo'sh to'plamlar) -
range(0)
Deyarli boshqa barcha qiymatlarni u truthy deb hisoblaydi.
Boolean bo'lmagan qiymatlar bilan ishlaganda or operatori expression'larni chapdan o'ngga hisoblaydi va birinchi truthy operand'ni qaytaradi. Agar barcha operand'lar falsy bo'lsa, u oxirgi qiymatni qaytaradi. Quyida Boolean bo'lmagan qiymatlar uchun or'ni ko'rsatadigan bir nechta misol keltirilgan:
print(0 or 1)
print(12 or 21)
print(0 or [])
# Expected result:
# 1
# 12
# []
Python 0'ni ham, bo'sh list'ni ham Boolean kontekstda hisoblaydi va ularni falsy deb topadi. Birinchi qarashda kutilmagan tuyulishi mumkin, ammo or operatorining bu xatti-harakati default qiymatlarni o'rnatishda ayniqsa foydali ekanini keyingi amaliy qo'llanish holatlarida ko'rasiz.
Amaliy qo'llanish holatlari
Hozirgacha siz or nima ekani va u nimalar qila olishi haqidagi asoslarni o'rgandingiz. Ushbu bo'limda or ishtirok etgan bir nechta amaliy kod misollarini ko'rsatamiz. Quyidagi misollarda or'ning ham Boolean, ham Boolean bo'lmagan qiymatlar ustida ishlashiga e'tibor bering.
Bir nechta shartli if statement'lar
Python'da if statement'lar shart natijalariga qarab boshqaruvni turli kod bloklariga uzatish uchun mantiqdan foydalanadi. Bir nechta shartni birlashtirish uchun ko'pincha or operatori ishlatiladi: bunda kamida bitta shart true bo'lsa, kod bajariladi.
Quyidagi kod juft yoki 5 ga bo'linadigan sonlar uchun ijobiy xabar chiqaradi:
values = [1, 2, 3, 4, 5]
for value in values:
if (value % 2 == 0) or (value % 5 == 0):
print(f"{value} works!")
else:
print(f"{value} is not allowed.")
# Expected result:
# 1 is not allowed.
# 2 works!
# 3 is not allowed.
# 4 works!
# 5 works!
Conditional statement'larni o'z ichiga olgan while loop'lar
while loop'lari berilgan shart True bo'lib turgan ekan, kod blokini takroran bajaradi. Xuddi if statement'lardagi kabi, while loop'larida ham logical amallardan foydalanishingiz mumkin.
Bu misol davom etishdan oldin foydalanuvchi kiritgan ma'lumotni validatsiya qilishni ko'rsatadi. while loop'i foydalanuvchi kiritgan qiymat 0 dan 125 gacha bo'lgan to'g'ri oraliqqa tushmaguncha undan yoshini kiritishni so'rashda davom etadi:
age = -1 # Start from an invalid age to trigger the loop
while age < 0 or age > 125:
age = int(input("Enter your age: "))
# Expected result:
# Enter your age: 300
# Enter your age: -21
# Enter your age: 67
Default qiymatlar
Foydalanuvchi kiritmasi bo'lmasligi yoki ixtiyoriy sozlamalar o'rnatilmagan bo'lishi mumkin bo'lgan Python dasturlarida default qiymatlarni o'rnatish uchun ham or'dan foydalanishingiz mumkin. or operatori Boolean bo'lmagan operand'lar uchun birinchi truthy qiymatni qaytargani sababli, or expression'ingizning oxirgi operand'i sifatida default vazifasini bajaradigan zaxira qiymatni qo'yishingiz mumkin.
Masalan, foydalanuvchi nomi kiritilmasa, default foydalanuvchi nomi sifatida "Guest"dan foydalanishingiz mumkin:
user_name = input("Username: ") or "Guest"
print(f"Welcome, {user_name}!")
# Expected result:
# Username:
# Welcome, Guest!
Agar foydalanuvchi hech narsa yozmasdan shunchaki Enter tugmasini bossa, kiritilgan qiymat bo'sh string ('') bo'ladi va u Boolean kontekstda falsy hisoblanadi. Shunda or operatori user_name'ga "Guest" qiymatini beradi, chunki bo'sh string'lar falsy, "Guest" esa birinchi truthy operand.
or foydalanuvchi kiritmasi, environment variable'lar, funksiya argument'lari, dictionary lookup'lar va konfiguratsiya sozlamalari uchun default qiymatlarni o'rnatishning keng tarqalgan pattern'i tarkibiga kiradi. Bu uslubda default'ni faqat None emas, balki har qanday falsy qiymat ishga tushiradi. Agar bo'sh string, 0 yoki False qabul qilinadigan kiritma bo'lsa, default qiymat berish uchun or'dan foydalanmang. Buning o'rniga qiymat None ekanini aniq tekshiring.
Short-Circuit Evaluation
Short-circuit evaluation shuni anglatadiki, Python umumiy natijani aniqlash uchun yetarli ma'lumotga ega bo'lishi bilanoq logical expression'ni qayta ishlashni to'xtatishi mumkin. or operatori expression'larni chapdan o'ngga qayta ishlab, ulardan biri truthy bo'lishi bilanoq to'xtash orqali short-circuiting'dan foydalanadi. Keyingi expression'lar kerak bo'lmasa, u ularni hech qachon tekshirmaydi.
E'tibor bering, bu kod is_divisible_by_five() funksiyasini umuman chaqirmaydi, chunki is_divisible_by_two() True qiymat beradi va bu butun or expression'ini True qiladi:
def is_divisible_by_two(x):
print(f"Checking if {x} is divisible by 2")
return x % 2 == 0
def is_divisible_by_five(x):
print(f"Checking if {x} is divisible by 5")
return x % 5 == 0
value = 10
print(is_divisible_by_two(value) or is_divisible_by_five(value))
# Expected result:
# Checking if 10 is divisible by 2
# True
Short-circuit evaluation tufayli Python juda katta dataset'lar yoki qimmatga tushadigan funksiya chaqiruvlarida unumdorlikni haqiqatan ham oshira oladi. True bo'lish ehtimoli eng yuqori bo'lgan expression'ni birinchi o'ringa qo'yish ko'pincha Python'ga qolgan expression'larni butunlay o'tkazib yuborish imkonini beradi. Shuningdek, qimmat funksiya chaqiruvlarini expression'ning oxiriroq qismiga joylashtirishingiz mumkin: shunda oldingi expression truthy bo'lgan har safar ular bajarilmaydi.
Unumdorlikdagi yutuqni, ehtimol, faqat juda katta hajmdagi ma'lumotlar, ma'lumotlar bazasi query'lari, API chaqiruvlari yoki murakkab funksiyalarda sezasiz, shuning uchun vaqtni ozgina tejashdan ko'ra kodning o'qilishi osonligini ustun qo'yishda davom eting. Shunga qaramay, short-circuiting'ni tushunish samaraliroq va optimallashtirish osonroq bo'lgan kod yozishga yordam beradi.
Keng tarqalgan tuzoqlar
Siz taqqoslashlarni birlashtirish va Boolean bo'lmagan qiymatlarni qayta ishlash uchun or'dan foydalanishni tezda o'zlashtirdingiz, ammo or'ni kodingizga qo'shganda chetlab o'tish kerak bo'lgan yana bir nechta qoqilish nuqtalari bor. or siz kutgandek ishlashiga ishonch hosil qilish uchun quyidagi keng tarqalgan tuzoqlar bilan tanishib chiqing.
Chala taqqoslashlar
Aytaylik, x o'zgaruvchisi 1 yoki 2 ga tengligini tekshirmoqchisiz. Quyida or operatori bilan chala taqqoslash ko'rsatilgan:
x = 2
print(x == 1 or 2)
# Expected return:
# 2
E'tibor bering, bu kod True chiqarmaydi. U x == 1 ekanini to'g'ri tekshiradi. Bu taqqoslash False bo'lgani uchun or operatori o'zining ikkinchi operand'i bo'lgan 2'ni qaytaradi, bu esa Python'da truthy qiymat.
x 1 yoki 2 ga tengligini tekshirish uchun ikkita alohida taqqoslashni birlashtirishingiz kerak: x == 1 or x == 2. Undan ham yaxshisi, tushunarliroq bo'lishi uchun in membership operator'iga o'ting: x in (1, 2). Ikkitadan ortiq qiymatlar uchun odatda match-case statement aniqroq bo'ladi.
Precedence xatolari
Operator precedence — Python expression'dagi operatorlarni qaysi tartibda qayta ishlashini bildiradi. or operatorining precedence'i comparison operator'lardan, shuningdek and logical operator'idan pastroq. or ishtirok etgan expression'larning hisoblanish tartibini aniqlashtirish yoki o'zgartirish uchun istalgan joyga qavs qo'shishingiz mumkin.
Masalan, quyidagi ikkita expression mantiqan ekvivalent:
age > 35 or name == "Steve"
(age > 35) or (name == "Steve")
Python comparison operator'larni (> va ==) or'dan oldin hisoblaydi, shuning uchun ikkala expression ham bir xil natija beradi.
Operator precedence tufayli Python ushbu expression'ni:
has_password or has_api_key and is_verified
Quyidagicha talqin qiladi:
has_password or (has_api_key and is_verified)
Siz nazarda tutgan bo'lishingiz mumkin bo'lgan quyidagi ko'rinishda emas:
(has_password or has_api_key) and is_verified
Best practice sifatida, Python bir nechta operatorli expression'laringizni siz nazarda tutgan tartibda hisoblashiga ishonch hosil qilish uchun qavslar qo'shing. Hatto majburiy bo'lmagan hollarda ham qavslar ko'pincha kodingizni o'qishni osonlashtiradi.
NumPy/Pandas'da or'ni | bilan adashtirish
or — Python'dagi logical operator. U har bir operand'i uchun bitta truth value kutadi. NumPy array'lari va pandas Series katta hajmdagi ma'lumotlarni saqlash va qayta ishlash uchun juda samarali; biroq bu obyektlar ko'plab qiymatlarni saqlaydi va taqqoslanganda bir nechta Boolean natija hosil qiladi. Bu obyektlar bilan or'dan foydalanish odatda xatoga olib keladi:
import pandas as pd
df = pd.DataFrame({
"age": [42, 19, 27],
"name": ["Maria", "Hayden", "Steve"]
})
print((df["age"] > 35) or (df["name"] == "Steve"))
# Expected result:
# ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()
or operatori o'rniga sizga |, ya'ni elementma-element ishlaydigan or bitwise operatori kerak.
import pandas as pd
df = pd.DataFrame({
"age": [42, 19, 27],
"name": ["Maria", "Hayden", "Steve"]
})
print((df["age"] > 35) | (df["name"] == "Steve"))
# Expected result:
# 0 True
# 1 False
# 2 True
Bu kod har bir satr uchun alohida False yoki True qiymatini to'g'ri qaytaradi. Shuni ham yodda tutingki, bu yerda har bir taqqoslash qavs ichiga olinishi kerak, chunki | bitwise operatorining precedence'i comparison operator'larnikidan farq qiladi.
Xulosa
or — Python'dagi logical operator bo'lib, bir nechta expression'ni bitta natijaga birlashtirish uchun foydali. or operatori operand'larni chapdan o'ngga hisoblaydi va birinchi truthy qiymatni yoki, agar hammasi falsy bo'lsa, oxirgi qiymatni qaytaradi. U keraksiz hisoblashlardan qochish uchun short-circuiting'dan ham foydalanadi. or operatorini if statement'larda, while loop'larda hamda Boolean bo'lmagan qiymatlar bilan ishlaganda default qiymatlar berishda uchratasiz. Faqat chala taqqoslashlardan (masalan, user == "guest" or "test123") qoching va Python kodingizga or qo'shganda operator precedence'ni yodda tuting.
AI Tutor yordamida or operatorining imkoniyatlarini o'rganishda davom eting. Ushbu prompt sizga boshlab olishga yordam beradi: