কোনও বস্তুর সংখ্যা আছে কিনা তা যাচাই করার সর্বাধিক অজগর উপায় কী?


114

একটি স্বেচ্ছাচারিত অজগর বস্তু দেওয়া, এটি একটি সংখ্যা কিনা তা নির্ধারণ করার সর্বোত্তম উপায় কী? এখানে isহিসাবে সংজ্ঞায়িত করা হয় acts like a number in certain circumstances

উদাহরণস্বরূপ, বলুন আপনি একটি ভেক্টর শ্রেণি লিখছেন। যদি অন্য ভেক্টর দেওয়া হয় তবে আপনি বিন্দুর পণ্যটি খুঁজতে চান। যদি কোনও স্কেলার দেওয়া হয় তবে আপনি পুরো ভেক্টরটি স্কেল করতে চান।

পরীক্ষা করা হচ্ছে যদি কিছু হয় int, float, long, boolবিরক্তিকর এবং ব্যবহারকারী-সংজ্ঞায়িত যে বস্তু সংখ্যার মত আচরণ পারে কাভার করে না। তবে, __mul__উদাহরণস্বরূপ , চেক করা যথেষ্ট ভাল নয় কারণ আমি স্রেফ বর্ণিত ভেক্টর শ্রেণিটি সংজ্ঞায়িত করবে __mul__তবে এটি আমার পছন্দ সংখ্যাটি নয়।

উত্তর:


135

ব্যবহার করুন Numberথেকে numbersপরীক্ষা মডিউল isinstance(n, Number)(2.6 থেকে উপলব্ধ)।

>>> from numbers import Number
... from decimal import Decimal
... from fractions import Fraction
... for n in [2, 2.0, Decimal('2.0'), complex(2, 0), Fraction(2, 1), '2']:
...     print(f'{n!r:>14} {isinstance(n, Number)}')
              2 True
            2.0 True
 Decimal('2.0') True
         (2+0j) True
 Fraction(2, 1) True
            '2' False

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


3
স্মার্ট জিনিস করছেন, বরং হাঁস জিনিস চেয়ে অগ্রাধিকার দেওয়া হয়, যখন আপনি এক্স দ্বারা একটি ভেক্টর গুন করছি এই ক্ষেত্রে কি আপনি এক্স উপর ভিত্তি করে বিভিন্ন জিনিস কাজ করতে চান ইন হয় । (এটি এমন কিছু হিসাবে কাজ করতে পারে যা বহুগুণ হয়, তবে ফলাফলটি অযৌক্তিক হতে পারে))
এভেজেনি সার্জিভ

3
এই উত্তর দেয় সত্য বলে একটি সংখ্যা .. যা সম্ভবত আপনি চান সবসময় না। বুলিয়ানদের এক্সেলকডিংয়ের জন্য (ভ্যালিডেশন ফেটি ভাবেন), আমি বলবisinstance(value, Number) and type(value) != bool
ইয়ো লুডকে

32

আপনি কিছু পরীক্ষা করতে চান কিনা

নির্দিষ্ট পরিস্থিতিতে একটি সংখ্যার মতো কাজ করে

যদি আপনি পাইথন 2.5 বা ততোধিক বয়স্ক ব্যবহার করেন তবে আসল উপায় হ'ল কিছু "নির্দিষ্ট পরিস্থিতিতে" কিছু পরীক্ষা করে দেখুন।

২.6 বা তার চেয়েও ভাল আপনি সংখ্যারisinstance সাহায্যে ব্যবহার করতে পারেন umber সংখ্যা - একটি বিমূর্ত বেস ক্লাস (এবিসি) যা ঠিক এই উদ্দেশ্যে উপস্থিত রয়েছে ( collectionsবিভিন্ন ধরণের সংগ্রহ / ধারকগুলির জন্য মডিউলে আরও অনেকগুলি এবিসি বিদ্যমান রয়েছে, আবার ২. with থেকে শুরু করে এবং, এছাড়াও কেবলমাত্র এই প্রকাশগুলিতে, আপনার প্রয়োজন হলে আপনি সহজেই আপনার নিজের বিমূর্ত বেস ক্লাসগুলি যুক্ত করতে পারেন)।

বাচে 2.5 এবং তার আগে, "যুক্ত হতে পারে 0 এবং পুনরাবৃত্তিযোগ্য নয়" কিছু ক্ষেত্রে এটি একটি ভাল সংজ্ঞা হতে পারে। কিন্তু, আপনি কি সত্যিই নিজেকে জিজ্ঞেস করা উচিত, কি এটা বলছি যে কি কথা বিবেচনা করতে "একটি নম্বর" স্পষ্টভাবে সক্ষম হওয়া আবশ্যক প্রয়োজন না , এবং কি এটি একেবারে হওয়া আবশ্যক অক্ষম এবং চেক - না।

এটি ২.6 বা তার পরেও প্রয়োজন হতে পারে, আপনার নিজের নিবন্ধগুলি ইতিমধ্যে নিবন্ধভুক্ত করা হয়নি এমন বিষয়গুলি যুক্ত করতে আপনার নিজের রেজিস্ট্রেশন করার উদ্দেশ্যে numbers.Numbers- যদি আপনি বাদ দিতে চান কিছু প্রকার যেগুলি দাবি করে তবে তারা আপনার কেবল হ্যান্ডেল করতে পারে না, এটি আরও বেশি যত্ন নেয়, কারণ এবিসিদের কোনও unregisterপদ্ধতি নেই [[উদাহরণস্বরূপ আপনি নিজের অবিসি তৈরি করতে পারেন WeirdNumএবং সেখানে আপনার জন্য এই ধরণের অদ্ভুত সব ধরণের রেজিস্ট্রেশন করতে পারেন , তারপরে isinstanceআপনি এগিয়ে যাওয়ার আগে প্রথমে জামিনের জন্য এটি পরীক্ষা করুন check সাফল্যের সাথে চালিয়ে যাওয়ার isinstanceজন্য সাধারণের জন্য পরীক্ষা করা numbers.Number

বিটিডাব্লু, যখন এবং যখন আপনাকে xকিছু করতে পারে বা করতে পারে না তা খতিয়ে দেখা দরকার, আপনার সাধারণত কিছু চেষ্টা করতে হবে:

try: 0 + x
except TypeError: canadd=False
else: canadd=True

উপস্থিতি এক (যেমন, চেক করুন যে "অনুমোদিত নয় iterable হতে" উত্থাপন__add__প্রতি সে আপনাকে দরকারী কিছুই বলে না, যেহেতু সমস্ত সিকোয়েন্সগুলি অন্যান্য সিকোয়েন্সগুলির সাথে মিলিত করার উদ্দেশ্যে রয়েছে। এই চেকটি সংজ্ঞার সমতুল্য "একটি সংখ্যা এমন কিছু যা এই জাতীয় জিনিসগুলির ক্রমটি অন্তর্নির্মিত ফাংশনটির জন্য একটি বৈধ একক যুক্তি sum", উদাহরণস্বরূপ। সম্পূর্ণ অদ্ভুত প্রকারের (যেমন 0 হিসাবে সংখ্যায় যোগ করার পরে "ভুল" ব্যতিক্রম উত্থাপনকারী, যেমন, বলুন, একটি ZeroDivisionErrorবা ValueErrorসি) ব্যতিক্রম প্রচার করবে, তবে এটি ঠিক আছে, ব্যবহারকারীকে এএসএপটি জানান যে এই জাতীয় পাগল প্রকারগুলি ঠিক তেমন গ্রহণযোগ্য নয় প্রতিষ্ঠান;-); তবে, একটি "ভেক্টর" যা স্কেলারের সংক্ষিপ্তযোগ্য (পাইথনের স্ট্যান্ডার্ড লাইব্রেরিটির একটি নেই, তবে অবশ্যই তারা তৃতীয় পক্ষের এক্সটেনশন হিসাবে জনপ্রিয়) এখানেও ভুল ফল দিতে পারে, সুতরাং (উদাঃiter(x)TypeError বা বিশেষ পদ্ধতির উপস্থিতির জন্য __iter__- যদি আপনি 2.5 বা তার বেশি বয়সী হন এবং সুতরাং আপনার নিজের চেকগুলির প্রয়োজন হয়)।

এই জাতীয় জটিলতার একটি সংক্ষিপ্ত ঝলক আপনাকে যখনই সম্ভব সম্ভব বিমূর্ত বেস ক্লাসের উপর নির্ভর করতে উত্সাহিত করার জন্য যথেষ্ট হতে পারে ... ;-)।


তবে সংখ্যার মডিউলটিতে সংখ্যার জন্য একটি এবিসি রয়েছে। ডক্স দাবী করে এটাই: "সংখ্যা মডিউল (পিইপি 3141) সংখ্যার বিমূর্ত বেস শ্রেণীর একটি শ্রেণিবিন্যাসকে সংজ্ঞায়িত করে যা ক্রমান্বয়ে আরও ক্রিয়াকলাপ সংজ্ঞায়িত করে।"
স্টিভেন রাম্বালস্কি

17

এটি একটি ভাল উদাহরণ যেখানে ব্যতিক্রমগুলি সত্যই জ্বলে। সংখ্যার প্রকারের সাথে আপনি যা করতে চান তা করুন এবং TypeErrorসমস্ত কিছু থেকে এটি ধরুন ।

তবে স্পষ্টতই, এটি কেবল কোনও অপারেশন কাজ করে কিনা তা যাচাই করে , এটি অর্থবোধ করে কিনা তা নয় ! এর একমাত্র আসল সমাধান হ'ল কখনই প্রকারগুলি মেশান না এবং সর্বদা জেনে থাকুন যে আপনার মানগুলি কী টাইপক্লাসের সাথে সম্পর্কিত।


1
হাঁসের টাইপিংয়ের জন্য +1: আমার ডেটা কী ধরণের তা বিবেচ্য নয়, কেবল আমি এটি দিয়ে যা করতে চাই তা করতে পারি কি না।

12
এটি ছিল traditionalতিহ্যবাহী পন্থা, তবে দূরে যাওয়ার জন্য ভাল অংশে এবিসিগুলি চালু করা হয়েছিল খাঁটি হাঁসের টাইপিং থেকে সরে এবং এমন একটি বিশ্বের দিকে কিছুটা দূরে যাওয়ার যেখানে isinstanceপ্রকৃতপক্ষে অনেক ক্ষেত্রে কার্যকর হতে পারে (== "এটি পরীক্ষা করে বোঝা যায়" পাশাপাশি আনুষ্ঠানিক প্রয়োগযোগ্যতা অপারেশন)। দীর্ঘকালীন পাইথন-কেবলমাত্র লোকেদের জন্য কঠিন স্থানান্তর, তবে পাইথনের দর্শনের একটি খুব গুরুত্বপূর্ণ সূক্ষ্ম প্রবণতা এটি উপেক্ষা করা গুরুতর ত্রুটি হবে।
অ্যালেক্স মার্টেলি 9:25

@ অ্যালেক্স: সত্য এবং আমি টাইপক্লাসগুলি পছন্দ করি (বেশিরভাগ collections.Sequenceএবং বন্ধুরা)। তবে আফিক, সংখ্যা, ভেক্টর বা অন্য কোনও গাণিতিক অবজেক্টের জন্য এমন কোনও শ্রেণি নেই।
জোচেন রিটজেল

1
হাঁসের টাইপিংয়ের বিরুদ্ধে কিছুই নেই। এটা আমি কি করব। তবে সংখ্যার জন্য একটি বিমূর্ত বেস শ্রেণি রয়েছে: সংখ্যা.সংখ্যা।
স্টিভেন রাম্বালস্কি

4

শূন্য দ্বারা বস্তুকে গুণ করুন ly যে কোনও সংখ্যার বার শূন্য হয়। অন্য যে কোনও ফলাফলের অর্থ এই যে বস্তুটি কোনও সংখ্যা নয় (ব্যতিক্রমগুলি সহ)

def isNumber(x):
    try:
        return bool(0 == x*0)
    except:
        return False

IsNumber ব্যবহার করে এইভাবে নিম্নলিখিত আউটপুট দেবে:

class A: pass 

def foo(): return 1

for x in [1,1.4, A(), range(10), foo, foo()]:
    answer = isNumber(x)
    print('{answer} == isNumber({x})'.format(**locals()))

আউটপুট:

True == isNumber(1)
True == isNumber(1.4)
False == isNumber(<__main__.A instance at 0x7ff52c15d878>)
False == isNumber([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
False == isNumber(<function foo at 0x7ff52c121488>)
True == isNumber(1)

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

numpy.array উদাহরণ:

import numpy as np

def isNumber(x):
    try:
        return bool(x*0 == 0)
    except:
        return False

x = np.array([0,1])

answer = isNumber(x)
print('{answer} == isNumber({x})'.format(**locals()))

আউটপুট:

False == isNumber([0 1])

5
True * 0 == 0
এন্ডোলিথ

4
আপনার ফাংশনটি ভুলভাবে বলবে যে বুলিয়ানগুলি সংখ্যা
এন্ডোলিথ

1
@ এন্ডোলিথ, বুলিয়ানরা সংখ্যার মতো কাজ করে। সর্বদা সত্য == 1 এবং সর্বদা মিথ্যা == 0. প্রশ্নকর্তা ঠিক এটিই জিজ্ঞাসা করেছিলেন, "এখানে 'এখানে' নির্দিষ্ট পরিস্থিতিতে সংখ্যার মতো কাজ 'হিসাবে সংজ্ঞায়িত করা হয়।"
শ্রোমাউস

1
@ এন্ডোলিথ, আসলে, বুলিয়ানরা সংখ্যা ans বুলিয়ান থেকে উদ্ভূত intতাই আমার ফাংশনটি সঠিকভাবে বলবে যে বুলিয়ানগুলি সংখ্যা।
shrimouse

1
@ নিকোলাসআরবিল, 0 * x == 0 কে ইসলম্বরের ভিতরে একটি বুলে রূপান্তর করুন।
শ্রুউমাউস

3

আপনার প্রশ্নের পুনঃব্যবহার করতে, আপনি নির্ধারণ করার চেষ্টা করছেন যে কোনও কিছু সংগ্রহ বা একক মান। কোনও জিনিস ভেক্টর বা একটি সংখ্যা আপেলকে কমলার সাথে তুলনা করছে কিনা তা তুলনা করার চেষ্টা করছি - আমার কাছে স্ট্রিং বা সংখ্যার ভেক্টর থাকতে পারে এবং আমার একটি স্ট্রিং বা একক সংখ্যা থাকতে পারে। আপনার কতজন আগ্রহী (1 বা আরও) , আপনার আসলে কী ধরণের রয়েছে তা নয়।

এই সমস্যার জন্য আমার সমাধানটি হ'ল ইনপুটটি একক মান বা সংগ্রহের উপস্থিতি যাচাই করে তা পরীক্ষা করা __len__। উদাহরণ স্বরূপ:

def do_mult(foo, a_vector):
    if hasattr(foo, '__len__'):
        return sum([a*b for a,b in zip(foo, a_vector)])
    else:
        return [foo*b for b in a_vector]

বা, হাঁস-টাইপিং পদ্ধতির জন্য, আপনি fooপ্রথমে পুনরাবৃত্তি করতে চেষ্টা করতে পারেন :

def do_mult(foo, a_vector):
    try:
        return sum([a*b for a,b in zip(foo, a_vector)])
    except TypeError:
        return [foo*b for b in a_vector]

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


3

বিদ্যমান পদ্ধতিগুলির সংক্ষিপ্তকরণ / মূল্যায়ন করতে:

Candidate    | type                      | delnan | mat | shrewmouse | ant6n
-------------------------------------------------------------------------
0            | <type 'int'>              |      1 |   1 |          1 |     1
0.0          | <type 'float'>            |      1 |   1 |          1 |     1
0j           | <type 'complex'>          |      1 |   1 |          1 |     0
Decimal('0') | <class 'decimal.Decimal'> |      1 |   0 |          1 |     1
True         | <type 'bool'>             |      1 |   1 |          1 |     1
False        | <type 'bool'>             |      1 |   1 |          1 |     1
''           | <type 'str'>              |      0 |   0 |          0 |     0
None         | <type 'NoneType'>         |      0 |   0 |          0 |     0
'0'          | <type 'str'>              |      0 |   0 |          0 |     1
'1'          | <type 'str'>              |      0 |   0 |          0 |     1
[]           | <type 'list'>             |      0 |   0 |          0 |     0
[1]          | <type 'list'>             |      0 |   0 |          0 |     0
[1, 2]       | <type 'list'>             |      0 |   0 |          0 |     0
(1,)         | <type 'tuple'>            |      0 |   0 |          0 |     0
(1, 2)       | <type 'tuple'>            |      0 |   0 |          0 |     0

(আমি এই প্রশ্নে এখানে এসেছি )

কোড

#!/usr/bin/env python

"""Check if a variable is a number."""

import decimal


def delnan_is_number(candidate):
    import numbers
    return isinstance(candidate, numbers.Number)


def mat_is_number(candidate):
    return isinstance(candidate, (int, long, float, complex))


def shrewmouse_is_number(candidate):
    try:
        return 0 == candidate * 0
    except:
        return False


def ant6n_is_number(candidate):
    try:
        float(candidate)
        return True
    except:
        return False

# Test
candidates = (0, 0.0, 0j, decimal.Decimal(0),
              True, False, '', None, '0', '1', [], [1], [1, 2], (1, ), (1, 2))

methods = [delnan_is_number, mat_is_number, shrewmouse_is_number, ant6n_is_number]

print("Candidate    | type                      | delnan | mat | shrewmouse | ant6n")
print("-------------------------------------------------------------------------")
for candidate in candidates:
    results = [m(candidate) for m in methods]
    print("{:<12} | {:<25} | {:>6} | {:>3} | {:>10} | {:>5}"
          .format(repr(candidate), type(candidate), *results))

আমার জন্য float('nan'), 'nan', '123.45', '42', '42a', '0x8', '0xa'math.isnan
মার্টিন থোমা

2

সম্ভবত এটি অন্য উপায়ে করা আরও ভাল: আপনি এটি ভেক্টর কিনা তা পরীক্ষা করে দেখুন। যদি এটি হয় তবে আপনি কোনও বিন্দু পণ্য করেন এবং অন্যান্য সমস্ত ক্ষেত্রে আপনি স্কেলার গুণনের চেষ্টা করেন।

ভেক্টরের জন্য অনুসন্ধান করা সহজ, যেহেতু এটি আপনার ভেক্টর শ্রেণির ধরণের হওয়া উচিত (বা এটি থেকে উত্তরাধিকার সূত্রে প্রাপ্ত)। আপনি ডট-প্রোডাক্টটি করার জন্য প্রথমে চেষ্টা করতে পারেন, এবং যদি এটি ব্যর্থ হয় (= এটি আসলে কোনও ভেক্টর ছিল না), তবে স্কেলার গুণে ফিরে যান।


1

শুধু যোগ করার জন্য। মান আমরা একটি সংখ্যার (ইন্ট, ফ্লোট ইত্যাদি) কিনা তা খুঁজে পেতে আমরা সম্ভবত আইসনস্ট্যান্স এবং আইডিজিটের সংমিশ্রণটি ব্যবহার করতে পারি

যদি ইসিনস্ট্যান্স (num1, int) বা isinstance (num1, float) বা num1.isdigit ():


0

অনুমান ভেক্টর শ্রেণির জন্য:

মনে করুন vকোনও ভেক্টর, এবং আমরা এটির দ্বারা গুণ করছি x। এটা জ্ঞান করে তোলে যদি এর প্রতিটি উপাদানের সংখ্যাবৃদ্ধি vদ্বারা x, আমরা হয়তো বোঝাতে চেয়েছেন, যাতে প্রথম চেষ্টা করুন। যদি না হয়, আমরা কি বিন্দু করতে পারি? অন্যথায় এটি একটি টাইপ ত্রুটি।

সম্পাদনা করুন - নীচের কোডটি কাজ করে না, কারণ 2*[0]==[0,0]একটি উত্থাপনের পরিবর্তে TypeError। আমি এটি ছেড়ে দিয়েছি কারণ এটি মন্তব্য করা হয়েছিল।

def __mul__( self, x ):
    try:
        return [ comp * x for comp in self ]
    except TypeError:
        return [ x * y for x, y in itertools.zip_longest( self, x, fillvalue = 0 )

যদি xএকটি ভেক্টর তাহলে [comp * x for comp in self]বাইরের পণ্য সমর্পণ করা হবে xএকটি v। এটি স্কেলার নয়, র‌্যাঙ্ক 2 টেনসর।
অ্যারোনস্টার্লিং

"একটি স্কেলার নয়" পরিবর্তন করে "ভেক্টর নয়"। কমপক্ষে মূল ভেক্টর স্পেসে নয়।
অ্যারোনাস্টারিং

হেই, আসলে আমরা দুজনেই ভুল আপনি যে অভিমানী করছি comp*xস্কেল হবে xদ্বারা comp, আমি অভিমানী ছিল যে এটি একটি TypeError বাড়াতে হবে। দুর্ভাগ্যক্রমে, এটি আসলে xনিজের সাথে compসময়ের সাথে মিলিত হবে । উফ।
ক্যাট্রিয়েল

Meh। যদি xভেক্টর হয় তবে এর একটি __rmul__পদ্ধতি থাকা উচিত ( __rmul__ = __mul__) যাতে এটি একইভাবে comp * xস্কেল করা উচিত যা স্পষ্টতই উদ্দেশ্য intended xx * comp
অ্যারোনস্টার্লিং

0

এক ধরণের ভেক্টর ক্লাস প্রয়োগ করার সময় আমারও একই সমস্যা ছিল। একটি নম্বর পরীক্ষা করার একটি উপায় কেবল একটিতে রূপান্তর করা, অর্থাত্‍ ব্যবহার করে ie

float(x)

এটি এমন ক্ষেত্রে প্রত্যাখ্যান করবে যেখানে x কোনও সংখ্যায় রূপান্তর করা যায় না; তবে অন্যান্য ধরণের সংখ্যার মতো কাঠামোও প্রত্যাখ্যান করতে পারে যা বৈধ হতে পারে, উদাহরণস্বরূপ জটিল সংখ্যা।


0

আপনি যদি আর্গুমেন্টের ধরণের (গুলি) এর উপর নির্ভর করে বিভিন্ন পদ্ধতিতে কল করতে চান তবে সন্ধান করুন multipledispatch

উদাহরণস্বরূপ, বলুন আপনি একটি ভেক্টর শ্রেণি লিখছেন। যদি অন্য ভেক্টর দেওয়া হয় তবে আপনি বিন্দুর পণ্যটি খুঁজতে চান। যদি কোনও স্কেলার দেওয়া হয় তবে আপনি পুরো ভেক্টরটি স্কেল করতে চান।

from multipledispatch import dispatch

class Vector(list):

    @dispatch(object)
    def __mul__(self, scalar):
        return Vector( x*scalar for x in self)

    @dispatch(list)
    def __mul__(self, other):
        return sum(x*y for x,y in zip(self, other))


>>> Vector([1,2,3]) * Vector([2,4,5])   # Vector time Vector is dot product
25
>>> Vector([1,2,3]) * 2                 # Vector times scalar is scaling
[2, 4, 6]

দুর্ভাগ্যক্রমে, (আমার জ্ঞান অনুযায়ী) আমরা লিখতে পারি না @dispatch(Vector)যেহেতু আমরা এখনও প্রকারটি সংজ্ঞায়িত করছি Vector, সুতরাং সেই ধরণের নামটি এখনও সংজ্ঞায়িত হয়নি। পরিবর্তে, আমি বেস প্রকারটি ব্যবহার করছি list, যা আপনাকে এমনকি একটি Vectorএবং এ এর ডট পণ্যও সন্ধান করতে দেয় list


0

সংক্ষিপ্ত এবং সহজ উপায়:

obj = 12345
print(isinstance(obj,int))

আউটপুট:

True

যদি অবজেক্টটি স্ট্রিং হয় তবে 'মিথ্যা' ফিরিয়ে দেওয়া হবে:

obj = 'some string'
print(isinstance(obj,int))

আউটপুট:

False

0

আপনার একটি ডেটা আইটেম রয়েছে, বলুন rec_dayযে কোনও ফাইলে যখন লেখা হবে তখন একটি হবে float। তবে প্রোগ্রাম প্রসেসিংয়ের সময় এটি হয় float, intবা strটাইপ করা যেতে পারে ( strনতুন রেকর্ড শুরু করার সময় এটি ব্যবহৃত হয় এবং এতে একটি ডামি পতাকা মূল্য থাকে)।

তারপরে আপনার এটির সাথে একটি নম্বর আছে কিনা তা পরীক্ষা করতে পারেন

                type(rec_day) != str 

আমি এইভাবে একটি অজগর প্রোগ্রামটি গঠন করেছি এবং এটি একটি সংখ্যার পরীক্ষার হিসাবে ব্যবহার করে 'রক্ষণাবেক্ষণ প্যাচ' রেখেছি। এটা কি পাইথোনিক উপায়? সম্ভবত আমি কোবোল-এ প্রোগ্রাম করতাম না।


-1

আপনি isdigit () ফাংশনটি ব্যবহার করতে পারেন।

>>> x = "01234"
>>> a.isdigit()
True
>>> y = "1234abcd"
>>> y.isdigit()
False

"01234" কোনও সংখ্যা নয়, এটি একটি চরিত্রের স্ট্রিং।
অ্যালেক্সি 20'18
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.