Barcha qo'llanmalar

Python'dagi not operatori: logical negation bo'yicha to'liq qo'llanma

Python'ning not operatorini mukammal o'rganing. Bu logical negation keyword'i True/False, truthiness va murakkab shartlar bilan qanday ishlashini bilib oling.

Muallif: Kimberly Fessel

Python'ning logical operator'lari mutlaqo zerikarli... not!

90-yillarning o'sha bema'ni hazilini aytib, ko'nglimni bo'shatib olganimdan so'ng, keling, Python'da logical expression'larni inkor qilish uchun ishlatiladigan kuchli operator — not haqida gaplashamiz. not operatori dunyoni sizga teskari ko'rsatadi: True False'ga, False esa True'ga aylanadi va u bilan birga sevimli operator'laringiz (is, in va hokazo) xuddi "Teskari kun" kelgandek o'zini tutadi. not'ni Python kodining hamma joyida uchratasiz, shuning uchun unga e'tibor qaratishga arziydi.

Ushbu maqola Python'dagi not operatoriga bag'ishlangan. Siz uning nima ekanini, uni conditional statement'larga qanday qo'shishni va u != hamda ~ kabi o'xshash konstruksiyalar bilan qanday taqqoslanishini bilib olasiz. Bu ko'plab nozik jihatlarga ega bo'lgan asosiy tushuncha, shuning uchun boshlaylik.

not keyword'i Boolean operator sifatida

not keyword'i Python'dagi logical operator. U teskari Boolean qiymatni beradi: True False'ga, False esa True'ga aylanadi:

print(not True) 

# Expected result:
# False

not operatori har doim Boolean qiymat qaytaradi. U ko'pincha mantiqni soddalashtirishga yordam beradi, shunda conditional statement'lar va loop'lar uchun tozaroq kod yoza olasiz. Masalan, quyidagi if statement'i foydalanuvchida ruxsat bo'lmasa, kirish rad etilgani haqidagi xabarni chiqaradi:

if not user_has_permission: 
    print("Access denied.")

user_has_permission o'zgaruvchisi yo True, yo False bo'ladi, not esa shu Boolean o'zgaruvchini inkor qiladi.

Python'dagi not operatori: truthiness

not operatori ko'pincha Boolean expression'lar bilan birga uchrasa-da, Python'da truthiness'ni baholashda ham paydo bo'lishi mumkin. Python True va False tushunchasini an'anaviy Boolean'lardan tashqariga kengaytirish uchun qiymatlarni "truthy" yoki "falsy" deb tasniflaydi. "Falsy" qiymatlarning keng tarqalgan misollari:

  • False

  • None

  • 0, 0.0 yoki 0j

  • [], {}, () yoki set()

  • "" (bo'sh string)

  • range(0)

Qolgan deyarli hamma narsa truthy. Truthiness, shuningdek, filter()'ga shart funksiyasi sifatida None berilganda uning ishlashini ham ta'minlaydi.

Bo'sh list'lar yoki string'larni, nolga teng integer yoki float'larni, null'larni (None) yoki boshqa falsy qiymatlarni aniqlash uchun not operatoridan foydalaning. Mana bir misol:

if not list_of_values: 
    raise ValueError("The list cannot be empty.")

E'tibor bering, list_of_values bo'sh bo'lganda Python if not list_of_values'ni True deb baholaydi, chunki bo'sh list'lar falsy. O'qilishi oson va ko'proq Pythonic bo'lgani uchun bu sintaksis odatda list uzunligini tekshirishdan (if len(list_of_values) == 0) afzal ko'riladi.

Statement'larda not operatoridan foydalanish

Conditional statement'larda not ishlatilishiga oid bir nechta misollarni allaqachon ko'rdingiz. Bu not logical operatoridan foydalaniladigan asosiy joy, shuning uchun keling, yanada chuqurroq kirib, not'ni while loop'lari bilan ham ko'rib chiqamiz.

Conditional statement'lar (if statement'lari)

Conditional statement'lar ma'lum bir statement True deb baholangandagina kodning bir qismini bajarish orqali dastur oqimini boshqaradi. An'anaga ko'ra Python mantiqiy oqimni qurish uchun if, elif, else keyword'laridan foydalanadi, lekin Python'ning yangiroq versiyalari (3.10+) endi pattern'ga asoslangan tarmoqlanish uchun match'ni ham qo'llab-quvvatlaydi. Statement'larni inkor qilish uchun not operatorini shu oqimlarga qo'shing.

Quyidagi Python snippet'ida if sharti user_input o'zgaruvchisining truthiness'ini tekshiradi, elif sharti esa kiritilgan qiymat raqamli ekanini aniqlaydi. Kod kiritilgan qiymat to'g'ri ekanini tasdiqlagach, uni xavfsiz tarzda integer'ga o'giradi va kiritilgan miqdorni joriy jami summaga qo'shadi.

if not user_input: 
    print("No input provided.")
elif not user_input.isdigit():
    print("Input must be numeric.")
else: 
    number = int(user_input) 
    total = total + number

match statement'i belgilangan tartibda bir nechta pattern'lar bilan taqqoslash imkonini beradi. SQL'dagi CASE statement'i singari match har bir case'ni ketma-ket baholaydi va birinchi mos kelgan tarmoqni bajaradi. Odatda not operatorini case pattern'larining o'zida ishlatmaysiz; buning o'rniga bo'sh yoki noto'g'ri qiymatlar kabi edge case'larni match bloki boshlanishidan oldin guard clause'lar yordamida hal qilasiz:

text = ""
if not text: 
    print("No command provided.")
elif not text.isalpha(): 
    print("Invalid command format.")
else: 
    match text.lower(): 
        case "start": 
            print("Process starting.")     
        case "stop": 
            print("Process stopping.") 
        case "pause": 
            print("Process pausing.") 
        case _: 
            print("Unknown command.") 

# Expected result:
# No command provided.

while loop'lari

Python'da while loop'lari shart false bo'lgunicha kodni uzluksiz bajaradi. Bu yerda truthiness ayniqsa qo'l keladi va odatda flag'lar, collection'lar va qidiruv shartlarini tekshirish uchun loop shartlariga not qo'shasiz. not operatori loop sintaksisini "while not finished" (tugamaguncha) yoki "while not empty" (bo'sh bo'lmaguncha) kabi tabiiy tilga yaqinroq o'qilishiga yordam beradi va u ko'pincha real hayotdagi masalalarda biror narsa paydo bo'lguncha kutish uchun ishlatiladi.

Quyidagi koddagi queue bo'sh list sifatida boshlanadi, not queue True deb baholanadi, shuning uchun loop ishga tushadi. Loop ichida task_1 queue'ga qo'shiladi va list bo'sh bo'lmay qoladi (truthy). not queue False'ga aylanadi va loop to'xtaydi.

queue = [] 
while not queue: 
    print("Waiting for tasks…")     
    queue.append("task_1") 

# Expected result:
# Waiting for tasks…

not'ni boshqa logical operator'lar va murakkab shartlar bilan birlashtirish

Python kodingizga not qo'shib borar ekansiz, oxir-oqibat murakkabroq statement'lar tuzish uchun uni and, or, is yoki in kabi boshqa operator'lar bilan birga ishlatishni xohlaysiz. not operatori Python'ning bu boshqa konstruksiyalari bilan yaxshi ishlaydi, lekin yodda tutish kerak bo'lgan bir nechta muhim nozik jihatlar bor.

Logical operator'lar: and, or

and va or logical operator'lari bir nechta shartlarni birlashtirish imkonini beradi. and ikkala shartning ham True bo'lishini talab qiladi, or esa kamida bitta shartning True bo'lishini talab qiladi. Quyida Boolean qiymatlar bilan and va or'ga misol keltirilgan:

print(True and False)
print(True or False) 

# Expected result:
# False
# True

Conditional'larda ko'rganingizdek, not operatori expression'ning haqiqiylik qiymatini inkor qiladi. Undan alohida expression'larni yoki guruhlangan shartlarni inkor qilish uchun foydalanishingiz mumkin:

print((not True) and False) 
print(not (True and False)) 

# Expected result:
# False
# True

Operator precedence

Operator precedence Python expression'dagi operator'larni qaysi tartibda hisoblashini belgilaydi. Arifmetik expression'lar uchun PEMDAS haqida eshitgan bo'lishingiz mumkin. Bu ham xuddi shu g'oya, faqat Python'dagi barcha operator'larga kengaytirilgan.

Logical operator'lar uchun:

  • not'ning precedence'i and'nikidan yuqori

  • and'ning precedence'i or'nikidan yuqori

Python'da quyidagini kutishingiz mumkin:

print(not True and False) 
print(not True or False) 
print(True and False or True) 
print(True or False and False) 

# Expected result:
# False
# False
# True
# True

Comparison operator'larning (==, !=, <, > va hokazo) precedence'i logical operator'larnikidan yuqori. Python ularni not, and yoki or'dan oldin hisoblaydi. Bu shuni anglatadiki, Python not x > 4 kabi expression'larni not (x > 4) deb talqin qiladi, ya'ni avval taqqoslash bajariladi.

x = 8
print(not x > 4) #not (x > 4) → not True → False 

# Expected result:
# False

Bu koddagi chalkashlikdan x ≤ 4'ga o'tish orqali qochishingiz mumkin. Boshqa hollarda qavslar qo'shing. Qavslar har qanday sukut bo'yicha precedence'ni bekor qiladi. Ular har doim ichkaridan tashqariga qarab hisoblanadi va niyatni aniq ko'rsatish hamda o'qilishni yaxshilash uchun ishlatilishi kerak.

Murakkab shakllar: not in va is not

not operatori ikki o'zaro bog'liq operator bilan tabiiy ravishda birikib, not in va is not'ni hosil qiladi. Bular Python kodini tushunishni osonlashtiradigan compound operator'lar bo'lib, odatda in yoki is ishtirok etgan statement'larni inkor qilishdan (masalan, not (x in y) yoki not (x is y)) afzal ko'riladi.

not in membership operatori element collection'da (string, list, dictionary, set va hokazo) yo'qligini toza tarzda tekshirish imkonini beradi. U in operatorining teskarisi, mana bir misol:

dogs_in_park = ["Buddy", "Charlie", "Lola", "Tucker"] 

dog = "Sandy" 

if dog not in dogs_in_park: 
    print(f"{dog} is not at the dog park.") 

# Expected result:
# Sandy is not at the dog park.

Python'da is not — identity operatori. U ikki o'zgaruvchi xotirada bir xil obyekt emasligini aniqlaydi va siz undan ko'pincha None bilan tekshirish uchun foydalanasiz.

if x is not None: 
    processed_value = str(x).upper()
else: 
    raise ValueError("x cannot be None")

!= tengsizlik operatorini is not identity operatori bilan adashtirmang. Qiymatlarni taqqoslash uchun !='dan foydalaning, is not'ni esa identity'ni tekshirish uchun qoldiring. Masalan:

a = [1, 2, 3]
b = [1, 2, 3] 

print(a != b)
print(a is not b) 

# Expected result:
# False
# True

a va b list'larining tarkibi bir xil, shuning uchun a != b False beradi; biroq a va b xotiraning turli joylarida saqlangan, shuning uchun a is not b True qaytaradi.

not va o'xshash operator'larni taqqoslash jadvali

Operator Operator turi Nima qiladi Nimaga qo'llaniladi Keng tarqalgan qo'llanish holati Misol
not Logical Expression'ning truthiness'ini teskarisiga o'zgartiradi Har qanday expression (truthy/falsy qiymatlar) Bo'shlikni tekshirish yoki shartlarni inkor qilish if not items:
not in Membership Qiymat collection'da mavjud emasligini tekshiradi String'lar, list'lar, set'lar, dict'lar Qiymatlarni chiqarib tashlash "g" not in "cat"
is not Identity Ikki obyekt bir xil obyekt emasligini tekshiradi Obyektlar, None None tekshiruvlari, identity taqqoslashlari x is not None
!= Comparison Ikki obyekt teng emasligini tekshiradi Sonlar, string'lar, taqqoslanadigan obyektlar Qiymatlar tengsizligini tekshirish x != 10
~ Bitwise Integer'ning barcha bit'larini teskarisiga o'zgartiradi; pandas/NumPy'da Boolean qiymatlarni element bo'yicha teskarisiga o'zgartiradi Integer'lar; Boolean massivlar (pandas/NumPy) Past darajadagi bit manipulyatsiyasi; pandas/NumPy'da mask'larni inkor qilish ~5 yoki ~df["col"].isna()

Best practice'lar va keng tarqalgan xatolar

Ushbu maqolada bir nechta nozik tuzoqlarni allaqachon ko'rdingiz (operator precedence'ni noto'g'ri tushunish, !='ni is not bilan adashtirish), mana yana bir nechtasi. not operatoridan foydalanganda bu xatolarga yo'l qo'ymang.

Boolean mantiqda ikki karra inkor hosil qilish

not operatori conditional'lar va loop'larni yozishning kuchli yangi usulini beradi, lekin undan haddan tashqari ko'p foydalanmang. Shartlarni iloji boricha soddalashtirishga harakat qiling. Ingliz tilidagi kabi, bu ikki karra inkordan qochishni anglatadi.

Quyidagi ikkala conditional statement ham mantiqan ekvivalent, lekin ikkinchisi afzal, chunki uni tushunish ancha oson:

x = 2 

if not x != 1: 
    print("x is equal to 1") 

if x == 1: 
   print("x is equal to 1")

not (logical operator) va ~ (bitwise operator)'ni adashtirish

Agar not'ni ~ bilan adashtirayotgan bo'lsangiz, ehtimol pandas yoki NumPy kutubxonasidan foydalanayotgandirsiz. Bu kutubxonalarda ~ series, dataframe va massivlar ustida element bo'yicha ishlaydi va ko'pincha Boolean mask'ning har bir elementini teskarisiga o'zgartirish uchun ishlatiladi. Quyidagi snippet har bir department qiymati yo'qligini aniqlaydi, so'ng o'sha Boolean'larni ~ yordamida teskarisiga o'zgartiradi:

~df["department"].isna()

Aytaylik, buning o'rniga mask bilan not operatoridan foydalanishga urindingiz:

not df["department"].isna()

not pandas Series ustida ishlay olmaydi, chunki Series bitta Boolean qiymatga keltirilmaydi. Masalan, df[].isna() True va False qiymatlardan iborat Series qaytaradi, u esa not bilan ishlatilganda ValueError chiqaradi:

ValueError: The truth of a Series is ambiguous.

Biroq bitta qiymatli Boolean'lar bilan yoki bitta qiymatning truthiness'ini tekshirishda not operatoridan foydalanishda davom eting:

if not df.empty: 
    print("The dataframe contains rows")

Xulosa

Python'da not — Boolean'larni teskarisiga o'zgartirish va truthiness'ni inkor qilishga yordam beradigan logical operator. Uni conditional statement'larda, boshqa logical operator'lar (and, or) bilan birga va compound operator'larda (not in, is not) uchratasiz. Uni boshqa inkor operator'laridan farqlash uchun not bitta Boolean qiymat yoki bitta expression uchun mantiqiy ishlashini yodda tuting.

AI Tutor bilan ishlash orqali not haqidagi bilimingizni keyingi bosqichga olib chiqing. Boshlash uchun mana bir prompt:

Yo'l xaritalariQo'llanmalarFAQYouTube

yo'lxaritaroadmap.shasosida

Hamjamiyat tomonidan yaratilgan yo'l xaritalari, eng yaxshi amaliyotlar, loyihalar, maqolalar, manbalar va yo'nalishlar — o'z yo'lingizni tanlash va kasbingizda o'sish uchun.

© yo'lxarita·Shartlar·Maxfiylik·

roadmap.sh

Barcha kontent roadmap.sh loyihasidan olingan (© Kamran Ahmed) va shaxsiy o'rganish uchun o'zbek tiliga tarjima qilinmoqda.

Qidiruv

Yo'l xaritalari, loyihalar va savollarni qidiring