أكثر

لماذا ترجع دالة Python هذه القيمة 0 في حاسبة الحقول؟

لماذا ترجع دالة Python هذه القيمة 0 في حاسبة الحقول؟


أحاول حساب النسبة المئوية من الإجمالي الذي تحققه القيمة المتوسطة. لدي عمود مع العمود المتوسط ​​المسمى (على سبيل المثال ، العمود الأول والثاني والثالث والرابع متوسط) ، وأعمدة القيم وإجمالي جميع القيم. لقد كتبت دالة بيثون صغيرة في Codeblock وتعيد القيمة 0 بدلاً من النسبة المئوية. جميع المجالات المعنية هي دوبولي. أعلم أنني قمت بهذا بشكل صحيح من قبل ولكنني حاولت تقريبًا كل شيء لإصلاح الكود الخاص بي ولا يمكنني الحصول عليه لإرجاع أي شيء بخلاف 0. إليك لقطة شاشة لما فعلته في الآلة الحاسبة الميدانية:

وهنا الكود مكتوب:

def medfind (peri1، peri2، peri3، peri4، peri5، peri6، peri7، index، tot) :ict = {1: peri1،2: peri2،3: peri3،4: peri4،5: peri5،6: peri6،7 : peri7} return dict [index] / tot

لقد راجعت جميع الحقول مرتين وكل شيء له قيمة. لا يمكنني معرفة سبب عدم نجاحها. بالمناسبة ، هذا في ملف .shp ، وقد استخدمت هذه الوظيفة سابقًا لتحقيق النجاح.


أعتقد أن Python تواجه حالات حيثديكت [فهرس]وتوتكلاهما قيم عدد صحيح (على الرغم من أنه تم تعريفهما على أنهما زوجي في ملف الأشكال). بسبب القسمة الصحيحة ، ينتهي بك الأمر بالرقم 0 كإجابة. فمثلا:

>>> ديكت = {1: 1} >>> توت = 5 >>> ديكت [1] / توت 0

لإصلاحها ، ما عليك سوى إرسال المعلمة الأولى إلى عدد عشري:

>>> ديكت = {1: 1} >>> توت = 5 >>> عائم (ديكت [1]) / إجمالي 0.20000000000000001

لذلك سيكون رمزك الثابت:

def medfind (peri1، peri2، peri3، peri4، peri5، peri6، peri7، index، tot) :ict = {1: peri1،2: peri2،3: peri3،4: peri4،5: peri5،6: peri6،7 : peri7} return float (ict [index]) / tot

15. حساب النقطة العائمة: القضايا والقيود¶

لها قيمة 0/2 + 0/4 + 1/8. هذان الكسرين لهما قيم متطابقة ، والاختلاف الحقيقي الوحيد هو أن الأول مكتوب على أساس رمز كسري للأساس 10 ، والثاني في الأساس 2.

لسوء الحظ ، لا يمكن تمثيل معظم الكسور العشرية ككسور ثنائية بالضبط. والنتيجة هي أنه ، بشكل عام ، يتم تقريب أرقام الفاصلة العائمة التي تدخلها فقط من خلال أرقام الفاصلة العائمة الثنائية المخزنة بالفعل في الجهاز.

يسهل فهم المشكلة في البداية في الأساس 10. ضع في اعتبارك الكسر 1/3. يمكنك تقريب ذلك ككسر أساس 10:

وهكذا. بغض النظر عن عدد الأرقام التي ترغب في تدوينها ، فلن تكون النتيجة 1/3 بالضبط ، ولكنها ستكون تقريبًا أفضل بشكل متزايد بمقدار 1/3.

بالطريقة نفسها ، بغض النظر عن عدد الأرقام الأساسية 2 التي ترغب في استخدامها ، لا يمكن تمثيل القيمة العشرية 0.1 ككسر أساسي 2 تمامًا. في الأساس 2 ، 1/10 هو كسر التكرار اللانهائي

توقف عند أي عدد محدد من البتات ، وستحصل على تقدير تقريبي. في معظم الأجهزة اليوم ، يتم تقريب العوامات باستخدام كسر ثنائي مع استخدام البسط باستخدام أول 53 بتًا بدءًا من البت الأكثر أهمية والمقام على هيئة أس اثنين. في حالة 1/10 ، يكون الكسر الثنائي هو 3602879701896397/2 ** 55 وهو قريب من القيمة الحقيقية لـ 1/10 ولكنه لا يساويها تمامًا.

لا يدرك العديد من المستخدمين التقريب بسبب طريقة عرض القيم. تطبع Python تقريبًا عشريًا فقط للقيمة العشرية الحقيقية للتقريب الثنائي المخزن بواسطة الجهاز. في معظم الأجهزة ، إذا كانت Python ستطبع القيمة العشرية الحقيقية للتقريب الثنائي المخزن لـ 0.1 ، فسيتعين عليها عرضها

هذه أرقام أكثر مما يجدها معظم الناس مفيدة ، لذلك تحافظ بايثون على عدد الأرقام التي يمكن التحكم فيها من خلال عرض قيمة مقرّبة بدلاً من ذلك.

فقط تذكر ، على الرغم من أن النتيجة المطبوعة تبدو مثل القيمة الدقيقة 1/10 ، فإن القيمة المخزنة الفعلية هي أقرب كسر ثنائي يمكن تمثيله.

ومن المثير للاهتمام ، أن هناك العديد من الأرقام العشرية المختلفة التي تشترك في نفس أقرب كسر ثنائي تقريبي. على سبيل المثال ، يتم تقريب الأرقام 0.1 و 0.10000000000000001 و 0.1000000000000000055511151231257827021181583404541015625 بواسطة 3602879701896397/2 ** 55. نظرًا لأن كل هذه القيم العشرية تشترك في نفس التقريب ، يمكن عرض أي منها مع الاحتفاظ بالتقييم الثابت (repr (x)) == x.

من الناحية التاريخية ، ستختار وظيفة Python الموجه والمضمنة repr () واحدًا يحتوي على 17 رقمًا مهمًا ، 0.10000000000000001. بدءًا من Python 3.1 ، أصبح بإمكان Python (في معظم الأنظمة) الآن اختيار أقصرها وعرض 0.1.

لاحظ أن هذا من طبيعة النقطة العائمة الثنائية: هذا ليس خطأ في Python ، وليس خطأ في التعليمات البرمجية الخاصة بك أيضًا. سترى نفس النوع من الأشياء في جميع اللغات التي تدعم حساب الفاصلة العائمة لجهازك (على الرغم من أن بعض اللغات قد لا عرض الاختلاف افتراضيًا ، أو في جميع أوضاع الإخراج).

للحصول على إخراج أكثر متعة ، قد ترغب في استخدام تنسيق السلسلة لإنتاج عدد محدود من الأرقام المهمة:

من المهم أن تدرك أن هذا ، بالمعنى الحقيقي ، وهم: أنت ببساطة تقرب عرض من قيمة الآلة الحقيقية.

قد يولد وهم آخر. على سبيل المثال ، نظرًا لأن 0.1 ليس بالضبط 1/10 ، فإن جمع ثلاث قيم 0.1 قد لا ينتج عنه 0.3 بالضبط ، إما:

أيضًا ، نظرًا لأن 0.1 لا يمكن أن يقترب من القيمة الدقيقة 1/10 ولا يمكن لـ 0.3 الاقتراب من القيمة الدقيقة 3/10 ، فإن التقريب المسبق باستخدام الدالة round () لا يمكن أن يساعد:

على الرغم من أنه لا يمكن تقريب الأرقام من القيم الدقيقة المقصودة ، إلا أن الدالة round () يمكن أن تكون مفيدة للتقريب اللاحق بحيث تصبح النتائج ذات القيم غير الدقيقة قابلة للمقارنة مع بعضها البعض:

يحمل حساب النقطة العائمة الثنائي العديد من المفاجآت مثل هذه. يتم شرح مشكلة "0.1" بالتفصيل الدقيق أدناه ، في قسم "خطأ التمثيل". راجع The Perils of Floating Point للحصول على وصف أكثر اكتمالاً للمفاجآت الشائعة الأخرى.

كما يقول ذلك قرب النهاية ، "لا توجد إجابات سهلة". ومع ذلك ، لا داعي للحذر المفرط من النقطة العائمة! يتم توريث الأخطاء في عمليات تعويم Python من أجهزة الفاصلة العائمة ، وفي معظم الأجهزة تكون بترتيب لا يزيد عن جزء واحد في 2 ** 53 لكل عملية. هذا أكثر من كافٍ لمعظم المهام ، لكن عليك أن تضع في اعتبارك أنه ليس حسابًا عشريًا وأن كل عملية تعويم يمكن أن تعاني من خطأ تقريب جديد.

على الرغم من وجود حالات مرضية ، سترى النتيجة التي تتوقعها في النهاية لمعظم الاستخدامات العرضية لحساب الفاصلة العائمة إذا قمت ببساطة بتقريب عرض النتائج النهائية إلى عدد الأرقام العشرية التي تتوقعها. عادة ما يكون str () كافياً ، ولتحكم أكثر دقة ، راجع محددات تنسيق طريقة str.format () في Format String Syntax.

بالنسبة لحالات الاستخدام التي تتطلب تمثيلًا عشريًا دقيقًا ، حاول استخدام الوحدة العشرية التي تنفذ الحساب العشري المناسب لتطبيقات المحاسبة والتطبيقات عالية الدقة.

يتم دعم شكل آخر من أشكال الحساب الدقيق بواسطة وحدة الكسور التي تنفذ العمليات الحسابية بناءً على الأرقام المنطقية (لذلك يمكن تمثيل الأرقام مثل 1/3 تمامًا).

إذا كنت مستخدمًا كثيفًا لعمليات الفاصلة العائمة ، فيجب عليك إلقاء نظرة على حزمة Python العددية والعديد من الحزم الأخرى للعمليات الحسابية والإحصائية التي يوفرها مشروع SciPy. انظر & lthttps: //scipy.org>.

توفر Python الأدوات التي قد تساعد في تلك المناسبات النادرة عندما تكون حقًا فعل تريد معرفة القيمة الدقيقة للعوم. تعبر طريقة float.as_integer_ratio () عن قيمة عدد عشري ككسر:

نظرًا لأن النسبة دقيقة ، يمكن استخدامها لإعادة إنشاء القيمة الأصلية بدون خسارة:

تعبر طريقة float.hex () عن تعويم بالنظام الست عشري (الأساس 16) ، وتعطي مرة أخرى القيمة الدقيقة المخزنة بواسطة جهاز الكمبيوتر الخاص بك:

يمكن استخدام هذا التمثيل السداسي العشري الدقيق لإعادة بناء القيمة العائمة تمامًا:

نظرًا لأن التمثيل دقيق ، فهو مفيد في نقل القيم بشكل موثوق عبر إصدارات مختلفة من Python (استقلالية النظام الأساسي) وتبادل البيانات مع اللغات الأخرى التي تدعم نفس التنسيق (مثل Java و C99).

أداة أخرى مفيدة هي وظيفة math.fsum () التي تساعد على تخفيف فقدان الدقة أثناء الجمع. يتتبع "الأرقام المفقودة" حيث يتم إضافة القيم إلى المجموع الحالي. يمكن أن يحدث هذا فرقًا في الدقة الكلية بحيث لا تتراكم الأخطاء إلى النقطة التي تؤثر فيها على الإجمالي النهائي:


تنسيق السلاسل باستخدام Escape Sequences:

الصيغ ذات الوسيطات الموضعية والكلمات الرئيسية:

عندما العناصر النائبة فارغة ، ستستبدل Python القيم التي تم تمريرها عبر str.format () بالترتيب.
القيم الموجودة في طريقة str.format () هي أساسًا أنواع بيانات tuple ويمكن استدعاء كل قيمة فردية موجودة في المجموعة من خلال رقم الفهرس الخاص بها ، والذي يبدأ برقم الفهرس 0. يمكن تمرير أرقام الفهرس هذه إلى الأقواس المتعرجة التي تعمل كعناصر نائبة في السلسلة الأصلية.

بناء الجملة : <0> <1> .format (positional_argument، keyword_argument)
حدود : (positional_argument، keyword_argument)
حجة موضعية يمكن أن تكون الأعداد الصحيحة والثوابت الرقمية ذات الفاصلة العائمة والسلاسل والأحرف وحتى المتغيرات.
Keyword_argument هو في الأساس متغير يخزن بعض القيمة ، والذي يتم تمريره كمعامل.


الثوابت¶

الثوابت الموجودة في هذا القسم ذات صلة فقط بالوحدة النمطية C. يتم تضمينها أيضًا في إصدار Python النقي للتوافق.

القيمة صحيحة. مهمل ، لأن بايثون لديها الآن خيوط دائمًا.

مهملة منذ الإصدار 3.9.

القيمة الافتراضية هي الحقيقية . إذا تم تجميع Python - بدون سياق عشري ، فإن إصدار C يستخدم سياق محلي بدلاً من سياق كوريوتين محلي وتكون القيمة False. هذا أسرع قليلاً في بعض سيناريوهات السياق المتداخلة.

الجديد في الإصدار 3.9: backported إلى 3.7 و 3.8.


انشر الوظيفة

في الجزء السفلي من الصفحة ، انقر فوق نشر.

بعد النقر نشر، تقوم وحدة التحكم السحابية بإعادة التوجيه إلى صفحة نظرة عامة على وظائف السحابة.

أثناء نشر الوظيفة ، يكون الرمز المجاور لها عبارة عن قرص دوار صغير. بعد انتهاء النشر ، يتحول القرص الدوار إلى علامة اختيار خضراء:


6.1 المزيد عن الوحدات¶

يمكن أن تحتوي الوحدة النمطية على عبارات قابلة للتنفيذ بالإضافة إلى تعريفات الوظائف. تهدف هذه البيانات إلى تهيئة الوحدة النمطية. تم إعدامهم فقط أول وقت مواجهة اسم الوحدة النمطية في بيان الاستيراد. 1 (يتم تشغيلها أيضًا إذا تم تنفيذ الملف كبرنامج نصي.)

تحتوي كل وحدة نمطية على جدول الرموز الخاص بها ، والذي يتم استخدامه كجدول رموز عام بواسطة جميع الوظائف المحددة في الوحدة النمطية. وبالتالي ، يمكن لمؤلف الوحدة استخدام المتغيرات العامة في الوحدة دون القلق بشأن التعارضات العرضية مع المتغيرات العامة للمستخدم. من ناحية أخرى ، إذا كنت تعرف ما تفعله ، يمكنك لمس المتغيرات العامة للوحدة النمطية بنفس الترميز المستخدم للإشارة إلى وظائفها ، modname.itemname.

يمكن للوحدات أن تستورد وحدات أخرى. من المعتاد ولكن ليس من الضروري وضع جميع عبارات الاستيراد في بداية الوحدة (أو البرنامج النصي ، في هذا الشأن). يتم وضع أسماء الوحدات المستوردة في جدول الرموز العام لوحدة الاستيراد.

هناك متغير من بيان الاستيراد الذي يستورد الأسماء من وحدة مباشرة إلى جدول رموز وحدة الاستيراد. فمثلا:

هذا لا يقدم اسم الوحدة التي يتم أخذ الواردات منها في جدول الرموز المحلي (لذلك في المثال ، لم يتم تعريف fibo).

يوجد أيضًا متغير لاستيراد جميع الأسماء التي تحددها الوحدة:

يؤدي هذا إلى استيراد جميع الأسماء باستثناء تلك التي تبدأ بشرطة سفلية (_). في معظم الحالات ، لا يستخدم مبرمجو Python هذه الميزة لأنها تقدم مجموعة غير معروفة من الأسماء في المترجم الفوري ، وربما يخفي بعض الأشياء التي حددتها بالفعل.

لاحظ أنه بشكل عام ، فإن ممارسة الاستيراد * من وحدة أو حزمة أمر مستهجن ، لأنه غالبًا ما يؤدي إلى سوء قراءة التعليمات البرمجية. ومع ذلك ، لا بأس من استخدامه لحفظ الكتابة في الجلسات التفاعلية.

إذا كان اسم الوحدة متبوعًا باسم ، فإن الاسم التالي كما هو مرتبط مباشرة بالوحدة المستوردة.

هذا هو استيراد الوحدة بشكل فعال بنفس الطريقة التي ستعمل بها عملية الاستيراد فيبو ، مع توفر الاختلاف الوحيد في أنها فيب.

يمكن استخدامه أيضًا عند الاستخدام من نفس التأثيرات:

لأسباب تتعلق بالكفاءة ، يتم استيراد كل وحدة مرة واحدة فقط لكل جلسة مترجم. لذلك ، إذا قمت بتغيير الوحدات النمطية الخاصة بك ، فيجب عليك إعادة تشغيل المترجم الفوري - أو إذا كانت وحدة واحدة فقط تريد اختبارها بشكل تفاعلي ، فاستخدم importlib.reload () ، على سبيل المثال استيراد importlib.reload (اسم نموذجي).

6.1.1. تنفيذ الوحدات كنصوص

عند تشغيل وحدة Python باستخدام ملفات

سيتم تنفيذ الكود الموجود في الوحدة ، تمامًا كما لو قمت باستيراده ، ولكن مع تعيين __name__ على & quot__main __ & quot. هذا يعني أنه بإضافة هذا الرمز في نهاية الوحدة النمطية الخاصة بك:

يمكنك جعل الملف قابلاً للاستخدام كبرنامج نصي بالإضافة إلى وحدة نمطية قابلة للاستيراد ، لأن الكود الذي يوزع سطر الأوامر يعمل فقط إذا تم تنفيذ الوحدة كملف "رئيسي":

إذا تم استيراد الوحدة النمطية ، فلن يتم تشغيل الكود:

غالبًا ما يستخدم هذا إما لتوفير واجهة مستخدم ملائمة لوحدة نمطية ، أو لأغراض الاختبار (تشغيل الوحدة كبرنامج نصي ينفذ مجموعة اختبار).

6.1.2. مسار البحث عن الوحدة النمطية¶

عندما يتم استيراد وحدة نمطية باسم البريد العشوائي ، يبحث المترجم أولاً عن وحدة نمطية مضمنة بهذا الاسم. إذا لم يتم العثور عليه ، فإنه يبحث عن ملف يسمى spam.py في قائمة الأدلة المقدمة بواسطة المتغير sys.path. يتم تهيئة sys.path من هذه المواقع:

الدليل الذي يحتوي على نص الإدخال (أو الدليل الحالي عند عدم تحديد ملف).

PYTHONPATH (قائمة بأسماء الدلائل ، بنفس بناء الجملة مثل متغير shell PATH).

الافتراضي المعتمد على التثبيت.

في أنظمة الملفات التي تدعم الارتباطات الرمزية ، يتم حساب الدليل الذي يحتوي على نص الإدخال بعد اتباع الارتباط الرمزي. بمعنى آخر ، الدليل الذي يحتوي على الارتباط الرمزي هو ليس تمت إضافته إلى مسار بحث الوحدة النمطية.

بعد التهيئة ، يمكن لبرامج Python تعديل sys.path. يتم وضع الدليل الذي يحتوي على البرنامج النصي قيد التشغيل في بداية مسار البحث ، قبل مسار المكتبة القياسي. هذا يعني أنه سيتم تحميل البرامج النصية في هذا الدليل بدلاً من الوحدات التي تحمل الاسم نفسه في دليل المكتبة. هذا خطأ ما لم يكن الاستبدال مقصودًا. انظر قسم الوحدات القياسية لمزيد من المعلومات.

6.1.3. ملفات Python "المجمعة "¶

لتسريع وحدات التحميل ، تقوم Python بتخزين النسخة المترجمة من كل وحدة في الدليل __pycache__ أسفل وحدة الاسم. إصدار .pyc ، حيث يقوم الإصدار بترميز تنسيق الملف المترجم الذي يحتوي بشكل عام على رقم إصدار Python. على سبيل المثال ، في الإصدار 3.3 من CPython ، سيتم تخزين النسخة المجمعة من spam.py مؤقتًا كـ __pycache __ / spam.cpython-33.pyc. يسمح اصطلاح التسمية هذا بتعايش الوحدات المترجمة من إصدارات مختلفة وإصدارات مختلفة من Python.

يتحقق Python من تاريخ تعديل المصدر مقابل الإصدار المترجم لمعرفة ما إذا كان قديمًا ويحتاج إلى إعادة تجميعه. هذه عملية تلقائية بالكامل. أيضًا ، الوحدات المترجمة مستقلة عن النظام الأساسي ، لذلك يمكن مشاركة المكتبة نفسها بين الأنظمة ذات البنى المختلفة.

لا يتحقق Python من ذاكرة التخزين المؤقت في حالتين. أولاً ، يقوم دائمًا بإعادة التحويل البرمجي ولا يخزن نتيجة الوحدة التي تم تحميلها مباشرةً من سطر الأوامر. ثانيًا ، لا يتحقق من ذاكرة التخزين المؤقت إذا لم يكن هناك وحدة مصدر. لدعم التوزيع غير المصدر (المترجمة فقط) ، يجب أن تكون الوحدة المترجمة في دليل المصدر ، ويجب ألا تكون هناك وحدة مصدر.

يمكنك استخدام مفاتيح التبديل -O أو -OO في أمر Python لتقليل حجم الوحدة المترجمة. يزيل رمز التبديل -O عبارات التأكيد ، ويزيل رمز التبديل -OO كلاً من عبارات التأكيد والسلاسل __doc__. نظرًا لأن بعض البرامج قد تعتمد على توفرها ، يجب ألا تستخدم هذا الخيار إلا إذا كنت تعرف ما تفعله. الوحدات "المحسنة" لها علامة اختيار وعادة ما تكون أصغر. قد تغير الإصدارات المستقبلية تأثيرات التحسين.

لا يتم تشغيل أي برنامج بشكل أسرع عند قراءته من ملف .pyc مقارنةً بقراءته من ملف .py ، والشيء الوحيد الأسرع حول ملفات .pyc هو السرعة التي يتم تحميلها بها.

يمكن للوحدة النمطية compileall إنشاء ملفات .pyc لجميع الوحدات في الدليل.

هناك المزيد من التفاصيل حول هذه العملية ، بما في ذلك مخطط تدفق للقرارات ، في بيب 3147.


محتويات

بت اخفاء 1 تحرير

لتشغيل بتات معينة ، يمكن استخدام العملية "OR" ، باتباع مبدأ أن Y OR 1 = 1 و Y OR 0 = Y. لذلك ، للتأكد من تشغيل الشيء ، يمكن استخدام OR مع 1. لترك القليل دون تغيير ، يتم استخدام OR مع 0.

مثال: اخفاء على الحلمة الأعلى (البتات 4 ، 5 ، 6 ، 7) الحلمة السفلية (البتات 0 ، 1 ، 2 ، 3) دون تغيير.

بت اخفاء 0 تحرير

في كثير من الأحيان في الممارسة العملية ، يتم إخفاء البتات إيقاف"(أو ملثمين إلى 0) من" مقنع على"(أو ملثمين إلى 1). عندما يكون البت مع 0 ، تكون النتيجة دائمًا 0 ، أي Y AND 0 = 0. لترك البتات الأخرى كما كانت في الأصل ، يمكن أن تكون مع 1 مثل Y و 1 = ص

مثال: اخفاء إيقاف الحلمة الأعلى (البتات 4 ، 5 ، 6 ، 7) الحلمة السفلية (البتات 0 ، 1 ، 2 ، 3) دون تغيير.

الاستعلام عن حالة قليلا تحرير

من الممكن استخدام bitmasks للتحقق بسهولة من حالة البتات الفردية بغض النظر عن البتات الأخرى. للقيام بذلك ، يتم إيقاف تشغيل جميع وحدات البت الأخرى باستخدام أحادي المعامل AND كما تمت مناقشته أعلاه ومقارنة القيمة بـ 0. إذا كانت تساوي 0 ، فهذا يعني أن البتة كانت معطلة ، ولكن إذا كانت القيمة أي قيمة أخرى ، فإن البتة كانت قيد التشغيل. ما يجعل هذا الأمر مناسبًا هو أنه ليس من الضروري معرفة القيمة الفعلية ، فقط أنها ليست 0.

مثال: الاستعلام عن حالة البت الرابع

تبديل قيم البت تحرير

حتى الآن ، غطت المقالة كيفية تشغيل البتات وإيقاف تشغيلها ، ولكن ليس كلاهما في وقت واحد. في بعض الأحيان ، لا يهم حقًا ماهية القيمة ، ولكن يجب أن تكون عكس ما هي عليه حاليًا. يمكن تحقيق ذلك باستخدام عملية XOR (حصرية أو). تقوم XOR بإرجاع 1 إذا وفقط إذا كان عدد البتات الفردي هو 1. لذلك ، إذا كانت البتتان المتناظرتان هي 1 ، فستكون النتيجة 0 ، ولكن إذا كانت واحدة منهما هي 1 ، فستكون النتيجة 1. لذلك يتم عكس قيم البتات عن طريق XOR باستخدام 1. إذا كانت البتة الأصلية 1 ، فإنها تُرجع 1 XOR 1 = 0. إذا كان البت الأصلي 0 فإنه يتم إرجاع 0 XOR 1 = 1. لاحظ أيضًا أن إخفاء XOR آمن قليلاً ، مما يعني أنه لن يؤثر على البتات غير المقنعة لأن Y XOR 0 = Y ، تمامًا مثل OR.

مثال: تبديل قيم البت

لكتابة 1 و 0 تعسفيًا إلى مجموعة فرعية من البتات ، اكتب أولاً 0 ثانية إلى تلك المجموعة الفرعية ، ثم عيِّن البتات العالية:

وسيطات الوظائف تحرير

في لغات البرمجة مثل C ، تعد حقول البت طريقة مفيدة لتمرير مجموعة من الوسائط المنطقية المسماة إلى وظيفة. على سبيل المثال ، في واجهة برمجة التطبيقات الرسومية OpenGL ، يوجد أمر ، glClear () الذي يمسح الشاشة أو المخازن المؤقتة الأخرى. يمكنه مسح ما يصل إلى أربعة مخازن مؤقتة (اللون ، والعمق ، والتراكم ، ومخازن الاستنسل) ، لذلك كان من الممكن أن يأخذ مؤلفو واجهة برمجة التطبيقات (API) أربع حجج. ولكن بعد ذلك ستبدو المكالمة

وهو ليس وصفي جدا. بدلاً من ذلك ، هناك أربع بتات حقل محددة ، GL_COLOR_BUFFER_BIT و GL_DEPTH_BUFFER_BIT و GL_ACCUM_BUFFER_BIT و GL_STENCIL_BUFFER_BIT و glClear () تم الإعلان عنها على أنها

ثم يبدو استدعاء الوظيفة هكذا

داخليًا ، يمكن لوظيفة تأخذ حقل بت مثل هذا استخدام ثنائي واستخراج البتات الفردية. على سبيل المثال ، قد يبدو تطبيق glClear () كما يلي:

ميزة هذا النهج هي أن مقدار حمل الوسيطة للدالة يتم تقليله. نظرًا لأن الحد الأدنى لحجم مرجع البيانات هو بايت واحد ، فإن فصل الخيارات إلى وسيطات منفصلة سيؤدي إلى إهدار سبع بتات لكل وسيطة وسيشغل مساحة مكدس أكبر. بدلاً من ذلك ، تقبل الدوال عادةً عددًا صحيحًا أو أكثر من 32 بت ، مع ما يصل إلى 32 بت خيار في كل منها. على الرغم من كونه أنيقًا ، إلا أنه في أبسط تنفيذ ، لا يعد هذا الحل آمنًا من النوع. يتم تعريف GLbitfield ببساطة على أنه int غير موقعة ، لذلك سيسمح المترجم باستدعاء لا معنى له لـ glClear (42) أو حتى glClear (GL_POINTS). في C ++ ، سيكون البديل هو إنشاء فئة لتغليف مجموعة الحجج التي يمكن لـ glClear قبولها ويمكن تغليفها بشكل نظيف في مكتبة.

أقنعة معكوسة تحرير

يتم استخدام الأقنعة مع عناوين IP في قوائم التحكم في الوصول IP (قوائم التحكم في الوصول) لتحديد ما يجب السماح به ورفضه. لتكوين عناوين IP على الواجهات ، تبدأ الأقنعة بـ 255 ولها قيم كبيرة على الجانب الأيسر: على سبيل المثال ، عنوان IP 209.165.202.129 بقناع 255.255.255.224. أقنعة IP ACLs معكوسة: على سبيل المثال ، قناع 0.0.0.255. يسمى هذا أحيانًا القناع العكسي أو قناع حرف البدل. عندما يتم تقسيم قيمة القناع إلى ثنائي (0 و 1) ، تحدد النتائج بتات العنوان التي يجب أخذها في الاعتبار عند معالجة حركة المرور. يشير الرقم 0 إلى أنه يجب اعتبار بتات العنوان (مطابقة تامة) ، بينما يشير الرقم 1 في القناع إلى "لا تهتم". يوضح هذا الجدول كذلك المفهوم.

عنوان الشبكة (حركة المرور التي ستتم معالجتها) 10.1.1.0

عنوان الشبكة (ثنائي) 00001010.00000001.00000001.00000000

قناع (ثنائي) 00000000.00000000.00000000.11111111

استنادًا إلى القناع الثنائي ، يمكن ملاحظة أن المجموعات الثلاث الأولى (الثماني بتات) يجب أن تطابق عنوان الشبكة الثنائية المحدد تمامًا (00001010.00000001.00000001). تتكون المجموعة الأخيرة من الأرقام من "لا تهتم" (.11111111). لذلك ، كل حركة المرور التي تبدأ بـ 10.1.1. المطابقات منذ آخر ثماني بتات هي "لا تهتم". لذلك ، باستخدام هذا القناع ، تتم معالجة عناوين الشبكة من 10.1.1.1 إلى 10.1.1.255 (10.1.1.x).

اطرح القناع العادي من 255.255.255.255 لتحديد قناع معكوس ACL. في هذا المثال ، يتم تحديد القناع العكسي لعنوان الشبكة 172.16.1.0 بقناع عادي 255.255.255.0.

255.255.255.255 - 255.255.255.0 (قناع عادي) = 0.0.0.255 (قناع معكوس)

مصدر / مصدر-wildcard 0.0.0.0/255.255.255.255 يعني "أي".

المصدر / حرف البدل 10.1.1.2/0.0.0.0 هو نفسه "المضيف 10.1.1.2"

أقنعة الصور تحرير

في رسومات الكمبيوتر ، عندما يكون المقصود وضع صورة معينة فوق الخلفية ، يمكن تحديد المناطق الشفافة من خلال قناع ثنائي. [1] بهذه الطريقة ، يوجد في الواقع صورتان نقطيتان لكل صورة مقصودة: الصورة الفعلية ، حيث يتم إعطاء المساحات غير المستخدمة قيمة بكسل مع ضبط جميع وحدات البت على 0 ثانية ، بالإضافة إلى قناع، حيث يتم إعطاء مناطق الصورة المتوافقة قيمة بكسل لجميع وحدات البت مضبوطة على 0 ثانية والمناطق المحيطة بها قيمة لجميع وحدات البت مضبوطة على 1 ثانية. في العينة الموجودة على اليمين ، تحتوي البيكسلات السوداء على البتات الصفرية بالكامل وتحتوي البيكسلات البيضاء على البتات الواحدة.

في وقت التشغيل ، لوضع الصورة على الشاشة فوق الخلفية ، يقوم البرنامج أولاً بإخفاء بتات بكسل الشاشة بقناع الصورة في الإحداثيات المرغوبة باستخدام عملية البت "AND". هذا يحافظ على بيكسلات الخلفية للمساحات الشفافة بينما يعيد تعيين بتات البكسل التي ستحجبها الصورة المتداخلة بأصفار.

بعد ذلك ، يعرض البرنامج بتات بكسل الصورة عن طريق دمجها مع وحدات وحدات البكسل في الخلفية باستخدام عملية "OR". بهذه الطريقة ، يتم وضع وحدات بكسل الصورة بشكل مناسب مع الحفاظ على الخلفية المحيطة بالبكسل. والنتيجة هي تركيب مثالي للصورة فوق الخلفية.

تُستخدم هذه التقنية لطلاء مؤشرات جهاز التأشير ، في ألعاب الفيديو النموذجية ثنائية الأبعاد للأحرف والرصاص وما إلى ذلك (العفاريت) ، ولرموز واجهة المستخدم الرسومية ، ولحقوق ملكية الفيديو وتطبيقات خلط الصور الأخرى.

على الرغم من ارتباطها (نظرًا لاستخدامها لنفس الأغراض) ، إلا أن الألوان الشفافة وقنوات ألفا هي تقنيات لا تتضمن مزج بكسل الصورة عن طريق التقنيع الثنائي.

تعديل جداول التجزئة

لإنشاء دالة تجزئة لجدول تجزئة ، غالبًا ما يتم استخدام دالة لها مجال كبير. لإنشاء فهرس من ناتج الوظيفة ، يمكن استخدام نموذج لتقليل حجم المجال لمطابقة حجم المصفوفة ، ومع ذلك ، غالبًا ما يكون من الأسرع في العديد من المعالجات تقييد حجم جدول التجزئة إلى صلاحيات حجمين واستخدام قناع بت بدلاً من ذلك.


ثوابت المنطقة الزمنية¶

إزاحة المنطقة الزمنية DST المحلية ، بالثواني غرب التوقيت العالمي المنسق ، إذا تم تحديد واحدة. هذا سلبي إذا كانت المنطقة الزمنية DST المحلية شرق التوقيت العالمي المنسق (كما هو الحال في أوروبا الغربية ، بما في ذلك المملكة المتحدة). استخدم هذا فقط إذا كان ضوء النهار غير صفري. انظر الملاحظة أدناه.

غير صفرية إذا تم تحديد منطقة زمنية DST. انظر الملاحظة أدناه.

إزاحة المنطقة الزمنية المحلية (غير DST) ، بالثواني غرب التوقيت العالمي المنسق (سلبي في معظم أوروبا الغربية ، إيجابي في الولايات المتحدة ، صفر في المملكة المتحدة). انظر الملاحظة أدناه.

مجموعة من سلسلتين: الأولى هي اسم المنطقة الزمنية المحلية غير التوقيت الصيفي ، والثانية هي اسم المنطقة الزمنية المحلية بالتوقيت الصيفي. إذا لم يتم تحديد منطقة زمنية DST ، فلا يجب استخدام السلسلة الثانية. انظر الملاحظة أدناه.

بالنسبة إلى ثوابت المنطقة الزمنية المذكورة أعلاه (altzone ، وضوء النهار ، والمنطقة الزمنية ، و tzname) ، يتم تحديد القيمة من خلال قواعد المنطقة الزمنية السارية في وقت تحميل الوحدة النمطية أو آخر مرة يتم فيها استدعاء tzset () وقد تكون غير صحيحة للأوقات في الماضي. يوصى باستخدام نتائج tm_gmtoff و tm_zone من localtime () للحصول على معلومات المنطقة الزمنية.

واجهة أكثر شيوعًا للتواريخ والأوقات.

خدمات التدويل. يؤثر الإعداد المحلي على تفسير العديد من محددات التنسيق في strftime () و strptime ().

الوظائف العامة المتعلقة بالتقويم. timegm () هو معكوس gmtime () من هذه الوحدة.

تم إهمال استخدام٪ Z الآن ، ولكن لا يتم دعم الهروب٪ z الذي يتم توسيعه إلى إزاحة الساعة / الدقيقة المفضلة من قبل جميع مكتبات ANSI C. أيضا ، قراءة صارمة للأصل 1982 RFC 822 المكالمات القياسية للسنة المكونة من رقمين (٪ y بدلاً من٪ Y) ، ولكن انتقلت الممارسة إلى 4 سنوات قبل عام 2000 بفترة طويلة. بعد ذلك ، RFC 822 عفا عليها الزمن وتم التوصية بالسنة المكونة من 4 أرقام لأول مرة بواسطة RFC 1123 ومن ثم بتكليف RFC 2822.


شاهد الفيديو: Python tutorial - Function to return values. دالة تعيد اكثر من قيمة