اقتباسات مفردة مقابل.علامات الاقتباس المزدوجة في بايثون [مغلق]

StackOverflow https://stackoverflow.com/questions/56011

  •  09-06-2019
  •  | 
  •  

سؤال

وفقًا للوثائق، فهي قابلة للتبديل إلى حد كبير.هل هناك سبب أسلوبي لاستخدام أحدهما على الآخر؟

هل كانت مفيدة؟

المحلول

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

على سبيل المثال:

LIGHT_MESSAGES = {
    'English': "There are %(number_of_lights)s lights.",
    'Pirate':  "Arr! Thar be %(number_of_lights)s lights."
}

def lights_message(language, number_of_lights):
    """Return a language-appropriate string reporting the light count."""
    return LIGHT_MESSAGES[language] % locals()

def is_pirate(message):
    """Return True if the given message sounds piratical."""
    return re.search(r"(?i)(arr|avast|yohoho)!", message) is not None

نصائح أخرى

نقلا عن المستندات الرسمية في https://docs.python.org/2.0/ref/strings.html:

في سهل الانجليزية:يمكن تضمين القيم الحرفية للسلسلة في علامات الاقتباس المفردة (') أو علامات الاقتباس المزدوجة المتطابقة (').

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

اعتدت أن أفضّل ', ، خصوصا ل '''docstrings''', ، كما أجد """this creates some fluff""".أيضًا، ' يمكن كتابتها دون يحول مفتاح على لوحة المفاتيح الألمانية السويسرية.

لقد تغيرت منذ ذلك الحين إلى استخدام علامات الاقتباس الثلاثية لـ """docstrings""", ، للتوافق بيب 257.

انا مع ويل:

  • اقتباسات مزدوجة للنص
  • علامات الاقتباس المفردة لأي شيء يتصرف كمعرف
  • حرفية سلسلة أولية مقتبسة مزدوجة للتعبيرات العادية
  • علامات الاقتباس المزدوجة الثلاثية لسلاسل المستندات

سألتزم بذلك حتى لو كان ذلك يعني الكثير من الهروب.

أحصل على أكبر قيمة من المعرفات المفردة المقتبسة التي تبرز بسبب علامات الاقتباس.بقية الممارسات موجودة فقط لمنح تلك المعرفات المفردة المقتبسة بعض المساحة للوقوف.

إذا كانت السلسلة التي لديك تحتوي على واحدة، فيجب عليك استخدام الأخرى.على سبيل المثال، "You're able to do this", ، أو 'He said "Hi!"'.بخلاف ذلك، يجب عليك ببساطة أن تكون متسقًا قدر الإمكان (داخل وحدة نمطية، داخل حزمة، داخل مشروع، داخل مؤسسة).

إذا كان سيتم قراءة التعليمات البرمجية الخاصة بك من قبل الأشخاص الذين يعملون مع C/C++ (أو إذا قمت بالتبديل بين تلك اللغات وPython)، فاستخدم '' للسلاسل ذات الحرف الواحد، و "" للسلاسل الأطول قد يساعد في تسهيل عملية الانتقال.(كما هو الحال بالنسبة لاتباع اللغات الأخرى حيث لا تكون قابلة للتبديل).

يميل كود بايثون الذي رأيته في البرية إلى تفضيله " زيادة ', ، ولكن بشكل طفيف فقط.الاستثناء الوحيد هو ذلك """these""" هي أكثر شيوعا من '''these''', ، مما رأيت.

تعد التعليقات المقتبسة الثلاثية موضوعًا فرعيًا مثيرًا للاهتمام لهذا السؤال. يحدد PEP 257 علامات الاقتباس الثلاثية لسلاسل المستندات.لقد أجريت فحصًا سريعًا باستخدام Google Code Search ووجدت ذلك علامات الاقتباس المزدوجة الثلاثية في بايثون تحظى بشعبية تبلغ حوالي 10x اقتباسات مفردة ثلاثية - 1.3 مليون مقابل 131 ألف تكرار في الكود الذي يفهرسه Google.لذا، في حالة الأسطر المتعددة، من المحتمل أن يكون الكود الخاص بك مألوفًا أكثر للأشخاص إذا كان يستخدم علامات الاقتباس المزدوجة الثلاثية.

"If you're going to use apostrophes, 
       ^

you'll definitely want to use double quotes".
   ^

لهذا السبب البسيط، أستخدم دائمًا علامات الاقتباس المزدوجة في الخارج. دائماً

عند الحديث عن الزغب، ما الفائدة من تبسيط سلسلة حرفية باستخدام "إذا كنت ستضطر إلى استخدام أحرف الهروب لتمثيل الفواصل العليا؟"هل يسيء المبرمجون إلى قراءة الروايات؟لا أستطيع أن أتخيل كم كان درس اللغة الإنجليزية في المدرسة الثانوية مؤلمًا بالنسبة لك!

تستخدم بايثون علامات الاقتباس مثل هذا:

mystringliteral1="this is a string with 'quotes'"
mystringliteral2='this is a string with "quotes"'
mystringliteral3="""this is a string with "quotes" and more 'quotes'"""
mystringliteral4='''this is a string with 'quotes' and more "quotes"'''
mystringliteral5='this is a string with \"quotes\"'
mystringliteral6='this is a string with \042quotes\042'
mystringliteral6='this is a string with \047quotes\047'

print mystringliteral1
print mystringliteral2
print mystringliteral3
print mystringliteral4
print mystringliteral5
print mystringliteral6

والذي يعطي الإخراج التالي:

this is a string with 'quotes'
this is a string with "quotes"
this is a string with "quotes" and more 'quotes'
this is a string with 'quotes' and more "quotes"
this is a string with "quotes"
this is a string with 'quotes'

أستخدم علامات الاقتباس المزدوجة بشكل عام، ولكن ليس لأي سبب محدد - ربما فقط بسبب العادة من Java.

أعتقد أنك على الأرجح تريد الفواصل العليا في سلسلة حرفية مضمنة أكثر من رغبتك في علامات الاقتباس المزدوجة.

أنا شخصياً أتمسك بواحد أو آخر.لا يهم.وتقديم المعنى الخاص بك لأي من الاقتباسات هو مجرد إرباك للآخرين عند التعاون.

ربما يكون هذا تفضيلًا أسلوبيًا أكثر من أي شيء آخر.لقد قمت للتو بفحص PEP 8 ولم أر أي إشارة إلى علامات الاقتباس المفردة مقابل المزدوجة.

أفضّل علامات الاقتباس المفردة لأنها تحتوي على ضغطة مفتاح واحدة فقط بدلاً من اثنتين.وهذا يعني أنني لست مضطرًا إلى مزج مفتاح Shift لعمل اقتباس واحد.

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

PHP يميز نفس التمييز مع Perl:لن يتم تفسير المحتوى الموجود بين علامات الاقتباس المفردة (ولن يتم تحويل حتى )، على عكس علامات الاقتباس المزدوجة التي يمكن أن تحتوي على متغيرات لطباعة قيمتها.

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

لقد اخترت استخدام علامات الاقتباس المزدوجة لأنها أسهل في رؤيتها.

أنا فقط أستخدم ما يلفت انتباهي في ذلك الوقت؛من الملائم أن تكون قادرًا على التبديل بين الاثنين لمجرد نزوة!

بالطبع، عند اقتباس حروف الاقتباس، قد لا يكون التبديل بين الاثنين أمرًا غريبًا على الإطلاق...

ذوق فريقك أو إرشادات الترميز الخاصة بمشروعك.

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

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

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

ربما يكون من المفيد التفكير في فلسفة تقليل البكسل بالطريقة التالية.هل تفضل أن تبدو الأحرف الإنجليزية A B C أو AA BB CC؟يؤدي الخيار الأخير إلى إهدار 50% من وحدات البكسل غير الفارغة.

أستخدم علامات الاقتباس المزدوجة لأنني أفعل ذلك منذ سنوات في معظم اللغات (C++ وJava وVB...) باستثناء Bash، لأنني أيضًا أستخدم علامات الاقتباس المزدوجة في النص العادي ولأنني أستخدم لوحة مفاتيح غير إنجليزية (معدلة) حيث يتطلب كلا الحرفين مفتاح Shift.

' = "

/ = \ = \\

مثال :

f = open('c:\word.txt', 'r')
f = open("c:\word.txt", "r")
f = open("c:/word.txt", "r")
f = open("c:\\\word.txt", "r")

النتائج هي نفسها

=>> لا، إنهما ليسا متماثلين.ستفلت شرطة مائلة عكسية واحدة من الأحرف.لقد حالفك الحظ في هذا المثال لأنه \k و \w ليست عمليات هروب صالحة مثل \t أو \n أو \\ أو \"

إذا كنت تريد استخدام خطوط مائلة عكسية مفردة (وتفسيرها على هذا النحو)، فأنت بحاجة إلى استخدام سلسلة "خام".يمكنك القيام بذلك عن طريق وضع "r"أمام السلسلة

im_raw = r'c:\temp.txt'
non_raw = 'c:\\temp.txt'
another_way = 'c:/temp.txt'

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top