আমি কোনও ভেরিয়েবলের প্রকারটি কীভাবে দেখতে পাবো এটি 32 বিট, স্বাক্ষরিত 16 বিট, ইত্যাদি স্বাক্ষরিত নয় কিনা?
আমি কীভাবে এটি দেখতে পারি?
আমি কোনও ভেরিয়েবলের প্রকারটি কীভাবে দেখতে পাবো এটি 32 বিট, স্বাক্ষরিত 16 বিট, ইত্যাদি স্বাক্ষরিত নয় কিনা?
আমি কীভাবে এটি দেখতে পারি?
উত্তর:
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
দ্রষ্টব্য যে পাইথনের সি / সি ++ এর মতো ধরণের ধরণ নেই, যা আপনার প্রশ্ন হিসাবে দেখা দেয়।
আপনি অন্তর্নির্মিত ফাংশনটি সন্ধান করছেন ।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'>
পাইথনে ভেরিয়েবল টাইপ কীভাবে নির্ধারণ করবেন?
সুতরাং আপনার যদি ভেরিয়েবল থাকে, উদাহরণস্বরূপ:
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
- আমি কী ভুল করছি?
object
?
import email
আমার নিজের আবিষ্কারের কোনও শ্রেণি ব্যবহার করে না।
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চ্ছিক বেসটি ব্যবহার করুন। নন-স্ট্রিংকে রূপান্তর করার সময় এটি বেস সরবরাহ করতে একটি ত্রুটি। যুক্তি যদি পূর্ণসংখ্যার ব্যাপ্তির বাইরে থাকে তবে তার পরিবর্তে একটি দীর্ঘ অবজেক্ট ফিরে আসবে।
print type(str)
পাইথন 3.6 এ ত্রুটি প্রদান করে। ব্যবহার করুনtype(str)
print(type(str))
print type(var)
ভুল কোডটি পরিবর্তন করা উচিত ।
আরও একটি উপায় ব্যবহার করে __class__
:
>>> a = [1, 2, 3, 4]
>>> a.__class__
<type 'list'>
>>> b = {'key1': 'val1'}
>>> b.__class__
<type 'dict'>
>>> c = 12
>>> c.__class__
<type 'int'>
এটি কিছুটা অপ্রাসঙ্গিক হতে পারে। তবে আপনি এখানেisinstance(object, type)
উল্লিখিত হিসাবে কোনও বস্তুর প্রকারগুলি পরীক্ষা করতে পারেন ।
প্রশ্নটি কিছুটা অস্পষ্ট - আপনি "ভিউ" দ্বারা কী বোঝাতে চাইছেন তা নিশ্চিত। আপনি যদি কোনও নেটিভ পাইথন অবজেক্টের ধরণের প্রশ্নের সন্ধান করতে চান তবে @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)
আপনি কি পাইথন বা সিটিপস ব্যবহার করছেন ?
প্রথম ক্ষেত্রে, আপনি কেবল পারবেন না - কারণ পাইথন স্বাক্ষরিত / স্বাক্ষরযুক্ত নয়, 16/32 বিট পূর্ণসংখ্যার।
দ্বিতীয় ক্ষেত্রে, আপনি ব্যবহার করতে পারেন type()
:
>>> import ctypes
>>> a = ctypes.c_uint() # unsigned int
>>> type(a)
<class 'ctypes.c_ulong'>
টাইপ সম্পর্কিত টাইপ সম্পর্কিত আরও তথ্যের জন্য অফিসিয়াল ডকুমেন্টেশন দেখুন ।
পাইথনের এ জাতীয় ধরণ নেই যা আপনি বর্ণনা করেন। অবিচ্ছেদ্য মানগুলি উপস্থাপনের জন্য দুটি ধরণের ব্যবহার করা হয়: int
যা প্ল্যাটফর্মের ইনট টাইপ সি এর সাথে মিলে যায় এবং long
যা একটি স্বেচ্ছাচারিত নির্ভুলতা পূর্ণসংখ্যার (অর্থাত্ এটি প্রয়োজন হিসাবে বৃদ্ধি পায় এবং তার উপরের সীমা থাকে না)। int
s যদি নিঃশব্দে রূপান্তরিত হয় long
যদি কোনও অভিব্যক্তি এমন ফলাফল উত্পন্ন করে যা এতে সংরক্ষণ করা যায় না int
।
এটি আপনার স্তরের অর্থ কী তা নির্ভর করে। পাইথন ২.x এ historicalতিহাসিক কারণে দুটি পূর্ণসংখ্যার প্রকার int
(সীমাবদ্ধ sys.maxint
) এবং long
(সীমাহীন নির্ভুলতা) রয়েছে। পাইথন কোডে, এতে কিছুটা পার্থক্য করা উচিত নয় কারণ সংখ্যার সংখ্যা অনেক বেশি হয়ে গেলে দোভাষী স্বয়ংক্রিয়ভাবে দীর্ঘতে রূপান্তরিত হয়। যদি আপনি অন্তর্নিহিত দোভাষীগুলিতে ব্যবহৃত প্রকৃত ডেটা ধরণের সম্পর্কে জানতে চান তবে তা বাস্তবায়ন নির্ভর। (সিপথনগুলি অবজেক্টস / ইনবজেক্ট.সি এবং অবজেক্টস / লংবোজেক্ট.সি তে অবস্থিত)) সিস্টেমের প্রকারগুলি সম্পর্কে জানতে স্ট্রাক্ট মডিউলটি ব্যবহারের জন্য সিডিলারি উত্তরটি দেখুন।
পাইথন 2.x এর জন্য ব্যবহার করুন
print type(variable_name)
পাইথন 3.x এর জন্য ব্যবহার করুন
print(type(variable_name))
শুধু এটা করবেন না। কোনও কিছুর ধরণ জিজ্ঞাসা করা নিজের মধ্যেই ভুল। পরিবর্তে পলিমারফিজম ব্যবহার করুন। আপনার প্রয়োজনীয় পদ্ধতিটি আবিষ্কার করুন বা যদি প্রয়োজন হয় তবে যেকোন সম্ভাব্য ইনপুটটির জন্য যা চান তা করুন এবং কেবল কিছু জিজ্ঞাসা না করে কল করুন। আপনার যদি অন্তর্নির্মিত ধরণের বা তৃতীয় পক্ষের লাইব্রেরি দ্বারা সংজ্ঞায়িত ধরণেরগুলির সাথে কাজ করার দরকার হয় তবে আপনি সর্বদা সেগুলি থেকে উত্তরাধিকারী হয়ে ও তার পরিবর্তে আপনার নিজস্ব ডেরিভেটিভ ব্যবহার করতে পারেন। অথবা আপনি এগুলি নিজের ক্লাসের মধ্যে গুটিয়ে রাখতে পারেন। এই জাতীয় সমস্যাগুলি সমাধান করার জন্য এটি অবজেক্ট-ওরিয়েন্টেড উপায়।
আপনি যদি সঠিক ধরণের যাচাইয়ের জন্য এবং if
এখানে এবং সেখানে কিছু নোংরা স্থান দেওয়ার জন্য জোর দিয়ে থাকেন তবে এটি করার জন্য আপনি __class__
সম্পত্তি বা type
ফাংশনটি ব্যবহার করতে পারেন তবে খুব শীঘ্রই আপনি if
প্রতি দুটি বা তিনটি কমিটি করে অতিরিক্ত ঘটনাগুলির সাথে নিজেকে এই সমস্তগুলি আপডেট করে দেখতে পাবেন। ওও পদ্ধতিতে এটি করা বাধা দেয় এবং পরিবর্তে আপনাকে কেবল নতুন ধরণের ইনপুটের জন্য একটি নতুন শ্রেণি সংজ্ঞায়িত করতে দেয়।