পাইথন বিবৃতি শেষ করতে সেমিকোলনের ব্যবহারের ওয়ারেন্ট দেয় না। তাহলে কেন এটি (নীচে) অনুমোদিত?
import pdb; pdb.set_trace()
পাইথন বিবৃতি শেষ করতে সেমিকোলনের ব্যবহারের ওয়ারেন্ট দেয় না। তাহলে কেন এটি (নীচে) অনুমোদিত?
import pdb; pdb.set_trace()
উত্তর:
পাইথনের বিবৃতি শেষ করতে আধা-কলোন প্রয়োজন হয় না । আপনি যদি একই লাইনে একাধিক বক্তব্য রাখতে চান তবে আধা কলোনগুলি স্টেটমেন্টগুলি সীমিত করতে ব্যবহৃত হতে পারে।
এখন, কেন এটি অনুমোদিত? এটি একটি সাধারণ নকশার সিদ্ধান্ত। আমি মনে করি পাইথনকে এই আধা-কোলনের জিনিসটির প্রয়োজন নেই তবে কেউ কেউ মনে করেছেন এটি ভাল লাগলে এটি ভাষায় যুক্ত করা যায়।
timeit a = 5; a*a
timeitঅর্থ কী? এখনও a = 2; a*aঅপ্রয়োজনীয় a2; এটি হতে হবেa = 2; a *= a
http://docs.python.org/reference/compound_stmts.html
যৌগিক বিবৃতিতে এক বা একাধিক 'ধারা' থাকে। একটি ধারাটিতে শিরোনাম এবং একটি 'স্যুট' থাকে। একটি নির্দিষ্ট যৌগিক বিবরণের ক্লজ শিরোনামগুলি একই ইনডেন্টেশন স্তরে at প্রতিটি অনুচ্ছেদে শিরোনাম একটি অনন্য সনাক্তকরণ মূলশব্দ দিয়ে শুরু হয় এবং একটি কোলন দিয়ে শেষ হয়। একটি স্যুট হ'ল একটি ধারা দ্বারা নিয়ন্ত্রিত স্টেটমেন্টের একটি গ্রুপ। একটি স্যুট শিরোনামের একই লাইনটিতে এক বা একাধিক অর্ধবৃত্ত-বিচ্ছিন্ন সরল বিবৃতি হতে পারে, শিরোনামের কর্নেল অনুসরণ করে, বা এটি পরবর্তী লাইনগুলিতে এক বা একাধিক ইনডেন্টেড বিবৃতি হতে পারে । কেবলমাত্র স্যুটটির পরবর্তী ফর্মটিতে নেস্টেড যৌগিক বিবৃতি থাকতে পারে; নিম্নলিখিতটি অবৈধ, বেশিরভাগ কারণেই এটি স্পষ্ট হবে না যে যদি ক্লজটি থাকে তবে অন্য কোনও ধারাটি অন্তর্ভুক্ত থাকে:
if test1: if test2: print xএছাড়াও লক্ষ করুন যে সেমিকোলন এই প্রসঙ্গে কোলনের তুলনায় আরও শক্ত বাঁধা থাকে, যাতে নিম্নলিখিত উদাহরণে মুদ্রণ বিবৃতিগুলির সমস্ত বা কোনও একটিই কার্যকর হয় না:
if x < y < z: print x; print y; print z
সারমর্ম:
compound_stmt ::= if_stmt
| while_stmt
| for_stmt
| try_stmt
| with_stmt
| funcdef
| classdef
| decorated
suite ::= stmt_list NEWLINE | NEWLINE INDENT statement+ DEDENT
statement ::= stmt_list NEWLINE | compound_stmt
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
if cond: stmt1; stmt2; stmt3
পাইথন ;বিভাজক হিসাবে টার্মিনেটর হিসাবে ব্যবহার করে না। আপনি এগুলি একটি রেখার শেষেও ব্যবহার করতে পারেন, যা তাদেরকে বিবৃতি টার্মিনেটরের মতো দেখায় , তবে এটি বৈধ কারণ কেবল পাইথনে ফাঁকা স্টেটমেন্টগুলি বৈধ - এক লাইনের শেষে সেমিকোলন রয়েছে এমন দুটি বিবৃতি, দ্বিতীয় এক ফাঁকা
stmt_list ::= simple_stmt (";" simple_stmt)* [";"]
উত্তরগুলি পড়ে, আমি এখনও সেমিকোলন ব্যবহারের একটি গুরুত্বপূর্ণ দিকটি মিস করছি, সম্ভবত একমাত্র এটি যেখানে এটি সত্যই কোনও তাত্পর্য তৈরি করে ...
আপনি যখন কোনও দোভাষী আরএপিএল (পাইথন ইন্টারেক্টিভ শেল, আইডিএল, আইপিথন) এ কাজ করছেন তখন সর্বশেষ এক্সপ্রেশনটির মান স্ক্রিনে মুদ্রিত হয় এবং সাধারণত এটি হ'ল উদ্দেশ্যযুক্ত আচরণ।
তবে কিছু ক্ষেত্রে আপনি কেবলমাত্র এর পার্শ্ব প্রতিক্রিয়াগুলির জন্য একটি অভিব্যক্তি মূল্যায়ন করতে চান, উদাহরণস্বরূপ, আপনার সিমুলেশনটির প্লট করা ফলাফলগুলি দেখতে matplotlib।
এই ক্ষেত্রে আপনি (সম্ভবত) এর screenful দেখতে না চান reprগুলি matplotlibযে বস্তু কখনও কখনও একটি একটি কল দ্বারা ফিরে করছে matplotlibঅন্তত IPython ফাংশন, এবং সম্ভাবনার আপনি এক একটি সেমিকোলন যোগ হয় মাত্রাতিরিক্ত বাগাড়ম্বরপূর্ণ বিবৃতি, এখন IPython দুটি এক্সপ্রেশন, সুরারোপিত ইনপুট লাইন সূচিত matplotlibআবাহন এবং একটি নাল বিবৃতি, যাতে যৌগ মত প্রকাশের মান Noneএবং কিছুই (অন্যান্য সম্ভাবনা হচ্ছে দোভাষীর মধ্য পর্দায় ছাপা হয় নিয়োগ , হিসাবে _ = plot(...)তবে আমি দেখতে পাই যে এটি আরও খানিকটা অনুপ্রবেশকারী)।
আইএমএইচও, ইন্টারপ্রেটারে পছন্দসই আউটপুট দমন করতে সেমিকোলনের ব্যবহার আইপিটন নোটবুকের প্রবর্তনের পরে আরও প্রাসঙ্গিক হয়ে উঠেছে, যা ডকুমেন্টেশন এবং শেষ পুনরায় ব্যবহারের জন্য একটি দোভাষী সেশনের গ্রাফিক্যাল আউটপুট সহ ইনপুট এবং আউটপুট সংরক্ষণের অনুমতি দেয় that ।
ipython... আপনার মন্তব্যটি প্রতিবিম্বিত করতে আমি আমার উত্তর সম্পাদনা করেছি।
অন্য প্রত্যেকে যেমন মন্তব্য করেছেন, আপনি পৃথক বিবৃতি পৃথক করতে সেমিকোলন ব্যবহার করতে পারেন। আপনি না আছে , এবং এটা স্বাভাবিক শৈলী নয়।
কেন এটি দরকারী, কিছু লোক দুটি বা ততোধিক তুচ্ছ সংক্ষিপ্ত বিবৃতি একটি লাইনে রেখে দিতে পছন্দ করেন (ব্যক্তিগতভাবে আমি মনে করি এটি বেশ কয়েকটি তুচ্ছ সহজেই স্কিমযুক্ত লাইনগুলিকে একটি জটিল চেহারার লাইনে পরিণত করে এবং এটি তুচ্ছ হিসাবে এটি দেখতে আরও শক্ত করে তোলে) ।
আপনি যখন শেলটি দিয়ে পাইথনটিতে একটি লাইনার ব্যবহার করছেন তখন এটি প্রায় প্রয়োজন python -c '<some python code>'। এখানে আপনি পৃথক বিবৃতি পৃথক করতে ইন্ডেন্টেশন ব্যবহার করতে পারবেন না , সুতরাং আপনার ওয়ান-লাইনারটি যদি সত্যিই দ্বি-লাইনার হয় তবে আপনাকে একটি সেমিকোলন ব্যবহার করতে হবে। এবং যদি আপনি আপনার ওয়ান-লাইনারে অন্য যুক্তি ব্যবহার করতে চান তবে আপনাকে sysপেতে আমদানি করতে হবে sys.argv, যার জন্য পৃথক importবিবৃতি প্রয়োজন। যেমন
python -c "import sys; print ' '.join(sorted(sys.argv[1:]))" 5 2 3 1 4
1 2 3 4 5
python: কেবলমাত্র আপনার উদ্ধৃত কোডটি একাধিক লাইনের উপরে বিস্তৃত করুন বা একটি হেরিডোক ব্যবহার করুন। তবুও, যদি আপনি এটি "ওয়ান-লাইনার" হতে চান তবে এটি ব্যর্থ হয়। ;)
-c
আমি বুঝতে পেরেছি যে আমি একজন পুরানো সি প্রোগ্রামার হিসাবে পক্ষপাতিত্ব করছি, কিন্তু বিভিন্ন সময় পাইথনের বিভিন্ন সম্মেলনগুলি অনুসরণ করা কঠিন করে তোলে। আমি ইনডেন্ট কনভেনশনটি মাঝে মাঝে কিছুটা বিরক্তি পাই।
কখনও কখনও, যখন কোনও বিবৃতি বা ব্লক শেষ হয় তার স্পষ্টতা খুব দরকারী। স্ট্যান্ডার্ড সি কোড প্রায়শই এরকম কিছু পড়বে:
for(i=0; i<100; i++) {
do something here;
do another thing here;
}
continue doing things;
যেখানে আপনি অনেক স্পষ্টতার জন্য সাদা স্থান ব্যবহার করেন - এবং লুপটি কোথায় শেষ হয় তা সহজেই দেখা যায়।
পাইথন আপনাকে একটি (alচ্ছিক) সেমিকোলন দিয়ে শেষ করতে দেয়। উপরে উল্লিখিত হিসাবে, এর অর্থ এই নয় যে 'নাল' বিবৃতি অনুসরণ করে মৃত্যুদণ্ড কার্যকর করার জন্য একটি বিবৃতি রয়েছে। সুতরাং, উদাহরণস্বরূপ,
print(x);
print(y);
হিসাবে একই
print(x)
print(y)
যদি আপনি বিশ্বাস করেন যে প্রতিটি লাইনের শেষে প্রথমে একটি নালিকা আছে, তবে প্রস্তাবিত হিসাবে এটি চেষ্টা করুন:
print(x);;
এটি একটি সিনট্যাক্স ত্রুটি নিক্ষেপ করবে।
ব্যক্তিগতভাবে, আমি যখন আপনার অনেক যুক্তি এবং / অথবা দীর্ঘ-নামযুক্ত আরোগুলি সহ প্রচুর নেস্টিং এবং ফাংশনগুলি পাই তখন কোডটি আরও পঠনযোগ্য করে তুলতে আমি সেমিকোলনটি পাই। সুতরাং, আমার চোখে, এটি অন্যান্য পছন্দগুলির তুলনায় অনেক বেশি পরিষ্কার:
if some_boolean_is_true:
call_function(
long_named_arg_1,
long_named_arg_2,
long_named_arg_3,
long_named_arg_4
);
যেহেতু, আমার কাছে এটি আপনাকে জানতে দেয় যে শেষ ')' কিছু 'ব্লক' শেষ করে যা বহু লাইনে ছড়িয়ে পড়ে।
আমি ব্যক্তিগতভাবে মনে করি পিইপি শৈলীর গাইডলাইন, আইডিইগুলি যেগুলি প্রয়োগ করে এবং সেখানে বিশ্বাস রয়েছে যে 'জিনিসগুলি করার একমাত্র পাইথোনিক উপায় রয়েছে of যদি আপনি পরে বিশ্বাস করেন তবে কীভাবে সংখ্যার ফর্ম্যাট করবেন তা দেখুন: এখন পর্যন্ত পাইথন এটি করার জন্য চারটি পৃথক উপায়ে সমর্থন করে।
আমি নিশ্চিত যে আমি কিছু ডিহার্ডদের দ্বারা উদ্দীপ্ত হব, তবে যুক্তিটির দীর্ঘ বা সংক্ষিপ্ত নাম থাকলে সংকলক / দোভাষীর কোনও যত্ন নেই, এবং - তবে পাইথনে ইন্ডেন্টেশন কনভেনশন করার জন্য - হোয়াইটস্পেসের বিষয়ে যত্ন নেই। কোড নিয়ে সর্বাধিক সমস্যা হ'ল অন্য কোন মানুষকে (এবং এমনকি কয়েক মাস কাজ করার পরেও নিজেকে) স্পষ্ট করে দেওয়া হচ্ছে কী হচ্ছে তা বুঝতে, কোথায় জিনিস শুরু এবং শেষ ইত্যাদি etc.
সেমিকোলনগুলি বৈধ বাক্য গঠনের অংশ: 8. যৌগিক বিবৃতি (পাইথন ভাষার উল্লেখ)
" যখন পাইথনস অ্যাটাক হয় " এর একটি উক্তি
সেমিকোলন দিয়ে আপনার সমস্ত বিবৃতি শেষ করবেন না। পাইথনে এটি করা প্রযুক্তিগতভাবে আইনী, তবে আপনি যদি একক লাইনে একাধিক বক্তব্য রাখেন না তবে তা সম্পূর্ণরূপে অযথা (যেমন, x = 1; y = 2; z = 3)।
x,y,z = 1,2,3?
x, y, z = 1, 2, 3এটি ধীরে ধীরে কারণ এটি একটি টিউপল তৈরির জন্য একটি অপ্রয়োজনীয় বৃত্তাকার ভ্রমণ এবং তত্ক্ষণাত তা এটিকে বিচ্ছিন্ন করে দেয়। (যাইহোক, আমি সত্যিই ভাবি না যে @ কম্যুনিস্ট্প্যানকেক x=1; y=2; z=3প্যাটার্নটির পরামর্শ দিচ্ছে I যদিও আমি মনে করি সে / সে কেবলমাত্র
এক লাইনে একাধিক স্টেটমেন্টগুলিতে সেমিকোলনগুলি বিভাজক হিসাবে অন্তর্ভুক্ত থাকতে পারে। উদাহরণস্বরূপ: http://docs.python.org/references/compound_stmts.html আপনার ক্ষেত্রে, এটি ডিবাগারটি ভাঙ্গার জন্য একটি পয়েন্ট সহজেই সন্নিবেশের জন্য করে তোলে।
এছাড়াও, লার্নিং পাইথন বইয়ে মার্ক লুটজ যেভাবে উল্লেখ করেছেন , সেমিকোলন দ্বারা আপনার সমস্ত বিবৃতি শেষ করা প্রযুক্তিগতভাবে আইনগত (যদিও অপ্রয়োজনীয় এবং বিরক্তিকর) is
সেমিকোলনগুলি এক লাইনে দুই বা ততোধিক কমান্ড ব্যবহার করা যেতে পারে। এগুলি ব্যবহার করতে হবে না, তবে সেগুলি সীমাবদ্ধ নয়।
সেমিকোলন (;) একক লাইনে একাধিক বক্তব্যকে মঞ্জুরি দেয় যে প্রদত্ত বিবৃতিতে কোনও নতুন কোড ব্লক শুরু হয় না।
http://www.tutorialspoint.com/python/python_basic_syntax.htm
সেমিকোলন (যেমন বিন্দু, কমা এবং প্রথম বন্ধনী) ধর্মীয় যুদ্ধের কারণ হয়ে থাকে। তবুও, তারা (বা কিছু অনুরূপ প্রতীক) বিভিন্ন কারণে যে কোনও প্রোগ্রামিং ভাষায় কার্যকর।
ব্যবহারিক: একই লাইনে ধারণাগতভাবে সংযুক্ত কয়েকটি সংক্ষিপ্ত কমান্ড রাখার ক্ষমতা। সরু সাপের মতো দেখতে এমন কোনও প্রোগ্রামের পাঠ্যটিতে নিউলাইনগুলি এবং ইনডেন্টেশন দ্বারা উদ্দিষ্ট উদ্দেশ্যগুলির বিপরীত প্রভাব রয়েছে যা কাঠামো হাইলাইট করছে।
ধারণাগত: পুরানো দিনগুলিতে "সুন্দর-প্রিন্টিং" নামে পরিচিত প্রেজেন্টেশন (উদাহরণস্বরূপ নিউলাইন) থেকে খাঁটি বাক্য গঠন (এই ক্ষেত্রে কমান্ডের অনুক্রমের জন্য) উদ্বেগের বিচ্ছেদ।
পর্যবেক্ষণ: হাইলাইট স্ট্রাকচারের জন্য, ইনডেন্টেশনটি সুস্পষ্ট উপায়ে উল্লম্ব রেখাগুলি দ্বারা বাড়ানো / প্রতিস্থাপন করা যেতে পারে, একটি "ভিজ্যুয়াল রুলার" হিসাবে পরিবেশন করা হয় যেখানে কোনও ইনডেন্টেশন শুরু হয় এবং শেষ হয় তা দেখতে। বিভিন্ন রঙ (যেমন প্রতিরোধকের জন্য বর্ণ কোড অনুসরণ করা) ভিড়ের জন্য ক্ষতিপূরণ দিতে পারে।
এটি অনুমোদিত, কারণ লেখকরা এটির অনুমতি দেওয়ার সিদ্ধান্ত নিয়েছে: https://docs.python.org/2/references/simple_stmts.html
যদি লেখকরা কেন এই কাজটি করতে চান তা নিয়ে যান তবে আমার ধারণা, এটি সেহেতু কমপক্ষে নিম্ন স্তরের ল্যাজেজে সাধারণ বিবৃতি সমাপ্তি হিসাবে আধা-কলামের অনুমতি দেওয়া হয়েছে: সি ++, সি, সি #, আর, মতলব, পার্ল, ...
সুতরাং অন্যান্য ভাষার পটভূমির লোকদের জন্য পাইথনের ব্যবহারে তত দ্রুত। এবং এই জাতীয় ডেসিসনে সাধারণতার কোনও ক্ষতি নেই।
সেমিকোলন (";") কেবলমাত্র একই ব্লকের মধ্যে বিবৃতি পৃথক করার জন্য প্রয়োজন যেমন আমাদের নীচের সি কোড রয়েছে:
if(a>b)
{
largest=a; //here largest and count are integer variables
count+=1;
}
এটি দুটি ফর্মের যে কোনও একটিতে পাইথনে লেখা যেতে পারে:
if a>b:
largest=a
count=count+1
অথবা
if a>b: largest=a;count=count+1
উপরের উদাহরণে আপনার কোনও ifব্লকের মধ্যে প্রচুর বিবৃতি থাকতে পারে এবং ";" দ্বারা পৃথক করা যায়; পরিবর্তে.
আশা করি উপরোক্ত ব্যাখ্যার মতো কিছুই সহজ নয়।
এখানে উপস্থিত বিস্তৃত জ্ঞানের
সাথে যোগ করা, এটি ম্যাটপ্ল্লোব লাইব্রেরির সাথে সম্পর্কিত একটি উত্তর
import numpy as np
import matplotlib as plt
%matplotlib notebook
linear_data = np.array([1, 2, 3, 4, 5, 6, 7, 8])
quadratic_data = linear_data**2
plt.figure()
xvals = range(len(linear_data))
plt.barh(xvals, linear_data, height = 0.3, color='b')
plt.barh(xvals, quadratic_data, height = 0.3, left=linear_data, color='r')
যদি আপনি বার্খ (অনুভূমিক বার) এর শেষে একটি অর্ধিকোলন সরবরাহ না করেন তবে আউটপুটটি প্লট + একটি ফাংশনের ঠিকানা। তবে আপনি যদি উভয় বার্খ রেখার শেষে অর্ধিকোলন ব্যবহার করেন তবে এটি কেবল প্লটটি দেখায় এবং ফাংশন ঠিকানার জন্য আউটপুটকে দমন করে।
এরকম কিছু: তুলনা