6.5 لغة البرمجة python | كتاب لينكس الشامل | >> |
لغة python (وهو نوع من الأفاعي) لغة تفسيرية ويمكن تسريعها بعمل byte code
. لغة سريعة وقابلة للتطوير وهي موجهة للكائنات OOP
كما أنها اللغة التي كتب بها سلسلة أدوات ريدهات redhat-config-*
هذه اللغة حاسة لحالة الحروف إن كبيرة أو صغيرة وهي أيضا حساسة لعدد المسافات البادئة فبدلا من وضع الوحدة ضمن أقواس {} نقوم بازاحة الكلمات عدد معين وكل الكلمات المزاحة بذلك المقدار تعتبر وحدة
يمكن تنفيذها بطريقة تفاعلية مباشرة حيث تطبع الأمر فيعطيك النتيجة. أو لعمل نص تنفيذي كما
#!/usr/bin/python # hello.py - My 1st python application print "Hello World!!"
#!/usr/bin/python # quoting.py - quoted strings in python print "you can put ' in side double quotes without a escape" print "you can't put \" in side double quotes without a escape" print 'you can put " in side single quotes without a escape' print 'you can\'t put \' in side single quotes without a escape' # \X1b ,\x1b, \X1B or \x1B (hex for ESC) and \033 for oct ESC print "Visit us on \033[34,4mwww.daif.net/linux\033[0m" print 'Do \033[1mNOT\033[0m ignore \033[5mme\033[0m.' # put r or R in front of a quote to make it raw # in such case \n mean \n not new line print 'backslashs need to be esaped like "C:\\windows\\fonts"' print r'backslashs need NOT to be esaped in raw quotes like "C:\windows\fonts"' # two adjacent strings are like if they are one string print "what " "is " "your name ?" print ''' W E L C O M E T O 3 Q U O T E S This type of quoting allow you to put " and ' or even "" without escaping, it can be a multi-line string without puting escaped newlines, it's very usefull for CGI too.''' print """ W E L C O M E T O 3 D O U B L E Q U O T E S Same as the previous but with double quotes"""
27 0x1B 033
على الترتيب،
الأرقام الصحيحة تعادل long في لغة سي،
والأرقام الصحيحة الطويلة لا محدودة
(كتلك في bc)
وهي تحدد بحرف L أو l في نهايته مثلاً 0xFFFFFFFEl
.
من جهة أخرى لدينا الأرقم النسبة (الأعداد الكسرية) التي تعرف من الفاصلة العشرية
27.
أو من خلال حرف e في التعبير الهندسي
0.3e+9
التي تعني 0.3x10+9
أما المزية الأكبر فهي دعم الأعداد المركبة (التخيلية) وذلك بوضع J أو j
بعد الجزء التخيلي من العدد مثل 0.3+1.9j
أما العميات فهي تشبه تلك في سي مع بعض الزيادة
هذا الجدول يوضح العمليات مرتبة حسب الأولويات
الأولوية الأعلى | ||
---|---|---|
`` | string conv | ltr |
{} | dictionary | ltr |
[] | list | ltr |
() | tuple | ltr |
() | functions call | ltr |
[:] | slicing | ltr |
[ ] | subscript access | ltr |
. | member access | ltr |
** | رفع لقوة | rtl |
~ | المتممة الثنائية الأولى | ltr |
+ - | الإشارة (وليس الجمع والطرح) | rtl |
* / % | الضرب والقسمة وباقي القسمة والتكرار | ltr |
+ - | الجمع والطرح وجمع النص | ltr |
<< >> | ازاحة لليمن واليسار في النظام الثنائي | ltr |
& | 'و' بالنظام الثنائي | ltr |
^ | إما(أحدهما وليس كلاهما) بالنظام الثنائي | ltr |
| ^ | أو بالنظام الثنائي | ltr |
< > <= >= == != | المتباينات والمقارنات | ltr |
is ,is not | الهوية | ltr |
in ,not in | الإنتماء | ltr |
not | النفي المنطقي | ltr |
and | و المنطقية | ltr |
or | أو المنطقية | ltr |
lambda |
تعريف وظيفة من نوع خاص (تشبه define/inline في سي) وهي فقط
القيمة المعادة lembda myfoo(x,y): x+y
| ltr |
الأولوية الأدنى |
#!/usr/bin/python # print.py - some print tricks print "Hello ", print "World!!" # print can do printf just put % print "look %8.3f" % 15.
#!/usr/bin/python # var1.py - how to use variables msg1 = "Hi! How are you today?" print "/\" * 10 print msg1 print "\/" * 10 i = int(10.5) j = int("3") k = i/j print "i = ", i, ",j = ", j, ",k = ", k a = float(10.5) b = float("3") c = a/b print "a = ", a, ",b = ", b, ",c = ", c
#!/usr/bin/python # user-input.py - how to get input from the user. nm=raw_input("Enter your name: ") print "Hi", nm i=int(raw_input("Enter an integer: ")) j=int(raw_input("Enter an integer: ")) print " i + j =",i+j print " i - j =",i-j print " i * j =",i*j try: print " i / j =",i/j except: print "Can't divide by zero!!" print "nice to meet you ",nm
Python تستطيع معالجة الحالات الاستثنائية
بواسطة try ثم الأمر الذي نتوقع أن يحدث
فيه خلل (حالة استثنائية) ثم
ثم except [EXCEPTIONS]...
ثم ماذا يفعل لو حدثت.
وعند عمل وظائف خاصة بك يمكنك الإعلان عن حدوث حالة ب
raise [EXCEPTIONS]...
هذا مثال على معالجة الحالات الاستثنائية.
#!/usr/bin/python # python and exception handling x=10 try: v=float( raw_input("Enter the speed: ") ) except: print "Error , you should enter a float number" print v try: print x/v except ZeroDivisionError: print "Error , can't divide by zero"
انظر ملف Python Quick Reference وهو باسم cheatsheet في مجلد وثائق python أو Python Tutorial td في مجلد وثائق python بصيغة html
في لغة سي نضع {} حول كل متن block منفصل من الكود ولكن في python نضع نقطتين رأسيتين ‘:‘ ونضع مسافات أو TAB بإزاحة متساوية لذلك المتن. صيغة if هي if ثم الشرط (لا داع للأقواس) ثم : ثم ماذا يفعل إن تحقق وعلى سطر آخر elif ثم شرط آخر كما في السابق ثم else
#!/usr/bin/python # if1.py - simple if i=int(raw_input("Enter an integer: ")) # if the remainder is not zero then it's odd if (i % 2): print i," is odd" else: print i," is even"
#!/usr/bin/python # if2.py - more about if i=int(raw_input("Enter an integer less than 4 : ")) if (i == 1): print "one" elif (i == 2): print "two" elif (i == 3): print "tree" else: print i," is NOT less than 4"
#!/usr/bin/python for i in (0,1,2,3,4,5): print i for i in range(5): print i
#!/usr/bin/python i=1 while (i<=10): print i; ++i
يتم تعريف وظيفة بكتابة def ثم اسم الوظيفة ثم المعاملات بين أقواس وتعيد هذه الوظيفة قيمة من أي نوع بوساطة return
#!/usr/bin/python # gcd0.py - simple buggy gcd calc def gcd(x,y): d=min(x,y) while (d>=1): if ( x % d) == (y % d) == 0 : return d else: d-=1 a=int( raw_input("Enter a +ve integer: ") ) b=int( raw_input("Enter a +ve integer: ") ) print "The greatest common divisor is", \ gcd(a,b)
عدل البرنامج ليتعامل مع حالة السالب والصفر ثم عدله ليستعمل خوارزمية euler
#!/usr/bin/python # default-arg.py - how to give an argument a default value def test(a="Hello",b="world"): print a,", ",b,"!!" test("Hi","Ahmad") test() test(b="Ahmad")
المنظومات array نوعان أولها يسمى Sequence أي متسلسلة وهي 3 أنواع قائمة List و تركيب مرتب Tuple و سلسلة نصية String وهم مجموعة من العناصر نبدأ العد من صفر فالعنصر رقم واحد هو العنصر الثاني والعنصر ذي الرقم السالب نعد من الأخير مثلاً العنصر رقم -2 هو قبل الأخير . لنصل لعنصر معين بوضع رقمه داخل أقواس مربعة [ ] . ويمكن الوصول لجزء منها بوضع رقم البداية ثم ‘:‘ ثم رقم النهاية بهذا نولد متسلسلة أخرى
#!/usr/bin/python # a is an array a=[1,2,3,4,5] # you may say a=(1,2,3,4,5) or a=1,2,3,4,5 print "a = ",a print "the 1st one is ",a[0] print "the last one is ",a[-1] print "the 2nd to 4th elements are ",a[1:3] print "from the 2nd ",a[1:] print "to the 4th ",a[:3] print "a = ",a[:] # strings are array s="Amman" print "Am[man] : ",s[2:]
#!/usr/bin/python # mean.py - calculate the mean of integers a=[] while (1): i=int( raw_input("Enter an integer (-1 to exit): ") ) if (i==-1): break a.append(i) print "you entered : ",a print " max=",max(a), print " mix=",min(a) s=0 for i in a: s+=i print " sum=",s, print " sum=",float(s)/len(a)
LIST.[i:j]=LIST2 | تعديل/إضافة العناصر من i إلى j في القائمة LIST لتكون LIST2 |
LIST.append(X) | إضافة العنصر X للقائمة LIST |
LIST.extend(LIST2) | إضافة القائمة LIST2 للقائمة LIST |
LIST.insert(I,LIST2) | إضافة LIST2 إلى LIST بدأ من الموقع I |
LIST.index(X) | البحث عن أول X داخل القائمة LIST وإعادة رقمه |
LIST.count(X) | عدد العناصر التي قيمتها X في القائمة LIST |
del LIST.[i:j] | حذف العناصر من i إلى j في القائمة LIST |
LIST.pop([I]) | تعيد ثم حذف العنصر رقم I من القائمة LIST إذا لم يقدم تعمل على آخر عنصر |
LIST.remove(X) | حذف أول عنصر قيمته X من القائمة LIST |
LIST.reverse() | قلب ترتيب القائمة |
LIST.sort([FUNC]) | ترتيب القائمة LIST حيث FUNC هي وظيفة الترتيب تعيد -1 أو 0 أو 1 وهي اختيارية |
#!/usr/bin/python # A tuple is a const array you can only add aTuple=(3.0,"two",1) print "the second is", aTuple[1] aTuple+=(0,) print "it's now", aTuple
هناك نوع خاص من المنظومات يسمى القاموس لكنه لا يعتمد على رقم للوصول للقيمة بل يكون على كل تقابل كما بين الكلمة ومعنها في القاموس الورقي ، حيث هو مزاوجة بين مفتاح وقيمة. يتم تحديده بواسطة الحاصرة {} حيث يفصل المفتاح عن القيمة ‘:‘
dict1={1 : "first","two" : "second"}
# A dictionary is a hash (array accessed by a key) aDict={"key1":"val1","key2":"val2","key3":"val3"} for item in aDict.keys(): print aDict[item], # to keep in the same line print # to end the line
len(DICT) | عدد العناصر في DICT |
del DICT[KEY] | حذف العنصر ذو المفتاح KEY من DICT |
DICT.clear() | حذف كل العناصر |
DICT.value() | قائمة بكل عناصر DICT |
DICT.items() | قائمة بكل عناصر DICT على شكل أزواج (KEY,VALUE) |
DICT.keys() | قائمة بكل مفاتيح DICT |
DICT.has_key(KEY) | تحقق من وجود مفتاح KEY |
Python أداة مرنة توفر الكثير للتعمل مع النصوص
وذلك من خلال string module ضع الأمر التالي
import string
في بداية البرنامج
لتفعيل الوظائف المبينة في الجدول
STR.upper() | تحويل الحروف إلى حروف كبيرة |
STR.lower() | تحويل الحروف إلى حروف صغيرة |
STR.swapcase() | عكس حالة الحروف بين كبيرة وصغيرة |
STR.title() | أول حرف من كل كلمة كبير والباقي صغير |
STR.capitalize() | أول حرف كبير |
STR.strip() | حذف المسافات و TAB من طرفي السلسلة STR |
STR.lstrip() | حذف المسافات و TAB من بداية السلسلة STR |
STR.rstrip() | حذف المسافات و TAB من نهاية السلسلة STR |
STR.expandtabs([TABSIZE]) | تحويل كل TAB في السلسلة STR إلى عدد TABSIZE من المسافات |
STR.ljust(W) | نسخة عن STR مع مسافات في البداية ليكون إجمالي طوله W |
STR.rjust(W) | نسخة عن STR مع مسافات في النهاية ليكون إجمالي طوله W |
STR.center(W) | نسخة عن STR مع مسافات من الطرفين ليكون إجمالي طوله W |
STR.count(SUB[,START[,END]]) | عدد SUB الموجودة في STR |
STR.find(SUB[,START[,END]]) | البحث عن أول SUB في STR وإعادة رقمه (-1 إن لم يوجد) |
STR.index(SUB[,START[,END]]) | البحث عن أول SUB في STR وإعادة رقمه تستخدم مع try |
STR.rfind(SUB[,START[,END]]) | كما في find ولكن تبدأ البحث من الجهة الأخرى |
STR.rindex(SUB[,START[,END]]) | كما في index ولكن تبدأ البحث من الجهة الأخرى |
STR.replace(OLD,NEW[, MAX]) | البحث عن OLD وإبدالها ب NEW |
STR.isalnum() | فحص هل STR مكوّن من حروف وأرقام | |
STR.isalpha() | فحص هل STR من حروف | |
STR.digit() | فحص هل STR من أرقام | |
STR.islower() | فحص هل STR من حروف صغيرة | |
STR.isupper() | فحص هل STR من كبيرة | |
STR.istitle() | فحص هل STR له حروف بادءة كبيرة والباقيات صغيرة | |
STR.isspace() | فحص هل STR مكون بالكامل من مسافات | |
STR.startswith(PREFIX[,START[,END]]) | هل يبدأ STR ب PREFIX | |
STR.endswith(SUFFIX[,START[,END]]) | هل يبدأ STR ب SUFFIX |
STR.split([SEP[,MAX]]) | فصل STR إلى عناصر قائمة حيث SEP هي الفاصل |
STR.splitlines([keepends]) | فصل STR إلى قائمة حيث كل سطر هو عنصر |
STR.join(SEQ) | عكس split تعيد توحيد القائمة SEQ يفصل بينها STR |
STR.encode([ENCODING[,ERRORS]]) | تحويل من نظام ترميز ENCODING إلى النظام التلقائي |
STR.translate(TABLE[,DELCHARS]) | استعمال TABLE لترجمة STR |
a="you have %05d trials." % 15 print a
من الوسائل القوية في لغة python هي التعابير العادية RE التي تستخدم في البحث. ضع import re في بداية البرنامج. للتعامل مع تعبير قياسي عليك تصنيفه، انظر مكتبة سي. هذا جدول بالوظائف:
وظائف الحزمة RE | |
---|---|
re.escape(STR) | escape النص STR التي تحتاج لوضع \ |
re.compile(PAT[,FLAGS=0]) | تصنيف التعبير PAT بالخيارات FLAGS هي 0 أو re.I و re.L و re.M و re.S و re.X تمزج ب ‘|‘ |
re.match(PAT,STR[,FLAGS]) | البحث عن PAT في بداية STR تعيد كائن من نوع خاص |
re.search(PAT, STR[,FLAGS]) | البحث عن PAT في STR تعيد كائن من نوع خاص |
re.findall(PAT,STR) | البحث عن مطابقات غير متداخلة وإعادة قائمة بها |
re.sub(PAT,NEW, STR[,COUNT=0]) | تعيد النص الناتج من إبدال كل مطابقة ل PAT ب NEW في STR. حيث NEW هي نص أو ووظيفة تأخذ كائن وتعيد نص |
re.subn(PAT,NEW, STR[,COUNT=0]) | إبدال كما سابقتها.ولكن تعيد زوج من النص وعدد المطابقات |
re.split(PAT,STR[,MAX=0]) | فصل STR عند كل مطابقة ل PAT. |
CPAT.match(STR[,POS][,ENDPOS])
CPAT.search(STR[,POS][,ENDPOS])
CPAT.findall(STR)
CPAT.sub(NEW, STR[,COUNT=0])
CPAT.subn(NEW, STR[,COUNT=0])
CPAT.split(STR[,MAX=0])
pos | نقطة البداية index التي بدأ التطابق عندها |
endpos | نقطة نهاية index التطابق. |
re | السلسلة النص التي استعملت كتعبير قياسي للبحث عنه |
string | النص الذي نبحث فيه |
#!/usr/bin/python # python and RE's import re str1="This is a string and it's a good string" myre1=re.compile(r"^This") # start with "This" myre2=re.compile(r"\b\w*ood\b") # a word end's with ood myre3=re.compile(r"\bt\w*\b,",re.I) # a word start's with t and case insins if (myre1.search(str1)): print "RE 1 ws found" if (myre2.match(str1)): print "RE 2 ws found" if (myre3.match(str1)): print "RE 3 ws found" r=myre3.findall(str1) print "number of RE 3 matches is ", len(r) print "and they are" for i in r print i, print
هذه قائمة بأهم الوظائف
execfile(FILENAME) | تنفذ الملف FILENAME |
eval(STR) |
حساب قيمة STR وكأنها أمر مثلاً eval("1+2") تعطي 3
|
input([PROMPT]) و raw_input([PROMPT]) | سؤال المتخدم ليقوم بالإدخل حيث PROMPT هي الرسالة التي تظهر. الأولى تقوم بحساب ما أدخله والثانية تبقيه كما هو. |
range(START [,END[,STEP]]) | تعيد قائمة تعد من START وحتى END بزيادة STEP في كل مرة |
xrange(START [,END[,STEP]]) | تعد من START وحتى END بزيادة STEP في كل مرة دون توليد قائمة |
slice([START,] END [,STEP]) | تعيد كائن slice?! من START وحتى END بزيادة STEP في كل مرة |
xrange(START [,END[,STEP]]) | تعد من START وحتى END بزيادة STEP في كل مرة دون توليد قائمة |
reduce(FUNC ,LIST) | تطبيق العملية FUNC على عناصر LIST للحصول على قيمة واحدة |
len(OBJ) | عدد عناصر OBJ |
max(LIST) و min(LIST) | القيمة العظمى والصغرى للقائمة LIST |
cmp(X,Y) | تعيد -1 أو 0 أو 1 حسب إشارة X-Y |
abs(X) | القيمة المطلقة ل X |
round(X,N=0) | تقريب X ل N منزلة عشرية |
pow(X,Y [,Z]) | X مرفوعة للقوة Y وإذا حددت Z يؤخذ الباقي عند القسمة عليها |
div(X,Y) | ناتج وباقي القسمة X/Y على كل زوج مرتب |
chr(N) | تعيد سلسلة نصية بها المحرف المقابل للرقم N |
ord(C) | حيث C سلسلة من محرف واحد. تعيد رقم هذا المحرف |
str(OBJ) | تحول OBJ إلى سلسلة نصية |
int(OBJ) | تحول OBJ إلى رقم صحيح |
long(OBJ) | تحول OBJ إلى رقم صحيح طويل |
float(OBJ) | تحول OBJ إلى رقم نسبي float |
oct(X) | تحول الرقم X إلى سلسلة نصية بالتمثيل الثماني |
hex(X) | تحول الرقم X إلى سلسلة نصية بالتمثيل الست-عشري |
complex(X,Y) | تعيد العدد المركب X+Yj |
list(SEQ) | تحويل المتسلسلة SEQ إلى قائمة |
tuple(SEQ) | تحويل المتسلسلة SEQ إلى tuple تلك التي بالأقواس الهلالية. |
filter(FUNC,SEQ) | أخذ العناصر من SEQ التي تعيد FUNC واحد وحذف تلك التي تعطي صفر |
أولاً تعريف كائن ملف (أي فتح ملف) بواسطة
open([FILENAME [,MODE='r'])
حيث FILENAME هو اسم الملف و MODE هو الطور كما في سي
(القراءة هو التلقائي)
بعد ذلك يمكن التعامل معه ب
print [>> FILEOBJ,] [STR1 [, STR2 ]... [,] | الطباعة داخل ملف F (أو الشاشة إذا لم يحدد) |
F.read([SIZE]) | قراءة أول SIZE من الملف (أو كل الملف) |
F.readline() | قراءة سطر من الملف |
F.write(STR) | كتابة STR في الملف |
F.readlines() | قراءة أسطر الملف وتعيد قائمة بها |
F.writelines(LIST) | تكتب القائمة LIST كأسطر في الملف |
F.seek(OFFSET[,WHENCE=0]) | التحرك OFFSET عن بداية الملف أو الموقع الحالي أو نهاية الملف حسب قيم WHENCE التالية 0 أو 1 أو 2 على الترتيب. |
F.tell() | تعيد الموقع الحالي |
F.flush() | إفراغ ال buffer أي إهمال ما لم يقراء بعد |
F.close() | إغلاق الملف |
F.fileno() | تعيد واصف الملف fd انظر وظائف حزمة os |
F.isatty() | هل الملف TTY |
يمكن إضافة المزيد من الوظائف والأصناف من خلال الحزم يتم إضافة الحزمة ب
import MODULE
لمعرفة ماذا توفر dir(MODULE) كما لاحظنا سابقاً مع string.
هذا جدول بأهم ما توفره الحزم من متغيرات ووظائف.
الحزمة sys | |
---|---|
sys.argv | هذا المتغير يحتوي المعاملات الممررة للبرنامج مثلاً sys.argv[0] هي المسار للبرنامج. |
sys.exit(N=0) | الخروج من البرنامج |
sys.exitfunc | الوظيفة التي يشير لها هذا المتغير تنفذ قبل الخروج |
sys.platform | اسم المنصة (النظام) انظر os.name |
sys.maxint | أكبر قيمة للعدد الصحيح |
sys.setdefaultencodin(ENCODING) | تحديد نظام الترميز ليكون ENCODING |
sys.getrecursionlimit و sys.setrecursionlimit(N) | معرفة وتحديد قيمة الحد الأعلى للاستدعاء الذاتي |
متغيرات الحزمة os | |
os.name | اسم نظام التشغيل |
os.error | متغير به آخر خطأ |
os.curdir | الرمز الذي يمثل الدليل الحالي - قيمته "." |
os.pardir | الرمز الدليل الأب - قيمته ".." |
os.sep | الرمز الذي يفصل الأدلة - قيمته "\\" أو "/" |
os.sep | الرمز الذي يفصل المسارات PATH - قيمته ";" أو ":" |
os.linsep | الرمز الذي يفصل الاسطر - قيمته "\r\n" أو "\n" |
os.environ |
قاموس يحتوي متغيرات البيئة - للوصول لقيمة PATH مثلاً
os.environ["PATH"]
|
وظائف الحزمة os | |
os.mkdir(PATH[,MODE]) و os.makedirs(PATH,[MODE=0777]) | فتح الدليل PATH وفق الأذونات MODE الأولى تشترط وجود الأدلة التي ينتمي لها والثانية تفتحهم إن لم يوجدوا |
os.rmdir(PATH) و os.removedirs(PATH) | حذف الدليل PATH |
os.unlink(PATH) و os.remove(PATH) | حذف الدليل PATH (لا فرق بينهما) |
os.rename(OLDNAME,NEWNAME) | تغيير/نقل OLDNAME إلى NEWNAME انظر shutil |
os.getcwd() و os.chdir(PATH) | معرفة و تغيير الدليل الحالي (كما pwd و cd في سطر الأوامر) |
os.listdir(PATH) | قائمة بالملفات الموجودة في الدليل PATH |
os.chmod(PATH,MODE) | تغيير أذونات الملف PATH |
os.stat(PATH) | معلومات عن الملف PATH مثل st_size و st_atime و st_mtime و st_ctime و st_ino و st_uid و st_gid |
os.utime(PATH, (A,M) ) | تعديل وقت آخر وصول وتعديل للملف PATH لتكون A و M على الترتيب |
os.times() | الوقت انظر حزمة time |
os.open(FILE,FLAG, MODE) | فتح الملف بطريقة واصف الملف fd انظر مكتبة سي |
os.read(FD, N) | القراءة من الملف FD بما لا يزيد عن N |
os.write(FD, STR) | كتابة STR في الملف FD |
os.lseek(FD, POS,WHENCE) | تحريك مؤشر الملف FD بمقدار POS حيث WHENCE تأخذ 0 أو 1 أو 2 |
os.close(FD) | إغلاق الملف |
os._exit(N) | الإجبار على الخروج -دون إغلاق الملفات وتحرير الذاكرة- استعمل sys.exit |
os.execv(PATH, ARGV) | تنفيذ PATH بالمعاملات ARGV أولها المسار نفسه. تستعمل مع fork |
os.system(COMMAND) | تنفيذ COMMAND بواسطة shell المفضل |
os.pipe() | عمل أنبوب - تعيد زوج مرتب r و w طريقة استعماله كما في مكتبة سي |
os.fork() | تفريع/إنشاء عملية بنت |
os.popen(COMMAND,[MODE='r']) | تنفيذ البرنامج COMMAND باستعمال shell ثم عمل أنبوب |
os.getpid() | معرف العملية للبرنامج |
os.wait() | انتظار إنتهاء العمليات البنت للبرنامج |
os.waitpid(PID,OPTIONS) | انتظار إنتهاء العمليات PID |
os.kill(PID,SIGNAL) | كما في أمر kill من سطر الأوامر |
وظائف حزمة path وهي جزء من os | |
os.path.dirname(PATH) | أخذ الدليل بحذف آخر عنصر من PATH |
os.path.basename(PATH) | أخذ اسم الملف فقط الجزء الأخير من PATH |
os.path.split(PATH) | فصل PATH لمكونيه السابقين وتعيدهما على شكل زوج مرتب |
os.path.splitext(PATH) | فصل PATH إلى زوج مرتب من اسم وامتداد |
os.path.abspath(PATH) | تحويل PATH إلى مطلق مثلاً بحل ".." |
os.path.expanduser(PATH) | حل "~" في PATH |
os.path.expandvars(PATH) |
حل "$VAR" في PATH
|
os.path.exists(PATH) | هل PATH موجود |
os.path.isabs(PATH) | هل PATH مسار مطلق |
os.path.isdir(PATH) | هل PATH دليل/مجلد |
os.path.islink(PATH) | هل PATH وصلة |
os.path.ismount(PATH) | هل PATH نقطة ضم |
os.path.join(P1[,P2[,...]]) | تركيب P1 و P2 .. لعمل مسار (وذلك بوضع os.sep بينها) |
os.path.getsize(FILENAME) | مساحة الملف FILENAME بالبايت |
os.path.getmtime(FILENAME) | وقت آخر تعديل في FILENAME بالثواني بعد 1970 |
os.path.getatime(FILENAME) | وقت آخر وصول في FILENAME بالثواني بعد 1970 |
وظائف الحزمة shutil | |
shutil.copy(SRC, DEST) | نقل الملف SRC إلى DEST (يجب أن لا يكو موجوداً) |
shutil.copytree(SRC, DEST[, SYMS]) | نقل الملفات في SRC إلى DEST إذا كانت SYMS واحد يتم التعامل مع الوصلات |
shutil.rmtree(PATH) | حذف كل ملفات PATH |
وظائف الحزمة time | |
time.sleep(SEC) | تعليق تشغيل البرنامج SEC من الثواني |
time.time() | عدد نسبي يمثل الوقت الحالي بالثواني منذ 1970 بالتوقيت العالمي UTC/GMT |
time.gmtime(SEC) و time.localtime(SEC) |
تركيب يمثل الوقت المعطى SEC الأولى عالمي والثانية محلي. يحتوي(year aaaa, month(1-12),day(1-31), hour(0-23), minute(0-59), second(0-59), weekday(0-6, 0 is monday), Julian day(1-366), daylight flag(-1,0 or 1))
|
time.asctime(TM) و | تحويل التركيب TM إلى سلسلة نصية وفي لثانية وفق الهيئة FMT |
time.mktime(TM) | تحويل TM إلى عدد ثواني |
time.strptime(STR[,FMT]) | تستقبل النص STR وفق FMT وتحوله إلى تركيب كالذي يعيده localtime |
حزمة math | |
math.pi | متغير قيمته النسبة التقريبية "باي" |
math.e | متغير قيمته عدد euler تقريباً 2.71828183 يسمى هـ |
math.fabs(X) | القيمة المطلقة |
math.floor(X) و math.ceil(X) | اقتران أكبر عدد صحيح وأقل عدد صحيح |
math.fmod(X, Y) | باقي القسمة X/Y |
math.modf(X) | الجزء النسبي من الرقم X للجزء الصحيح اطرحهما |
math.frexp(X) و math.ldexp(X, Y) |
تقسيم الرقم بالصورة الهندسية 0.3x10+9
إلى كسر وقوة
|
math.sin(X) و math.asin(X) | جيب الزاوية و الاقتران العكسي له |
math.cos(X) و math.acos(X) | جيب تمام الزاوية و الاقتران العكسي له |
math.tan(X) و math.atan(X) و math.atan2(X, Y) | ظل الزاوية و الاقتران العكسي له والعكسي ل X/Y |
math.sinh(X) و math.cosh(X) و math.tanh(X) | اقترنات hyperbolic |
math.exp(X) | رفع عدد euler للقوة X |
math.log(X) و math.log10(X) | اللوغاريتم الطبيعي وللأساس 10 |
math.pow(X, Y) و math.sqrt(X) | رفع X للقوة Y وأخذ الجذر التربيعي لX |
تعريف صنف يكون بالكلمة المفتحية class بالصيغة
class MyClass [(MyClassBase1 , MyClassBase2... )]:
__init__
والهدم __del__
.
المتغيرات الأعضاء member variables في الصنف تكون ب self.X
يمكنك وضع وظائف وصنوف في ملف مستقل واستعماله كمكتبة
في برنامج آخر وذلك ب import MODULE
حيث MODULE اسم الملف دون py.
وإذا كنت تريد التأكد من أن المكتبة لن تنفذ بالخطأ
أو تريد عرض رسالة تبين كيفية استعمالها ...
تكون بفحص __name__ مثلاً
ضع في آخر الملف الخاص بها
if __name__ == "__main__": print """ Hello, I'm a lib used by other programs don't runme """
#!/usr/bin/python # this is SimpleClass.py # OOP and classes class Simple: # the self arg is just like this (you can't delete it) def __init__(self, str): print "Inside the Simple constructor" self.s = str # Two methods: def show(self): print self.s def showMsg(self, msg): print msg + ':', self.show() # Calling another method # if we are runed as a prog (else then this file is used as module) if __name__ == "__main__": # Create an object: x = Simple("constructor argument") x.show() x.showMsg("A message")
#!/usr/bin/python # Inheritance # search for SimpleClass.py and import it from SimpleClass import Simple class Simple2(Simple): def __init__(self, str): print "Inside Simple2 constructor" # You must explicitly call # the base-class constructor: Simple.__init__(self, str) def display(self): self.showMsg("Called from display()") # Overriding a base-class method def show(self): print "Overridden show() method" # Calling a base-class method from inside # the overridden method: Simple.show(self) class Different: def show(self): print "Not derived from Simple" if __name__ == "__main__": x = Simple2("Simple2 constructor argument") x.display() x.show() x.showMsg("Inside main") def f(obj): obj.show() # One-line definition f(x) f(Different())
#!/usr/bin/python # i18n with python os.environ.get("LC_LOCAL") import gettext gettext.bindtextdomain ("myprog", "/usr/share/locale") gettext.textdomain ("myprog") _=gettext.gettext # any thing to be translated passed to _( ) print _("Hello I'll be translated")
PYTHONPATH="./" gtk-test.py
أو ضع الأسطر التالية:
import sys import os sys.path.append(os.path.dirname(sys.argv[0])) # or # sys.environ["PYTHONPATH"]=os.path.dirname(sys.argv[0])
import gtk
هذا هو البرنامج
#!/usr/bin/python # gtk-test.py: simple gtk2 example import gtk def hello_cb(button): print "Hello World" window.destroy() window = gtk.Window(gtk.WINDOW_TOPLEVEL) # create a top level window window.connect("destroy", gtk.mainquit) # quit the event loop on destruction window.set_border_width(10) # set padding round child widget button = gtk.Button("Hello World") button.connect("clicked", hello_cb) # call hello_cb when clicked window.add(button) # add button to window button.show() # show button window.show() gtk.main() # enter the main event loop
import gtk import gtk.glade def some_handler(widget): pass xml = gtk.glade.XML('filename.glade') widget = xml.get_widget('widgetname') xml.autoconnect({ 'some_handler': some_handler }) gtk.main()
#!/usr/bin/python # python and CGI import cgi print """ <html> <body> <h1>Hello world</h1> </body> </html> """
www.python.org www.python.sf.net www.starship.python.net www.vex.net/parnassus www.zope.com www.pythonware.com www.devshed.com www.mindview.net/Books/TIPython members.nbci.com/alan_gauld/tutor/tutindex.htm aspn.activestate.com/ASPN/Python/cookbook www.networkcomputing.com/unixworld/tutorial/005/005.html www.vic.auug.org.au/auugvic/av_paper_python.html
<< السابق | كتاب لينكس الشامل | التالي >> |