পাইথনের একটি ফাংশন থেকে আমি কীভাবে দুটি মান ফিরিয়ে দিতে পারি?


194

আমি দুটি পৃথক ভেরিয়েবলের একটি ফাংশন থেকে দুটি মান ফিরিয়ে দিতে চাই। উদাহরণ স্বরূপ:

def select_choice():
    loop = 1
    row = 0
    while loop == 1:
        print('''Choose from the following options?:
                 1. Row 1
                 2. Row 2
                 3. Row 3''')

        row = int(input("Which row would you like to move the card from?: "))
        if row == 1:
            i = 2
            card = list_a[-1]
        elif row == 2:
            i = 1
            card = list_b[-1]
        elif row == 3:
            i = 0
            card = list_c[-1]
        return i
        return card

এবং আমি এই মানগুলি আলাদাভাবে ব্যবহার করতে সক্ষম হতে চাই। যখন আমি ব্যবহার করার চেষ্টা করেছি return i, card, এটি একটি ফিরে আসে tupleএবং এটি আমি চাই না।


দয়া করে এই প্রত্যাশিত ফাংশনটি কল করার এবং এর রিটার্ন মান (গুলি) ব্যবহার করার একটি উদাহরণ সরবরাহ করুন, যাতে আপনি কেন টিউপস চান না তা এটি পরিষ্কার হয়ে যায়।
বেরিয়াল

2
লুপটির কী লাভ?
সোভেন মারনাচ

else: continueরিটার্নের স্টেটমেন্টগুলির আগে একটি হওয়া উচিত
মেশিনে


হ্যাঁ, আমিও শুধু লক্ষ্য করেছি যে, এই সদৃশ stackoverflow.com/questions/38508/...
lpapp

উত্তর:


398

আপনি দুটি মান ফিরিয়ে দিতে পারবেন না, তবে আপনি একটি tupleবা একটি ফিরে আসতে পারেন listএবং কল করার পরে এটি আনপ্যাক করতে পারেন :

def select_choice():
    ...
    return i, card  # or [i, card]

my_i, my_card = select_choice()

অন ​​লাইনের return i, card i, cardঅর্থ একটি টিপল তৈরি করা। আপনি যেমন প্রথম বন্ধনী ব্যবহার করতে পারেন return (i, card)তবে টিপলগুলি কমা দ্বারা তৈরি করা হয়, সুতরাং প্যারেনগুলি বাধ্যতামূলক নয়। তবে আপনি আপনার কোডটি আরও পঠনযোগ্য করে তোলার জন্য বা একাধিক লাইনের উপরে টিপলকে বিভক্ত করতে প্যারেন্স ব্যবহার করতে পারেন। একই লাইনে প্রযোজ্য my_i, my_card = select_choice()

আপনি যদি দুটিরও বেশি মান ফিরে পেতে চান তবে a ব্যবহার করে বিবেচনা করুন দুটিরও নামযুক্ত টিপল । এটি ফাংশনটির কলকারীকে নাম অনুসারে ফেরত মানের ক্ষেত্রগুলি অ্যাক্সেস করার অনুমতি দেবে যা আরও পঠনযোগ্য। আপনি এখনও সূচক অনুসারে টিপল আইটেম অ্যাক্সেস করতে পারেন। উদাহরণস্বরূপ Schema.loadsপদ্ধতি Marshmallow এ ফ্রেমওয়ার্ক আয় একটি UnmarshalResultযা হয় namedtuple। সুতরাং আপনি এটি করতে পারেন:

data, errors = MySchema.loads(request.json())
if errors:
    ...

অথবা

result = MySchema.loads(request.json())
if result.errors:
    ...
else:
    # use `result.data`

অন্যান্য ক্ষেত্রে আপনি dictআপনার ফাংশন থেকে কোনওটি ফিরে আসতে পারেন :

def select_choice():
    ...
    return {'i': i, 'card': card, 'other_field': other_field, ...}

তবে আপনি কোনও ইউটিলিটি ক্লাসের একটি উদাহরণ ফিরে আসতে বিবেচনা করতে চাইতে পারেন, যা আপনার ডেটা মোড়ানো:

class ChoiceData():
    def __init__(self, i, card, other_field, ...):
        # you can put here some validation logic
        self.i = i
        self.card = card
        self.other_field = other_field
        ...

def select_choice():
    ...
    return ChoiceData(i, card, other_field, ...)

choice_data = select_choice()
print(choice_data.i, choice_data.card)

26

আমি দুটি পৃথক ভেরিয়েবলের একটি ফাংশন থেকে দুটি মান ফিরিয়ে দিতে চাই।

কলিং শেষটি দেখতে কেমন লাগবে? আপনি লিখতে পারবেন নাa = select_choice(); b = select_choice() কারণ এটি ফাংশনটিকে দু'বার কল করবে।

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

যখন আমি ব্যবহার করার চেষ্টা করেছি return i, card, এটি একটি ফিরে আসে tupleএবং এটি আমি চাই না।

আসলে, আপনি যা চান তা হ'ল এটি। আপনাকে যা করতে হবে তা হ'ল tupleআবার আলাদা করে নেওয়া ।

এবং আমি এই মানগুলি আলাদাভাবে ব্যবহার করতে সক্ষম হতে চাই।

সুতরাং কেবল মানগুলি দখল করুন tuple

এটি করার সহজতম উপায় হ'ল আনপ্যাক করা:

a, b = select_choice()

1
"এটি কেন এমন" তা ব্যাখ্যা করার জন্য ধন্যবাদ Thanks সেরা উত্তর ইমো।
এডওয়ার্ড কোয়েলহো

17

আমি মনে করি আপনি যা চান তা একটি টিপল। আপনি যদি ব্যবহার করেন তবে আপনি return (i, card)এই দুটি ফলাফল পেতে পারেন:

i, card = select_choice()

8
def test():
    ....
    return r1, r2, r3, ....

>> ret_val = test()
>> print ret_val
(r1, r2, r3, ....)

আপনার টিপল দিয়ে এখন আপনি নিজের পছন্দ মতো সবকিছু করতে পারেন।


5
def test():
    r1 = 1
    r2 = 2
    r3 = 3
    return r1, r2, r3

x,y,z = test()
print x
print y
print z


> test.py 
1
2
3

2

এবং এটি বিকল্প। আপনি যদি তালিকা হিসাবে ফিরে আসছেন তবে মানগুলি পাওয়া সহজ।

def select_choice():
    ...
    return [i, card]

values = select_choice()

print values[0]
print values[1]

2

আপনি এটি চেষ্টা করতে পারেন

class select_choice():
    return x, y

a, b = test()

1

আপনি তালিকা ব্যবহার করে একাধিক মান ফেরত দিতে পারেন। নীচের কোডটি পরীক্ষা করুন

def newFn():    #your function
  result = []    #defining blank list which is to be return
  r1 = 'return1'    #first value
  r2 = 'return2'    #second value
  result.append(r1)    #adding first value in list
  result.append(r2)    #adding second value in list
  return result    #returning your list

ret_val1 = newFn()[1]    #you can get any desired result from it
print ret_val1    #print/manipulate your your result
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.