الفهرسة الكلمة الحجج باستخدام سلسلة في بايثون
-
26-12-2019 - |
سؤال
أنا في حيرة مع بيان "طباعة(kw,":",كلمات[kw])" في البرنامج التالي في بيثون.
def cheeseshop(kind,*arguments,**keywords):
print("--Do you have any",kind,"?")
print("--I'm sorry, we're all out of",kind)
for arg in arguments:
print(arg)
print("-"*40)
print(keywords)
keys=sorted(keywords)
print(keys)
for kw in keys:
print(kw,":",keywords[kw])
cheeseshop("Limburger", "It's very runny, sir.",
"It's really very, VERY runny, sir.",
shopkeeper="Michael Palin",
client="John Cleese",
sketch="Cheese Shop Sketch")
والنتيجة هي أدناه:
--Do you have any Limburger ?
--I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
{'client': 'John Cleese', 'sketch': 'Cheese Shop Sketch', 'shopkeeper': 'Michael Palin'}
['client', 'shopkeeper', 'sketch']
client : John Cleese
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
في فكرتي "kw" يجب أن يكون 'العميل', 'رسم' و 'متجر', لا أرقام ، ثم كيف يمكن أن "kw" أن مؤشر الكلمات الرئيسية في البيان "طباعة(kw,":",كلمات[kw])"?
للتحقق من فكرتي أنا أيضا جربت برنامج آخر:
letters=['a','b']
for kw in letters:
print(letters[kw])
معقول الرد للملوثات العضوية الثابتة:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
TypeError: list indices must be integers, not str
وعلاوة على ذلك يخلط لي عن مشكلة حصلت في الجزء الأول من البرنامج.أعتقد أنه يجب أن يطفو على السطح نفس الخطأ لي.
المحلول
وظيفة الحجج سبق مع **
تسمى "الكلمة الحجج" الذي أخذ اسمه المعلمات عند استدعاء الدالة, على سبيل المثال: client="John Cleese"
في المثال الخاص بك.في هذه الحالة, "العميل" هو اسم "جون كليز" هو القيمة.الوسيطات التي تم تمريرها بهذه الطريقة يتم وضعها في dict
, الذي هو تخزين قيمة المفتاح بدلا من القائمة التي كنت قد يكون على دراية في شكل
x = {
"foo": "bar"
}
print x["foo"] # prints "bar"