আর পিথন এই নীতি অনুসরণ করছে না। সাধারণত, এটি নীতি অনুসরণ করে। প্রাথমিক উদাহরণ:
>>> x = ['foo']
>>> x
['foo']
>>> x = (lambda: ['foo'])()
>>> x
['foo']
যাইহোক, পাইথন ভাব এবং বিবৃতি পৃথকভাবে সংজ্ঞায়িত করে । যেহেতু if
শাখা, while
লুপস, ধ্বংসাত্মক কার্যভার এবং অন্যান্য বিবৃতিগুলি lambda
প্রকাশের ক্ষেত্রে মোটেই ব্যবহার করা যায় না, তাই টেনেন্টের মূলনীতিটি তাদের প্রয়োগ হয় না। তবুও, কেবল পাইথন এক্সপ্রেশন ব্যবহার করে নিজেকে সীমাবদ্ধ করা এখনও একটি টুরিং সম্পূর্ণ সিস্টেম তৈরি করে। সুতরাং আমি এটিকে নীতি লঙ্ঘন হিসাবে দেখছি না; বা বরং, যদি এটি নীতি লঙ্ঘন করে, তবে বিবৃতি এবং মত প্রকাশের পৃথকভাবে সংজ্ঞা দেয় এমন কোনও ভাষা সম্ভবত নীতিটির সাথে সামঞ্জস্য করতে পারে না।
এছাড়াও, যদি lambda
অভিব্যক্তিটির প্রধান অংশটি একটি স্ট্যাক ট্রেস ক্যাপচার করছিল বা ভিএম-তে অন্য অন্তর্মুখী করছিল যা পার্থক্যের কারণ হতে পারে। তবে আমার মতে এটি লঙ্ঘন হিসাবে গণ্য করা উচিত নয়। যদি expr
এবং (lambda: expr)()
অগত্যা একই বাইটোকোডে সংকলন করা হয়, তবে নীতিটি সত্যিকারের শব্দার্থবিজ্ঞান নয়, সংকলকদের নিয়ে উদ্বেগ প্রকাশ করে; তবে যদি তারা বিভিন্ন বাইটোকোডে সংকলন করতে পারে তবে আমাদের প্রতিটি ক্ষেত্রে ভিএম রাষ্ট্রটি অভিন্ন হওয়ার আশা করা উচিত নয়।
বোধগম্য বাক্য গঠন ব্যবহার করে একটি আশ্চর্যের মুখোমুখি হতে পারে, যদিও আমি বিশ্বাস করি এটি টেনেন্ট নীতি লঙ্ঘন নয়। উদাহরণ:
>>> [x for x in xrange(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [f() for f in [lambda: x for x in xrange(10)]] # surprise!
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
>>> # application of Tennent principle to first expression
... [(lambda: x)() for x in xrange(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [f() for f in [(lambda x: lambda: x)(x) for x in xrange(10)]] # force-rebind x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> map(lambda f:f(), map(lambda x: lambda: x, xrange(10))) # no issue with this form
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
কীভাবে তালিকা বোধগম্যতা সংজ্ঞায়িত হয় তার ফলাফলটি অবাক করে দেয় surprise উপরের 'আশ্চর্য' বোধগম্যতা এই কোডের সমতুল্য:
>>> result = []
>>> for x in xrange(10):
... # the same, mutable, variable x is used each time
... result.append(lambda: x)
...
>>> r2 = []
>>> for f in result:
... r2.append(f())
...
>>> r2
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
এইভাবে দেখা যায়, উপরোক্ত 'আশ্চর্য' বোঝাপড়াটি কম বিস্ময়কর, এবং টেনেন্ট নীতি লঙ্ঘন নয়।