কিভাবে অন্য স্ক্রিপ্ট থেকে একটি ফাংশন সক্রিয় করতে


উত্তর 1:

আপনার মূল কোডটি হ'ল:

Def func1 (): a = 8 খ = 9ডিএফ ফানক 2 (x, y): z = x + y + a + খ রিটার্ন জেডa = func2 (4,6)মুদ্রণ (ক)

এই কাজ করার বিভিন্ন উপায় আছে :

# ফেরতের মানগুলি ব্যবহার করুন # সুস্পষ্ট থাকুন যে ফানক 2 এ কল ফলাফলের উপর নির্ভর করে # ফানক 1 এ কলDef func1 (): a = 8 খ = 9 রিটার্ন ক, খডিএফ ফানক 2 (এক্স, ওয়াই, আরগস): a, b = * আরগস # টি আর্গুমেন্ট থেকে প্যাক করুন z = x + y + a + খ রিটার্ন জেডa = func2 (4,6, টিমগুলি = ফানক 1 ())মুদ্রণ (ক)# তবে আপনি করতে পারেন: a = func2 (4,6, আরগস = (9,11)) # আপনার ডেটা তৈরি করতে আপনার কোনও ক্রিয়াকলাপের প্রয়োজন নেই

বা

# পাস ফাংশন: # এই সমাধানে আপনি কল করার সময় আপনি স্পষ্ট হয়ে যাচ্ছেন # ফানক 2 যা এটি ফানক 1: কল করতে হবে: ফানক 1 একটি সহায়ক ফাংশনDef func1 (): a = 8 খ = 9 রিটার্ন ক, খডিএফ ফানক 2 (x, y, ফানক): ক, খ = ফানক () z = x + y + a + খ রিটার্ন জেডa = func2 (4,6, ফানক 1)মুদ্রণ (ক)# আপনার যদি অন্য একটি ফাংশন থাকে যা মানগুলির এক জোড়া তৈরি করে # আপনি এটি পাস করতে পারে

আমি বলব মোটেও গ্লোবালগুলি ব্যবহার করবেন না - এগুলি দ্রুত সমাধানের মতো দেখায় তবে এগুলি প্রবেশ করার খুব খারাপ অভ্যাস।

সংজ্ঞা অনুসারে গ্লোবালগুলি আপনার ফাংশনটি কীভাবে কাজ করে যা আপনার ফাংশনের আর্গুমেন্টের বাইরে রয়েছে সে সম্পর্কে তথ্য উপস্থাপন করে যা আপনার ফাংশনটিকে পরীক্ষা করা আরও বেশি কঠিন করে তুলতে পারে - কারণ এখন আপনাকে আপনার ফাংশনে যুক্তিগুলি পাস করতে হবে এবং পৃথকভাবে প্রাসঙ্গিক বৈশ্বিক মানগুলি যথাযথভাবে সেট করতে হবে আপনার ফাংশনটি পরীক্ষা করার জন্য (আপনি নিজের ফাংশনগুলি পরীক্ষা করেন, আপনি করেন না)। কখনও কখনও গ্লোবাল ডেটা (উদাহরণস্বরূপ ডাটাবেসগুলি, বাহ্যিক ওয়েব সাইটগুলি) থেকে দূরে থাকা অসম্ভব হয়ে পড়ে এবং আপনার বাহ্যিক ডেটা থাকলে আপনার কোড পরীক্ষা করার জন্য আপনাকে কখনও কখনও হুপসের মধ্য দিয়ে ঝাঁপিয়ে পড়তে হয় - তবে নিজের জীবনকে আরও জটিল করে তুলবেন না life ।


উত্তর 2:

এটি প্রতিটি ফাইলে কোডের উপর নির্ভর করে তবে উত্তরটি মূলত একই রকম:

ফাংশনটি কোনও বস্তুর কোনও পদ্ধতি, বা মডিউলে খালি নগ্ন, আপনি যেখানেই এটি ঘোষণা করতে যেখানেই ব্যবহার করতে চান যেখানেই এটিকে আমদানি করতে পারবেন।

কোনও বস্তুতে আপনার ফাংশন এম্বেড না করার জন্য আপনার কাছে ভাল কারণ থাকতে পারে তবে আপনি সেই কারণটি বৈধ করতে চাইবেন। এর পক্ষে এবং বিপক্ষে বুদ্ধিমান যুক্তি রয়েছে।

পাইথন কোডের একটি ফাইলকে একটি 'মডিউল' বলি। সুবিধামতভাবে, পাইথন মডিউলগুলি আমাদের ঘোষণাগুলি বিশ্বব্যাপী নেমস্পেসের বাইরে রাখার জন্য একটি "ফ্রি" নেমস্পেস দেয়, যেখানে তারা কোডের অন্য কোথাও বর্তমান বা ভবিষ্যতের ঘোষণার সাথে সংঘর্ষে থাকতে পারে।

ঘনিষ্ঠভাবে সম্পর্কিত মডিউলগুলির একটি ডিরেক্টরি কাঠামোকে প্যাকেজ বলা হয়।

সম্পর্কযুক্ত মডিউলগুলির একটি ডিরেক্টরি কাঠামোকে বলা হয় ... একটি জগাখিচুড়ি।

যে কোনও ক্ষেত্রে, যদি একটি মডিউল, foo.py নামক কোনও ফাইলে সঞ্চিত থাকে তবে বার নামের একটি ফাংশন রয়েছে:

ডিএফ বার (জিনিস 1, জিনিস 2): ফর্ম্যাট (জিনিস 1, জিনিস 2) "{0 format, {1}" ফিরে আসুন// মুহুর্তের জন্য এটিকে উপেক্ষা করুন Def yoda_speak (জিনিস 1, জিনিস 2): "{0}, {1}" ফর্ম্যাট (জিনিস 2, জিনিস 1) প্রদান করুন

... তারপরে, অন্য কোনও ফাইলে আপনি মডিউল ফু থেকে ফাংশন বারটি আমদানি করতে পারেন:

ফু আমদানি বার থেকেজিনিস = বার ("আমদানি করা", "এটি")

… বা, আপনি পুরো মডিউল ফু আমদানি করতে পারবেন, সমস্ত একবারে তার সমস্ত ফাংশনে অ্যাক্সেস পাবেন, যদি আপনি নিশ্চিত হন যে আপনি সেগুলি সবই চাইবেন ... যতক্ষণ না আপনি তাদের নাম স্থান দ্বারা উল্লেখ করেন (যেমন foo.function_name () )…

আমদানি Footwo_things = foo.bar ("এটির সাথে যত্নশীল", "তবে আপনি এই মডিউলে সমস্ত ফাংশন আমদানি করতে পারেন") yoda_speak = foo.anti_bar ("এটি", "পিছনে")

উত্তর 3:

এমন একটি মামলা রয়েছে যা আপনি আপনার প্রশ্নে যা বর্ণনা করেছেন ঠিক তেমনটি করে, যদিও এটি আপনার ব্যবহারের ক্ষেত্রে নাও হতে পারে। এটি একটি * ক্লোজার *।

ডিএফ মাইফঙ্কশন (ক): খ = 2 * ক ডিএফ মায়োথারফংশন (সি): রিটার্ন খ * গ myotherfunction ফিরে

মায়োথার ফাংশন কার্যকরভাবে একটির একটি অনুলিপি রাখে, যা প্রতিবার ব্যবহৃত হবে

মায়োথর = মাইফ্যাংশন (5)ফলাফল = মায়োদার (5)মুদ্রণ (ফলাফল)

যা মুদ্রণ করবে: 50

স্থানীয় ভেরিয়েবল বি একটি * 2 এর ফলাফল, যা আমাদের ক্ষেত্রে 5 ছিল my এটি মায়োথারফংশনের জন্য একটি রেফারেন্স হিসাবে রাখা হয়েছে যা প্রত্যাবর্তনের মান

প্রতিবার ফিরে ফাংশনটি চালু করার সময় এটি আর্গুমেন্ট সিটিকে স্থানীয় ভেরিয়েবল বি এর গুণকে গুণবে যা রেফারেন্স হিসাবে রাখা হয়েছে।


উত্তর 4:

আমি আরও একটি উপায় প্রস্তাব করব, যদিও একটি ক্লাস এবং পদ্ধতি এবং বৈশিষ্ট্যগুলি ব্যবহার করার উপায়।

'' ' সুস্পষ্ট সমাধান, একটি পরিবর্তনীয় মাধ্যমে তথ্য প্রেরণ। আমি রাষ্ট্রের তথ্য সহ পুনরাবৃত্তি প্রোগ্রামগুলির জন্য এরকম কিছু ব্যবহার করি।'' 'আমদানি প্রিন্টডিফ এফ (ডি: ডিক) -> কোনওটি নয়: মুদ্রণ ('ফাংশন এফ: স্থানীয় ভেরিয়েবলগুলির সাথে আর্গুমেন্টের জনপ্রিয়করণ') a_local_variable = 'f আমাকে তৈরি করেছে' d ['a_local_variable_from_elsewhere'] = a_ স্থানীয় / পরিবর্তনশীলডিফ জি (ডি: ডিক) -> কোনওটি নয়: মুদ্রণ ('ফাংশন ছ: স্থানীয় বৈচিত্র্যের সাথে যুক্তি ব্যবহারের জন্য এলসিওয়ার্ড তৈরি করা হয়েছে') পিপ্রিন্ট.প্রিন্ট (d)ডিএফ প্রধান (): পাস_ভেরিয়েবল_আরউন্ড = { চ (পাস_ভেরিয়েবল_আরউন্ড) ছ (পাস_ভেরিয়েবল_আরউন্ড)প্রধান ()

উত্তর 5:
পরিবর্তনশীল = 0Def পরিবর্তন_গ্লোবাল (): গ্লোবাল ভেরিয়েবল পরিবর্তনশীল + = 1মুদ্রণ ভেরিয়েবল>>>> ঘ

গ্লোবাল কীওয়ার্ডটি কোনও ফাংশনে স্থানীয়ভাবে বৈশ্বিক ভেরিয়েবলগুলি পরিবর্তনের অনুমতি দেয়।

অন্যের মধ্যে একটি ফাংশন সংজ্ঞায়িত করা একই নামযুক্ত ভেরিয়েবলের মান পাস করে না। চেক আউট

9. ক্লাস - পাইথন 3.7.0 ডকুমেন্টেশন

পাইথনে নামকরণ কীভাবে কাজ করে তার একটি সুন্দর সংক্ষিপ্ত ব্যাখ্যার জন্য বিভাগ 9.1 এবং 9.2।


উত্তর 6:
Def func1 (): গ্লোবাল এ, খ a = 8 খ = 9ডিএফ ফানক 2 (x, y): ফানক 1 () z = x + y + a + খ রিটার্ন জেডa = func2 (4, 6)মুদ্রণ (ক)# আমি অজগর থেকে নতুন তাই আমি নিশ্চিত নই যে এটিই সেরা সমাধান। তবে এটি অন্যতম সমাধান।আপনি যদি অন্য কোনও ফাংশনে ব্যবহার করতে চান তবে তাদের ঘোষণাকালে আপনাকে মূলত ভেরিয়েবলগুলি a এবং b গ্লোবাল তৈরি করতে হবে।

উত্তর 7:

আমি নিশ্চিত যে আপনি কী বোঝাতে চাইছেন তা আমি নিশ্চিত নই। তবে আপনি যদি একটি ফাংশন অন্য ফাইলের মধ্যে আমদানি করেন তবে আমদানিকারক ফাংশনে মানগুলি প্রেরণ করতে পারেন এবং ফাংশনটি তার নিজের ফাইলে যে কোনও কিছু আপডেট করতে পারে।

তবে, যদি আমি সঠিকভাবে বুঝতে পারি (এবং এটি বেশিরভাগ ক্ষেত্রে সম্ভবত আমি না করি) তবে আপনি যা করার চেষ্টা করছেন সেটি হ'ল মডিউল গ্লোবালগুলির উপর নির্ভর করে খুব খারাপ প্রোগ্রামিং অনুশীলন।


উত্তর 8:

যদিও অবশ্যই উপায় আছে, এটি করবেন না। আপনি যদি কোনও ফাংশনের অভ্যন্তরে কিছু মান সংশোধন করতে চান এবং অন্য ফাংশনে সেই সংশোধিত মানগুলি ব্যবহার করতে চান তবে আমন্ত্রণ প্যারামিটারের মাধ্যমে প্রথম ফাংশনে পরিবর্তন করতে মানগুলি পাস করুন এবং ফাংশনের রিটার্ন মান হিসাবে পরিবর্তিত মানগুলি গ্রহণ করুন। দ্বিতীয় ফাংশনে পরিবর্তিত মানগুলি পাস করুন এবং এটির ফেরতের মানগুলি গ্রহণ করুন।

এটি ফাংশনাল প্রোগ্রামিং দৃষ্টান্তের একটি সাধারণভাবে গৃহীত সেরা অনুশীলন যা কোনও ক্রিয়াকলাপের কলিংয়ের পার্শ্ব-প্রতিক্রিয়াগুলি হ্রাস করার চেষ্টা করে (অপ্রত্যাশিতভাবে এটি অপ্রত্যাশিত)।


উত্তর 9:

আপনার প্রদত্ত কোডটি ত্রুটি ছুঁড়ে যাচ্ছে।

কেন? পাইথনের পরিবর্তনশীল স্কোপগুলি কীভাবে কাজ করে। a এবং b, ফানক () এ ঘোষিত, কেবল সেই ফাংশনকে প্রভাবিত করে, এটি তাদের সুযোগ scope

আপনি যদি কোনও ফাংশনের অভ্যন্তরে গ্লোবাল ভেরিয়েবলের মানগুলি পরিবর্তন করতে চান তবে আপনাকে অবশ্যই গ্লোবাল কীওয়ার্ডটি ব্যবহার করতে হবে:

গ্লোবাল এক্সx = 123প্রিন্ট এক্সফানক ()প্রিন্ট এক্সডিএফ ফানক (): x = 124

tl; dr আপনার কোড যেমন আছে তেমন কার্যকর হবে না।


উত্তর 10:

হ্যাঁ, আপনি এটিই খুঁজছেন। আশা করি এটা সাহায্য করবে.

ডিফ সি (): r = কাঁচা_পিন্ড ("কিছু জিজ্ঞাসা করুন?") ... রিটার্নডিফ পি (এক্স): ... কিছু কর ....আর = সি ()পি (আর)