পাইথন ভেরিয়েবলের ধরণ কীভাবে নির্ধারণ করবেন?


1565

আমি কোনও ভেরিয়েবলের প্রকারটি কীভাবে দেখতে পাবো এটি 32 বিট, স্বাক্ষরিত 16 বিট, ইত্যাদি স্বাক্ষরিত নয় কিনা?

আমি কীভাবে এটি দেখতে পারি?



উত্তর:


1377

type()বিল্টিন ফাংশনটি ব্যবহার করুন :

>>> i = 123
>>> type(i)
<type 'int'>
>>> type(i) is int
True
>>> i = 123.456
>>> type(i)
<type 'float'>
>>> type(i) is float
True

কোনও ভেরিয়েবল প্রদত্ত প্রকারের কিনা তা পরীক্ষা করতে, ব্যবহার করুন isinstance:

>>> i = 123
>>> isinstance(i, int)
True
>>> isinstance(i, (float, str, set, dict))
False

দ্রষ্টব্য যে পাইথনের সি / সি ++ এর মতো ধরণের ধরণ নেই, যা আপনার প্রশ্ন হিসাবে দেখা দেয়।


437

আপনি অন্তর্নির্মিত ফাংশনটি সন্ধান করছেনtype()

নীচের উদাহরণগুলি দেখুন, তবে জাভার মতো পাইথনে কোনও "স্বাক্ষরবিহীন" টাইপ নেই।

ধনাত্নক পূর্ণসংখ্যা:

>>> v = 10
>>> type(v)
<type 'int'>

বড় ধনাত্মক পূর্ণসংখ্যা:

>>> v = 100000000000000
>>> type(v)
<type 'long'>

Gণাত্মক পূর্ণসংখ্যা:

>>> v = -10
>>> type(v)
<type 'int'>

অক্ষরের আক্ষরিক ক্রম:

>>> v = 'hi'
>>> type(v)
<type 'str'>

ভাসমান বিন্দু পূর্ণসংখ্যা:

>>> v = 3.14159
>>> type(v)
<type 'float'>

আমি এটি দেখে আমার দ্বিগুণ নিতে হয়েছিল take জাভা SE8 এ এখন স্বাক্ষরবিহীন পূর্ণসংখ্যা রয়েছে এবং আমি এটির সাথে এতটা বিকাশ করেছি যে এটি পাপ বলে মনে হচ্ছে যে জাভা কখনও এসই 8 এর আগে স্বাক্ষরবিহীন পূর্ণসংখ্যার আগে ছিল না।
dddJewelsbbb

171

এটা খুব সহজ। আপনি এটি এইভাবে না।

print(type(variable_name))

110

পাইথনে ভেরিয়েবল টাইপ কীভাবে নির্ধারণ করবেন?

সুতরাং আপনার যদি ভেরিয়েবল থাকে, উদাহরণস্বরূপ:

one = 1

আপনি এর প্রকার জানতে চান?

পাইথনের প্রতিটি কিছুর জন্য সঠিক উপায় এবং ভুল উপায় রয়েছে। এখানে সঠিক উপায়:

ব্যবহার type

>>> type(one)
<type 'int'>

আপনি __name__অবজেক্টটির নাম পেতে বৈশিষ্ট্যটি ব্যবহার করতে পারেন । (এটি __dunder__নামটি পেতে যে কয়েকটি বিশেষ গুণাবলীর প্রয়োজন আপনার এটির মধ্যে একটি এটি - inspectমডিউলে এটির কোনও পদ্ধতি নেই ))

>>> type(one).__name__
'int'

ব্যবহার করবেন না __class__

পাইথনে, আন্ডারস্কোর দিয়ে শুরু হওয়া নামগুলি শব্দার্থগতভাবে পাবলিক এপিআইয়ের অংশ নয় এবং ব্যবহারকারীদের এগুলি এড়ানো এড়াতে এটি সর্বোত্তম অনুশীলন। (একেবারে প্রয়োজনীয় হলে ব্যতীত))

যেহেতু typeআমাদের অবজেক্টের শ্রেণি দেয় তাই আমাদের সরাসরি এটি এড়ানো উচিত। :

>>> one.__class__

কোনও পদ্ধতিতে কোনও বস্তুর প্রকারের অ্যাক্সেস করার সময় লোকেরা সাধারণত এটি প্রথম ধারণা হয় - তারা ইতিমধ্যে বৈশিষ্ট্যগুলি সন্ধান করছে, সুতরাং টাইপটি অদ্ভুত বলে মনে হয়। উদাহরণ স্বরূপ:

class Foo(object):
    def foo(self):
        self.__class__

না। পরিবর্তে, টাইপ করুন (স্ব):

class Foo(object):
    def foo(self):
        type(self)

ইনটস এবং ফ্লোটগুলির প্রয়োগের বিশদ

আমি কোনও ভেরিয়েবলের প্রকারটি কীভাবে দেখতে পাবো এটি 32 বিট, স্বাক্ষরিত 16 বিট, ইত্যাদি স্বাক্ষরিত নয় কিনা?

পাইথনে, এই নির্দিষ্টকরণগুলি বাস্তবায়নের বিশদ। সুতরাং, সাধারণভাবে, আমরা পাইথনে সাধারণত এটি নিয়ে চিন্তা করি না। যাইহোক, আপনার কৌতূহল স্থির করতে ...

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

উদাহরণস্বরূপ, 32 বিট পাইথন 2-তে, আমরা অনুমান করতে পারি যে সমষ্টিটি একটি স্বাক্ষরিত 32 বিট পূর্ণসংখ্যা:

>>> import sys

>>> format(sys.maxint, '032b')
'01111111111111111111111111111111'
>>> format(-sys.maxint - 1, '032b') # minimum value, see docs.
'-10000000000000000000000000000000'

পাইথন 3-এ, পুরানো ইনট চলে যায়, এবং আমরা কেবলমাত্র (পাইথনের) ইনট হিসাবে দীর্ঘ ব্যবহার করি, যার সীমাহীন নির্ভুলতা রয়েছে।

পাইথনের ফ্লোটগুলি সম্পর্কে আমরা কিছু তথ্য পেতে পারি, যা সাধারণত সি তে ডাবল হিসাবে প্রয়োগ করা হয় :

>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, 
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, 
mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)

উপসংহার

__class__ভেরিয়েবলের ধরণ পাওয়ার জন্য শব্দার্থিক অ- প্রজাতন্ত্র এপিআই ব্যবহার করবেন না । typeপরিবর্তে ব্যবহার করুন।

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


টাইপ হিসাবে বেরিয়ে আসে <type instance>কিন্তু __class__দেয় email.message.Message- আমি কী ভুল করছি?
জেসেন

@ জেসেন আপনি কি পাইথন 2 ব্যবহার করছেন এবং উত্তরাধিকার সূত্রে প্রাপ্ত নন object?
অ্যারন হল

হ্যাঁ, import email আমার নিজের আবিষ্কারের কোনও শ্রেণি ব্যবহার করে না।
জেসেন

65
print type(variable_name)

আমি এই জাতীয় প্রশ্নের সাথে লেনদেন করার সময় আইপিথন ইন্টারেক্টিভ দোভাষীকে খুব সুপারিশ করি । এটি আপনাকে টাইপ করতে দেয় variable_name?এবং টাইপ এবং প্রকারের জন্য ডক স্ট্রিং সহ অবজেক্ট সম্পর্কে তথ্য সম্পর্কিত পুরো তালিকাটি ফিরিয়ে দেয় ।

যেমন

In [9]: var = 123

In [10]: var?
Type:       int
Base Class: <type 'int'>
String Form:    123
Namespace:  Interactive
Docstring:
    int(x[, base]) -> integer

একটি স্ট্রিং বা সংখ্যাটিকে যদি সম্ভব হয় তবে পূর্ণসংখ্যায় রূপান্তর করুন। একটি ভাসমান বিন্দু যুক্তি শূন্যের দিকে ছাঁটা হবে (এতে কোনও ভাসমান পয়েন্ট সংখ্যার একটি স্ট্রিং উপস্থাপনা অন্তর্ভুক্ত নয়!) স্ট্রিং রূপান্তর করার সময়, alচ্ছিক বেসটি ব্যবহার করুন। নন-স্ট্রিংকে রূপান্তর করার সময় এটি বেস সরবরাহ করতে একটি ত্রুটি। যুক্তি যদি পূর্ণসংখ্যার ব্যাপ্তির বাইরে থাকে তবে তার পরিবর্তে একটি দীর্ঘ অবজেক্ট ফিরে আসবে।


2
আমি স্বাক্ষরবিহীন ইনট, স্বাক্ষরিত ইত্যাদি ইত্যাদির জন্য জিজ্ঞাসা করেছি
ব্যবহারকারীর 46646

3
print type(str)পাইথন 3.6 এ ত্রুটি প্রদান করে। ব্যবহার করুনtype(str)
কলব ক্যানিয়ন

4
@ কলবক্যানিয়ন কারণ এটি 3.x এ, প্রিন্টটির প্রথম বন্ধনী প্রয়োজন:print(type(str))
jcoppens

1
আপনার সত্যই print type(var)ভুল কোডটি পরিবর্তন করা উচিত ।
হান XiaO

54
a = "cool"
type(a)

//result 'str'
<class 'str'>
or 
do 
`dir(a)` 
to see the list of inbuilt methods you can have on the variable.

40

আরও একটি উপায় ব্যবহার করে __class__:

>>> a = [1, 2, 3, 4]
>>> a.__class__
<type 'list'>
>>> b = {'key1': 'val1'}
>>> b.__class__
<type 'dict'>
>>> c = 12
>>> c.__class__
<type 'int'>

1
পুনরায় মন্তব্য করুন: "নামগুলি যা আন্ডারস্কোর দিয়ে শুরু হয় ..." (একক) আন্ডারস্কোরগুলি ডাবল আন্ডারস্কোর ("ডন্ডার") এর চেয়ে খুব আলাদা এবং তারা অবশ্যই জনসাধারণের API এর অংশ এবং এগুলি ব্যবহার করা অবশ্যই জরিমানা। এটি সহায়তার হতে পারে ... youtu.be/wf-BqAjZb8M
মাইকেল

31

পাইথনে সাধারণ ধরণের পরীক্ষার উদাহরণ:

assert type(variable_name) == int

assert type(variable_name) == bool

assert type(variable_name) == list

29

এটি কিছুটা অপ্রাসঙ্গিক হতে পারে। তবে আপনি এখানেisinstance(object, type) উল্লিখিত হিসাবে কোনও বস্তুর প্রকারগুলি পরীক্ষা করতে পারেন ।


1
আমি মনে করি এটি পরীক্ষা করার প্রক্রিয়াতে টাইপ ফাংশনের চেয়ে আরও ভাল। আপনি যদি ফলাফলটি যাচাই বাছাই করতে চান এবং অভিনয় করতে চান তবে টাইপ দিয়ে ক্যাচ ব্যবহার করতে হবে তবে আইসনস্ট্যান্স সত্য বা মিথ্যা
প্রত্যাশা করে

24

প্রশ্নটি কিছুটা অস্পষ্ট - আপনি "ভিউ" দ্বারা কী বোঝাতে চাইছেন তা নিশ্চিত। আপনি যদি কোনও নেটিভ পাইথন অবজেক্টের ধরণের প্রশ্নের সন্ধান করতে চান তবে @atzz এর উত্তর আপনাকে সঠিক দিকে নিয়ে যাবে।

তবে, আপনি যদি পাইথন অবজেক্ট তৈরি করতে চেষ্টা করছেন যা আদিম সি-প্রকারের শব্দার্থবিদ্যা রয়েছে (যেমন uint32_t, int16_t), structমডিউলটি ব্যবহার করে । আপনি প্রদত্ত সি-টাইপের আদিম মধ্যে বিটের সংখ্যা নির্ধারণ করতে পারেন:

>>> struct.calcsize('c') # char
1
>>> struct.calcsize('h') # short
2
>>> struct.calcsize('i') # int
4
>>> struct.calcsize('l') # long
4

এটি arrayমডিউলটিতেও প্রতিফলিত হয় যা নিম্ন স্তরের এই ধরণের অ্যারেগুলি তৈরি করতে পারে:

>>> array.array('c').itemsize # char
1

সর্বাধিক পূর্ণসংখ্যার সমর্থন (পাইথন 2 এর int) sys.maxint দ্বারা দেওয়া হয়েছে ।

>>> import sys, math
>>> math.ceil(math.log(sys.maxint, 2)) + 1 # Signedness
32.0

এছাড়াও sys.getsizeof রয়েছে , যা পাইথন অবজেক্টের আসল আকারকে অবশিষ্ট মেমরিতে দেয়:

>>> a = 5
>>> sys.getsizeof(a) # Residual memory.
12

ফ্লোট ডেটা এবং নির্ভুলতার ডেটার জন্য, sys.float_info ব্যবহার করুন :

>>> sys.float_info
sys.floatinfo(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.2204460492503131e-16, radix=2, rounds=1)

7
প্রশ্নটি, যেমনটি আমি এটি বুঝতে পেরেছি, পাইথনে "ভেরিয়েবল" প্রকারের অনুসন্ধান সম্পর্কে জিজ্ঞাসা করে। আপনার উত্তরটি সাধারণত সঠিক তবে অফ-টপিক।
tzot

19

আপনি কি পাইথন বা সিটিপস ব্যবহার করছেন ?

প্রথম ক্ষেত্রে, আপনি কেবল পারবেন না - কারণ পাইথন স্বাক্ষরিত / স্বাক্ষরযুক্ত নয়, 16/32 বিট পূর্ণসংখ্যার।

দ্বিতীয় ক্ষেত্রে, আপনি ব্যবহার করতে পারেন type():

>>> import ctypes
>>> a = ctypes.c_uint() # unsigned int
>>> type(a)
<class 'ctypes.c_ulong'>

টাইপ সম্পর্কিত টাইপ সম্পর্কিত আরও তথ্যের জন্য অফিসিয়াল ডকুমেন্টেশন দেখুন


15

পাইথনের এ জাতীয় ধরণ নেই যা আপনি বর্ণনা করেন। অবিচ্ছেদ্য মানগুলি উপস্থাপনের জন্য দুটি ধরণের ব্যবহার করা হয়: intযা প্ল্যাটফর্মের ইনট টাইপ সি এর সাথে মিলে যায় এবং longযা একটি স্বেচ্ছাচারিত নির্ভুলতা পূর্ণসংখ্যার (অর্থাত্ এটি প্রয়োজন হিসাবে বৃদ্ধি পায় এবং তার উপরের সীমা থাকে না)। ints যদি নিঃশব্দে রূপান্তরিত হয় longযদি কোনও অভিব্যক্তি এমন ফলাফল উত্পন্ন করে যা এতে সংরক্ষণ করা যায় না int


11

সহজ, অজগর জন্য 3.4 এবং উপরে

print (type(variable_name))

পাইথন ২.7 এবং তারপরে

print type(variable_name)

10

এটি আপনার স্তরের অর্থ কী তা নির্ভর করে। পাইথন ২.x এ historicalতিহাসিক কারণে দুটি পূর্ণসংখ্যার প্রকার int(সীমাবদ্ধ sys.maxint) এবং long(সীমাহীন নির্ভুলতা) রয়েছে। পাইথন কোডে, এতে কিছুটা পার্থক্য করা উচিত নয় কারণ সংখ্যার সংখ্যা অনেক বেশি হয়ে গেলে দোভাষী স্বয়ংক্রিয়ভাবে দীর্ঘতে রূপান্তরিত হয়। যদি আপনি অন্তর্নিহিত দোভাষীগুলিতে ব্যবহৃত প্রকৃত ডেটা ধরণের সম্পর্কে জানতে চান তবে তা বাস্তবায়ন নির্ভর। (সিপথনগুলি অবজেক্টস / ইনবজেক্ট.সি এবং অবজেক্টস / লংবোজেক্ট.সি তে অবস্থিত)) সিস্টেমের প্রকারগুলি সম্পর্কে জানতে স্ট্রাক্ট মডিউলটি ব্যবহারের জন্য সিডিলারি উত্তরটি দেখুন।



-29

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

আপনি যদি সঠিক ধরণের যাচাইয়ের জন্য এবং ifএখানে এবং সেখানে কিছু নোংরা স্থান দেওয়ার জন্য জোর দিয়ে থাকেন তবে এটি করার জন্য আপনি __class__সম্পত্তি বা typeফাংশনটি ব্যবহার করতে পারেন তবে খুব শীঘ্রই আপনি ifপ্রতি দুটি বা তিনটি কমিটি করে অতিরিক্ত ঘটনাগুলির সাথে নিজেকে এই সমস্তগুলি আপডেট করে দেখতে পাবেন। ওও পদ্ধতিতে এটি করা বাধা দেয় এবং পরিবর্তে আপনাকে কেবল নতুন ধরণের ইনপুটের জন্য একটি নতুন শ্রেণি সংজ্ঞায়িত করতে দেয়।


4
এই উত্তরটি বিদ্যমান
জবাবগুলিতে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.