رفتن به مطلب

Mohammad Aref

مدیر ارشد
  • تعداد ارسال ها

    33,172
  • تاریخ عضویت

  • آخرین بازدید

  • روز های برد

    410

آخرین بار برد Mohammad Aref در 24 تیر

Mohammad Aref یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

119,554 Excellent

درباره Mohammad Aref

  • درجه
    مدیر ارشد انجمن
  • تاریخ تولد 15 آذر 776

اطلاعات شخصی

  • نام واقعی
    محمد عارف خیابانی
  • جنسیت
    مذکر
  • محل سکونت
    البرز
  • توضیحات داخل پروفایل
    سلام دوستان عزیز
    لطفاً سوالات و درخواست های شهرسازی رو در تاپیک زیر مطرح کنید:
    http://www.noandishaan.com/forums/thread58745-83.html

اطلاعات شغلی و تحصیلی

  • رشته تحصیلی
    مهندسی شهرسازی
  • گرایش
    برنامه ریزی شهری
  • مقطع تحصیلی
    فوق لیسانس
  • دانشگاه محل تحصیل
    کارشناسی گیلان-ارشد کردستان
  • شغل
    کارشناس شهرسازی دفتر خدمات نوسازی

آخرین بازدید کنندگان نمایه

102,772 بازدید کننده نمایه
  1. پسورد تمام فایلها=www.noandishaan.com
  2. سلام. تو تاپیک زیر رو لینکی که انتهای تاپیک هست کلیک کن، شروع به دانلود میشه. لینکش مشکلی نداشت
  3. سلام مهندس

    طرح جامع شهر ورزنه را از کجا اوردید که لینک دانلودش را گذاشتید.

    1. Mohammad Aref

      Mohammad Aref

      سلام. وقت بخیر

      یکی از دوستان داخل انجمن فایل رو فرستاده بودن

  4. Mohammad Aref

    درخواست راهنمایی ؛ فرمت kml

    خواهش میکنم. به نظرم دوستان مهندسی کامپیوتر با توجه به تسلطی که روی زبان های برنامه نویسی دارن، بهتر بتونن تو این زمینه راهنمایی کنن. من خودم آشنایی ندارم. به نظرم پایتون شاید مناسب باشه.
  5. Mohammad Aref

    نرم افزار وکا

    از همین لینک زیر استفاده کردین؟ چه اروری میده بهتون؟
  6. سلام. به سلامتی ایشالا که حسابی هم بگیره و موفق باشید یه کمی درباره زمینه کاری که مدنظرتون هست میگین؟
  7. پردازش XML در پایتون در این بخش، نحوه parse و پردازش XML توسط زبان برنامه نویسی پایتون را با استفاده از API های DOM و SAX را نشان خواهیم داد. XML یک زبان قابل حمل (Portable) و متن باز است که به برنامه نویسان این امکان را می دهد تا برنامه های خود را توسعه دهند به طوری که این برنامه ها قابلیت خوانده شدن توسط برنامه های دیگر را داشته باشد، بدون در نظر گرفتن آنکه سیستم عامل و یا زبان برنامه نویسی مورد نظر چه خواهد بود. XML چیست؟ XML مخفف Extensible Markup Language می باشد، که یک زبان نشانه گذاری مانند HTML یا SGML است. XML برای کار با داده های کم تا متوسط بدون نیاز به SQL بسیار کاربرد دارد. معماری های XML Parser و API ها کتابخانه استاندارد پایتون رابط های مختصر ولی مفیدی برای کار با XML فراهم کرده است. دو تا از پایه ای ترین و از نظر استفاده گسترده ترین API ها برای داده XML رابط های SAX و DOM هستند. SAX مخفف Simple API for XML: در اینجا، شما فراخوان هایی را برای رخدادهای مورد نظر ثبت می کنید و سپس به parser اجازه می دهید درون سند حرکت کند. این حالت زمانیکه سندهای شما خیلی بزرگ هستند و یا محدودیت حافظه دارید سودمند می باشد. در این حالت فایل های خوانده شده از دیسک parse می شوند و کل فایل هرگز در حافظه ذخیره نمی شود. DOM مخفف Document Object Model: این API توصیه ی کنسرسیوم World Wide Web می باشد و اینگونه است که تمام فایل از حافظه خوانده شده و در یک فرم سلسله مراتبی (hierarchical) و درختی برای نمایش تمام ویژگی های سند XML ذخیره می شود. واضح است که SAX نمی تواند پردازش اطلاعات در فایل های بزرگ را به همان سرعتی که DOM انجام می دهد، انجام دهد. از طرف دیگر، استفاده از DOM می تواند به طور جدی منابع شما را نابود کند، بخصوص اگر با فایل های کوچک با تعداد بالا کار می کنید. Sax فقط خواندی است، در حالیکه DOM اجازه تغییرات در فایل XML را به شما می دهد. با توجه به اینکه این دو API متفاوت کاملا کامل کننده یکدیگر می باشند، دلیل ندارد که شما نتوانید از هردوی آن ها برای پروژه های بزرگ استفاده کنید. در تمامی مثال های این آموزش، اجازه دهید از فایل XML ساده movies.xml زیر به عنوان ورودی استفاده کنیم: <collection shelf = "New Arrivals"> <movie title = "Enemy Behind"> <type>War, Thriller</type> <format>DVD</format> <year>2003</year> <rating>PG</rating> <stars>10</stars> <description>Talk about a US-Japan war</description> </movie> <movie title = "Transformers"> <type>Anime, Science Fiction</type> <format>DVD</format> <year>1989</year> <rating>R</rating> <stars>8</stars> <description>A schientific fiction</description> </movie> <movie title = "Trigun"> <type>Anime, Action</type> <format>DVD</format> <episodes>4</episodes> <rating>PG</rating> <stars>10</stars> <description>Vash the Stampede!</description> </movie> <movie title = "Ishtar"> <type>Comedy</type> <format>VHS</format> <rating>PG</rating> <stars>2</stars> <description>Viewable boredom</description> </movie> </collection> parse کردن XML با SAX SAX یک رابط استاندارد برای parse کردن XML به صورت رویداد محور (event-driven) است. پردازش XML با استفاده از SAX به طور معمول نیاز به ایجاد ContentHandler شما توسط xml.sax.ContentHandler خواهد داشت. ContentHandler شما تگ های خاص و attribute هایی XML شما را کنترل می کند. یک شیء ContentHandler متدهایی برای کنترل رویدادهای مختلفی را فراهم می کند. متدهای startDocument و endDocument در شروع و پایان فایل XML فراخوانی می شوند. متد characters(text) داده کاراکتر فایل XML توسط پارامتر text ارسال می کند. ContentHandler در شروع و پایان هر المان (element) فراخوانی می شود. در صورتی که parser در مُد namespace نباشد، متد های startElement(tag, attributes) و endElement(tag) فراخوانی می شوند، در غیر اینصورت، متدهای متناظر startElementNS و endElementNS فراخوانی می شوند. در اینجا، tag المان تگ می باشد، و attributes یک شیء Attribute می باشد. متد make_parser متد زیر یک شیء جدید parser ایجاد کرده و آن را برمیگرداند. آبجکت parser ایجاد شده اولین نوع parser خواهد بود که سیستم پیدا می کند. xml.sax.make_parser( [parser_list] ) در زیر جزئیات پارامترها را مشاهده می کنید parser_list: آرگومان اختیاری شامل یک لیست از parser ها مورد استفاده که باید همگی متد make_parser را پیاده سازی کنند. متد parse این متد یک SAX parser را ایجاد کرده و از آن برای parse کردن یک سند استفاده می کند. xml.sax.parse( xmlfile, contenthandler[, errorhandler]) در زیر جزئیات پارامترها را مشاهده می کنید: xmlfile: نام فایل XML ای که قرار است خوانده شود. contenthandler: شیء ContentHandler می باشد. errorhandler: در صورت تعیین، errorhandler باید یک شیء SAX ErrorHandler باشد. متد parseString یک متد دیگر برای ایجاد یک SAX parser و همچنین parse رشته XML تعیین شده وجود دارد. xml.sax.parseString(xmlstring, contenthandler[, errorhandler]) در زیر جزئیات پارامترها را مشاهده می کنید: xmlfile: نام فایل XML ای که قرار است خوانده شود. contenthandler: شیء ContentHandler می باشد. errorhandler: در صورت تعیین، errorhandler باید یک شیء SAX ErrorHandler باشد. مثال: #!/usr/bin/python3 import xml.sax class MovieHandler( xml.sax.ContentHandler ): def __init__(self): self.CurrentData = "" self.type = "" self.format = "" self.year = "" self.rating = "" self.stars = "" self.description = "" # Call when an element starts def startElement(self, tag, attributes): self.CurrentData = tag if tag == "movie": print ("*****Movie*****") title = attributes["title"] print ("Title:", title) # Call when an elements ends def endElement(self, tag): if self.CurrentData == "type": print ("Type:", self.type) elif self.CurrentData == "format": print ("Format:", self.format) elif self.CurrentData == "year": print ("Year:", self.year) elif self.CurrentData == "rating": print ("Rating:", self.rating) elif self.CurrentData == "stars": print ("Stars:", self.stars) elif self.CurrentData == "description": print ("Description:", self.description) self.CurrentData = "" # Call when a character is read def characters(self, content): if self.CurrentData == "type": self.type = content elif self.CurrentData == "format": self.format = content elif self.CurrentData == "year": self.year = content elif self.CurrentData == "rating": self.rating = content elif self.CurrentData == "stars": self.stars = content elif self.CurrentData == "description": self.description = content if ( __name__ == "__main__"): # create an XMLReader parser = xml.sax.make_parser() # turn off namepsaces parser.setFeature(xml.sax.handler.feature_namespaces, 0) # override the default ContextHandler Handler = MovieHandler() parser.setContentHandler( Handler ) parser.parse("movies.xml") خروجی *****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Year: 2003 Rating: PG Stars: 10 Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Year: 1989 Rating: R Stars: 8 Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Stars: 10 Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Stars: 2 Description: Viewable boredom parse یا پردازش XML با DOM DOM یا Document Object Model یک API مستقل از زبان از کنسرسیوم World Wide Web یا W3C می باشد که برای دسترسی و ویرایش مستندات XML به کار می رود. DOM برای برنامه های با دسترسی تصادفی (random-access) بسیار سودمند می باشد. SAX تنها اجازه دیدن یک بیت از سند را در یک زمان ان به شما می دهد. در صورتی که یک المان را در SAX مشاهده می کنید، به المان های دیگر دسترسی ندارید. در اینجا ساده ترین راه برای بارگذاری سریع یک سند XML و ایجاد یک شیء minidom با استفاده از ماژول xml.dom است. شیء minidom یک روش ساده parser است که یک درخت DOM از فایل XML ایجاد می کند. مثال #!/usr/bin/python3 from xml.dom.minidom import parse import xml.dom.minidom # Open XML document using minidom parser DOMTree = xml.dom.minidom.parse("movies.xml") collection = DOMTree.documentElement if collection.hasAttribute("shelf"): print ("Root element : %s" % collection.getAttribute("shelf")) # Get all the movies in the collection movies = collection.getElementsByTagName("movie") # Print detail of each movie. for movie in movies: print ("*****Movie*****") if movie.hasAttribute("title"): print ("Title: %s" % movie.getAttribute("title")) type = movie.getElementsByTagName('type')[0] print ("Type: %s" % type.childNodes[0].data) format = movie.getElementsByTagName('format')[0] print ("Format: %s" % format.childNodes[0].data) rating = movie.getElementsByTagName('rating')[0] print ("Rating: %s" % rating.childNodes[0].data) description = movie.getElementsByTagName('description')[0] print ("Description: %s" % description.childNodes[0].data) خروجی Root element : New Arrivals *****Movie***** Title: Enemy Behind Type: War, Thriller Format: DVD Rating: PG Description: Talk about a US-Japan war *****Movie***** Title: Transformers Type: Anime, Science Fiction Format: DVD Rating: R Description: A schientific fiction *****Movie***** Title: Trigun Type: Anime, Action Format: DVD Rating: PG Description: Vash the Stampede! *****Movie***** Title: Ishtar Type: Comedy Format: VHS Rating: PG Description: Viewable boredom
  8. چاپ هرم Pyramid در پایتون در این بخش، مثالی از نحوه و چگونگی چاپ هرم در زبان برنامه نویسی پایتون را نشان خواهیم داد: def half_pyramid(rows): print('Half pyramid...\n') for i in range(rows): print('*' * (i 1)) def full_pyramid(rows): print('\nFull pyramid...\n') for i in range(rows): print(' '*(rows-i-1) '*'*(2*i 1)) def inverted_pyramid(rows): print('\nInverted pyramid...\n') for i in reversed(range(rows)): print(' '*(rows-i-1) '*'*(2*i 1)) half_pyramid(5) full_pyramid(5) inverted_pyramid(5) خروجی Half pyramid... * ** *** **** ***** Full pyramid... * *** ***** ******* ********* Inverted pyramid... ********* ******* ***** *** *
  9. Mohammad Aref

    تازه های شیمی

    این تغییرات که به خاطر چت روم نبود. تو سیستم قبلی هم میشد چت رو گذاشت هدف تغییر ساختار کدنویسیش بود که ارتقا پیدا کنه به ساده ترین کارای اقتصادی که تو سایت داریم گیر میدن، حالا بیایم فروم رو حالت بنگاه اقتصادی و علمی کنیم؟ فروم ها تو خارج و ایران خیلی متفاوتن. به خصوص تو این چندسال اخیر که به نوع رویکرد عمومی که داشتن، حسابی راکد شدن. واسه همین منم به عنوان یه هدف اصلی بهش نگاه نمیکنم که تغییرشم بخواد استراتژیک باشه همین که مشکلات کدنویسی که داشت حل میشد، کافی بود اون نگاه خیلی تخصصی هم که میگی نیازمند ابزاری به اسم متخصص هست من شاید بتونم یه تالار شهرسازی رو به اون شکل پیش ببرم، ولی قطعا، هیچ تخصصی تو رشته های دیگه ندارم. تو یه برهه ای هم بعضی از تالارا این حالت تخصصی رو داشتن به خاطر افراد متخصصی که توش بودن. ولی خب الان تو این حالت دوره اش نیست. ایشالا تو حالت دیگه ای این اتفاق رخ میده
  10. دفترچه سوالات آزمون نظام مهندسی شهرسازی که بهمن 97 برگزار شد رو از لینک زیر می تونید دانلود کنید. دانلود دفترچه سوالات
  11. جزوه آموزشی آشنایی با طرح تفصیلی بر و کف که توسط معاونت شهرسازی و معماری شهرداری تهران در سال 1397 منتشر شده رو به صورت PDF از لینک زیر می تونید دانلود کنید. فهرست مطالب: تاریخچه کمیسیون رسیدگی به طرح ها تعاریف بر و کف پخ تقاطع معابر تعیین پخ در املاک واگذار شده تفکیک و افراز عوارض حق مشرفیت ضوابط کنسول حریم ها دستورالعمل تهیه طرح های ویژه دستورالعمل نورگیری و دسترسی عابرپیاده از کندرو بزرگراه ها و فضای سبز عمومی صدور مجوز در املاک قولنامه ای صدور مجوز املاک واگذاری سازمان زمین شهری صدور مجوز املاک متعلق به نیروهای مسلح دستورالعمل مربوط به اراضی فاقد کاربری ارزش بهینه ناشی از اجرای طرح جامع و تفصیلی جدید شهر تهران دستورالعمل واگذاری گذر فی مابین پلاک های تجمیعی مجوز کاهش هزینه عوارض زیربنا و تراکم مازاد جهت تشویق مالکین به منظور تجمیع پلاک های همجوار استعلام وضعیت زمین از وزارت راه و شهرسازی دستورالعمل بازنگری تعرفه تهیه طرح های اجرایی شبکه معابر شهر تهران مصوبه تعیین تکلیف موارد تجمیع و تعیین قطعات چندپهنه ای دستورالعمل اجرایی ارسال درخواست به کمیسیون ماده 5 شرح خدمات طرح های توجیهی شهرسازی (امکان سنجی) چک لیست مدارک حداقلی پرونده به منظور رسیدگی دبیرخانه کمیسیون ماده 5 دستورالعمل پایش قانونی طرح تفصیلی و ... دانلود جزوه
  12. توابع در پایتون تابع یک بلاک کد سازمان یافته با قابلیت استفاده دوباره برای انجام تنها یک کار مشخص و مرتبط می باشد. توابع ماژول بندی بهتری را برای برنامه شما فراهم کرده و قابلیت استفاده دوباره از کد برنامه را بیشتر می کند. همانطور که می دانید، پایتون توابع داخلی بسیاری همانند print() و غیره را در اختیار شما قرار داده است. با این حال شما می توانید توابع خودتان را نیز ایجاد کنید. این توابع را، توابع تعریف شده توسط کاربر یا user-defined می نامند. تعریف یک تابع شما می توانید توابع را برای فراهم ساختن عملکردهای مورد نیاز تعریف کنید. در زیر قوانین ساده جهت تعریف تابع در پایتون آمده است. بلاک تابع با کلمه کلیدی def شروع شده و نام تابع و پرانتز ( () ) باز و بسته بعد از آن می آید. تمامی پارامترها و آرگومان های ورودی باید درون پرانتز قرار بگیرند. شما همچنین می توانید پارامترها را درون پرانتز حتی تعریف کنید. عبارت اول یک تابع می تواند یک عبارت اختیاری باشد - رشته ای برای مستندات تابع یا docstring. بلاک کد درون هر تابع با یک علامت کالن (:) شروع شده و به صورت تو رفته (indented) است. عبارت return باعث خروج از یک تابع می شود، و به طور دلخواه می تواند یک مقدار را به قسمتی از کد که تابع را فراخوانی کرده است برگرداند. عبارت return با هیچ آرگومانی همانند return None است. نحوه تعریف تابع def functionname( parameters ): "function_docstring" function_suite return [expression] به طور پیشفرض، نحوه ترتیب قرار گرفتن پارامترهای تابع در علمکرد تابع موثر است و شما نیاز خواهید داشت آن ها را به همان ترتیبی که تعریف شده اند استفاده کنید. مثال تابع زیر یک پارامتر ورودی رشته دریافت کرده و آن را چاپ می کند. def printme( str ): "This prints a passed string into this function" print (str) return فراخوانی تابع تعریف یک تابع، تعیین یک نام برای آن، تعیین پارامترها و ساختار بلاک کد آن. زمانیکه ساختار پایه ای یک تابع تمام شد، شما می توانید آن را از طریق فراخوانی از تابعی دیگر یا به طور مستقیم اجرا کنید. برنامه زیر فراخوانی تابع printme() را نشان می دهد: #!/usr/bin/python3 # Function definition is here def printme( str ): "This prints a passed string into this function" print (str) return # Now you can call printme function printme("This is first call to the user defined function!") printme("Again second call to the same function") زمانیکه کد بالا اجرا شد، خروجی زیر ایجاد می شود: This is first call to the user defined function! Again second call to the same function فراخوانی با مقدار و با reference تمامی پارامترها در زبان پایتون با reference ارسال می شوند. این بدان معناست که اگر شما پارامتر را درون تابع تغییر دهید، این پارامتر همچنین در تابع فراخوانی شده نیز تغییر خواهد کرد. برای مثال: #!/usr/bin/python3 # Function definition is here def changeme( mylist ): "This changes a passed list into this function" print ("Values inside the function before change: ", mylist) mylist[2]=50 print ("Values inside the function after change: ", mylist) return # Now you can call changeme function mylist = [10,20,30] changeme( mylist ) print ("Values outside the function: ", mylist) خروجی: Values inside the function before change: [10, 20, 30] Values inside the function after change: [10, 20, 50] Values outside the function: [10, 20, 50] در مثالی دیگر آرگومانی که با reference ارسال شده است و reference آن درون تابع فراخوانی شده تغییر می کند: #!/usr/bin/python3 # Function definition is here def changeme( mylist ): "This changes a passed list into this function" mylist = [1,2,3,4] # This would assi new reference in mylist print ("Values inside the function: ", mylist) return # Now you can call changeme function mylist = [10,20,30] changeme( mylist ) print ("Values outside the function: ", mylist) پارامتر mylist درون تابع changeme داخلی می باشد، تغییر mylist درون تابع تاثیری در mylist نخواهد گذاشت. تابع در واقع هیچ کاری انجام نداده و خروجی زیر ایجاد می شود: Values inside the function: [1, 2, 3, 4] Values outside the function: [10, 20, 30] آرگومان های تابع شما می توانید تابع را به از نظر آرگومان به شکل های زیر فراخوانی کنید: آرگومان های اجباری آرگومان های keyword آرگومان های پیشفرض آرگومان های variable-length آرگومان های اجباری آرگومان های اجباری آن های هستند که در مکان و ترتیب قرارگیری درست خود به تابع ارسال می شوند. در اینجا تعداد آرگومان های تابع فراخوانی شده باید دقیقا با تعریف تابع یکسان باشند. جهت فراخوانی printme()، شما نیاز خواهید داشت دقیقا یک آرگومان به آن ارسال کنید، در غیر اینصورت خطای syntax همانند زیر ایجاد خواهد شد: #!/usr/bin/python3 # Function definition is here def printme( str ): "This prints a passed string into this function" print (str) return # Now you can call printme function printme() خروجی: Traceback (most recent call last): File "test.py", line 11, in printme(); TypeError: printme() takes exactly 1 argument (0 given) آرگومان های Keyword آرگومان های keyword وابسته به فراخوانی تابع می باشند. زمانیکه شما آرگومان keyword را در یک فراخوانی تابع استفاده می کنید، آن بخش فراخوانی کننده این آرگومان را توسط نام پارامتر تشخیص می دهد. مثال زیر فراخوانی keyword در تابع printme() نشان داده شده است: #!/usr/bin/python3 # Function definition is here def printme( str ): "This prints a passed string into this function" print (str) return # Now you can call printme function printme( str = "My string") خروجی: My string مثال زیر تصویر واضح تری را ترسیم می کند. توجه داشته باشید که ترتیب پارامترها مشکلی ایجاد نمی کند. #!/usr/bin/python3 # Function definition is here def printinfo( name, age ): "This prints a passed info into this function" print ("Name: ", name) print ("Age ", age) return # Now you can call printinfo function printinfo( age = 50, name = "miki" ) خروجی: Name: miki Age 50 آرگومان پیشفرش در صورتیکه هیچ مقداری به آرگومان فراخوانی شده اختصاص داده نشود، آرگومان پیشفرض مقدار آن را مشخص می کند. در مثال زیر در صورتی که مقدار age تعیین نشود مقدار پیشفرض آن چاپ می شود: #!/usr/bin/python3 # Function definition is here def printinfo( name, age = 35 ): "This prints a passed info into this function" print ("Name: ", name) print ("Age ", age) return # Now you can call printinfo function printinfo( age = 50, name = "miki" ) Name: miki Age 50 Name: miki Age 35 آرگومان variable-length شما ممکن است برای پردازش یک تابع نیاز به آرگومان هایی بیش از آن هایی که در تعریف تابع تعریف کرده اید داشته باشید. این آرگومان ها را variable-length می نامند و در تعریف تابع نام گذاری نمی شوند، به جز آرگومان های اجباری و پیشفرض. def functionname([formal_args,] *var_args_tuple ): "function_docstring" function_suite return [expression] علامت ستاره (*) قبل از نام متغیر قرار می گیرد و مقادیر تمامی آرگومان هایی که keyword نیستند را در خود نگه می دارد. این تاپل (tuple) در صورتیکه آرگومان اضافه ای در فراخوانی تابع تعیین نشود، خالی باقی می ماند. #!/usr/bin/python3 # Function definition is here def printinfo( arg1, *vartuple ): "This prints a variable passed arguments" print ("Output is: ") print (arg1) for var in vartuple: print (var) return # Now you can call printinfo function printinfo( 10 ) printinfo( 70, 60, 50 ) خروجی: Output is: 10 Output is: 70 60 50 توابع Anonymous این توابع anonymous نامیده می شوند، چرا که به صورت استاندارد با کلمه کلیدی def تعریف نمی شوند. شما می توانید برای ایجاد توابع کوچک anonymous از کلمه کلیدی lambda استفاده کنید. فرم lambda می تواند هر تعداد آرگومان دریافت کند، ولی تنها یک مقدار را بر می گرداند. lambda ها نمی توانند حاوی چندین عبارت و دستور باشند. تابع anonymous نمی تواند به صورت مستقیم برای چاپ فراخوانی شود چرا که نیاز به یک عبارت دارد. توابع lambda دارای namespace های داخلی خود می باشند و تنها به متغیر های موجود در لیست پارامترها و آن هایی که در global تعریف شده اند دسترسی دارند. اگرچه اینطور به نظر می رسد که lambda ها نسخه تک خطی توابع می باشند، آن ها همانند عبارت inline در C یا C نمی باشند. شکل دستوری lambda [arg1 [,arg2,.....argn]]:expression مثال زیر فرم lambda و نحوه کارکرد آن را نشان می دهد: #!/usr/bin/python3 # Function definition is here sum = lambda arg1, arg2: arg1 arg2 # Now you can call sum as a function print ("Value of total : ", sum( 10, 20 )) print ("Value of total : ", sum( 20, 20 )) خروجی: Value of total : 30 Value of total : 40 عبارت return عبارت return برای خروج از یک تابع است، که می تواند به طور دلخواه حاوی مقداری برای برگرداندن به فراخوانی تابع باشد. مثال زیر نحوه برگرداندن مقدار توسط return را نشان می دهد: #!/usr/bin/python3 # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 arg2 print ("Inside the function : ", total) return total # Now you can call sum function total = sum( 10, 20 ) print ("Outside the function : ", total ) خروجی: Inside the function : 30 Outside the function : 30 Scope متغیرها تمامی متغیرهای موجود در برنامه ممکن است در همه جای برنامه در دسترس نباشند. این موضوع به مکانی که متغیر تعریف شده است بستگی دارد. Scope یک متغیر تعیین می کند که یک متغیر در کدام بخش از برنامه قابل دسترسی می باشد. در پایتون دو scope برای متغیرها وجود دارد: متغیرهای Global متغیرهای Local متغیرهای Local در برابر Global متغیرهایی که درون بدنه تابع تعریف می شوند دارای محدوده local و آن هایی که بیرون از تابع تعریف می شوند دارای محدوده global می باشند. این بدان معناست که متغیرهای local تنها درون تابعی که تعریف شده اند قابل دسترسی می باشند، در حالی که متغیرهای global در سراسر بدنه برنامه توسط تمامی توابع در دسترس می باشند. زمانیکه شما یک تابع را فراخوانی می کنید، متغیرهایی که درون آن تعریف شده اند به scope آورده می شوند: #!/usr/bin/python3 total = 0 # This is global variable. # Function definition is here def sum( arg1, arg2 ): # Add both the parameters and return them." total = arg1 arg2; # Here total is local variable. print ("Inside the function local total : ", total) return total # Now you can call sum function sum( 10, 20 ) print ("Outside the function global total : ", total ) خروجی: Inside the function local total : 30 Outside the function global total : 0
  13. فایل ها و دیتابیس ها ماندگاری داده ها اغلب برنامه هایی که تا به حال دیده ایم برنامه هایی گذرا هستند، به این معنی که این برنامه ها برای مدت زمان کوتاهی اجرا می شوند و برای خود خروجی تولید می کنند، ولی وقتی برنامه به پایان می رسد، تمامی داده ها از بین می روند. در صورتی که برنامه را دوباره اجرا کنید، برنامه خالی از هرگونه داده خواهد بود. ولی برنامه های دیگر به اصطلاح ماندگار هستند: این برنامه ها حداقل برخی از داده های خود را درون یک مخزنی (به عنوان مثال، هارد درایو) ذخیره می کنند؛ و در صورتی که برنامه خاموش یا دوباره راه اندازی شود، داده های خود را برای استفاده در اختیار خواهند داشت. از جمله برنامه های مانگار می تواند سیستم عامل ها را نام برد، که به خوبی تا هر زمان که کامپیوتر در روشن است اجرا می شوند، و وب سرور ها در تمام مدت در حال اجرا بوده و منتظر درخواست هایی که از شبکه می آید می باشند. یکی از ساده ترین روش ها برای برنامه ها جهت مدیریت داده هایشان خواندن و نوشتن درون فایل متنی می باشد. پیش تر با برنامه هایی که فایل های متنی را می خوانند آشنا شده ایم؛ در این فصل با نوشتن بر روی فایل ها آشنا خواهید شد. روش دیگر، ذخیره داده های یک برنامه درون یک دیتابیس یا پایگاه داده می باشد. در این فصل یک دیتابیس ساده و یک ماژول به نام pickle را برای ذخیره داده های یک برنامه نشان خواهیم داد. خواندن و نوشتن درون فایل در پایتون فایل متنی ترتیبی از کارکترهای ذخیره شده در یک هارد دائمی مانند هارد درایو، فلش یا CD-ROM می باشد. نحوه باز کردن و خواندن فایل را در فصل بازی با کلمات آشنا شدیم. برای نوشتن بر روی فایل، باید از 'w' به عنوان پارامتر دوم در تابع open استفاده کرد: >>> fout = open('output.txt', 'w') >>> print fout <open file 'output.txt', mode 'w' at 0xb7eb2410> در صورتی که فایل مورد نظر وجود داشته باشد، باز کردن آن در حالت نوشتن ('w')، داده های قبلی را به طور کامل پاک کرده و یک فایل جدید را ایجاد می کند، بنابراین در این مورد باید کمی مواظب باشید! در صورتیکه فایل وجود نداشته باشد نیز یک فایل جدید ساخته می شود. متد write داده ها را درون فایل قرار می دهد. >>> line1 = "This here's the wattle,\n" >>> fout.write(line1) شیء فایل جایی را که قرار دارد را درون خود نگه می دارد، بنابراین در صورتیکه متد write را دوباره فراخوانی کنید، داده مورد نظر دوباره به انتهای فایل اضافه می شود. >>> line2 = "the emblem of our land.\n" >>> fout.write(line2) هنگامی که نوشتن بر روی فایل خاتمه یافت، باید فایل را با استفاده از متد close ببندید >>> fout.close() عملگر فرمت (%) آرگومان write باید یک رشته باشد، بنابراین در صورتیکه بخواهیم مقادیر دیگری غیر ار رشته به متد write ارسال کنید، باید آن مقدار را به رشته تبدیل کنیم. ساده ترین راه استفاده از تابع str می باشد: >>> x = 52 >>> f.write(str(x)) روش دیگر برای تبدیل مقادیر دیگر به رشته، استفاده از عملگر فرمت (%) می باشد. در صورتیکه از این عملگر برای یک مقدار integer استفاده شود، کارکرد آن به شکل عملگر modulus (باقی مانده تقسیم) خواهد بود. ولی هنگامی که برای یک مقدار رشته از این عملگر استفاده شود به صورت عملگر فرمت رفتار خواهد کرد. اولی عملوند در این حالت فرمت رشته می باشد، که حاوی یک یا چندین ترتیب فرمت می باشد و تعیین می کند که عملوند دوم به چه صورت قالب بندی شود. برای مثال، '%d' بدین معنی است که عملوند دوم باید یک integer باشد (d مخفف decimal است): >>> camels = 42 >>> '%d' % camels '42' نتیجه رشته '42' است، که هیچ تداخلی با 42 که یک integer است ندارد. ترتیب فرمت می توانید در هر قسمتی از رشته قرار گیرد، بنابراین شما می توانید یک مقدار را درون یک جمله جای دهید: >>> camels = 42 >>> 'I have spotted %d camels.' % camels 'I have spotted 42 camels.' در صورتیکه بیشتر از یک فرمت درون رشته وجود داشته باشد، آرگومان دوم باید یک مقدار از نوع تاپل باشد. هر فرمت به ترتیب مطابق با یک المان از تاپل خواهد بود. در مثال زیر از '%d' برای فرمت یک integer، از '%g' برای فرمت یک عدد اعشاری (نپرس چرا)، و از '%s' برای فرمت یک رشته استفاده شده است: >>> 'In %d years I have spotted %g %s.' % (3, 0.1, 'camels') 'In 3 years I have spotted 0.1 camels.' تعداد المان های درون تاپل باید با تعداد فرمت های استفاده شده درون رشته مطابق باشد. همچنین، نوع المان ها نیز باید با فرمت ها یکی باشد: >>> '%d %d %d' % (1, 2) TypeError: not enough arguments for format string >>> '%d' % 'dollars' TypeError: illegal argument type for built-in operation در خط اول کد فوق، تعداد المان ها کافی نیستند، و در خط سوم نوع المان یک نوع اشتباه می باشد. عملگر فرمت بسیار قدرتمند می باشد، ولی استفاده از آن می تواند کمی مشکل باشد. برای اطلاعات بیشتر در مورد این عملگر می توانید به مستندات پایتون مراجعه کنید. نام فایل و مسیر فایل ها اصولا درون دایرکتوری ها (فولدر نیز نامیده می شود) قرار می گیرند. هر بنامه ای که در حال اجرا می باشد، دارای یک دایرکتوری جاری می باشد، که دایرکتوری پیشفرض برای اغلب عملیات ها می باشد. برای مثال، هنگامی که شما فایلی را برای خواندن باز می می کنید، پایتون درون دایرکتوری جاری به دنبال آن می گردد. ماژول os دارای توابعی برای کار با فایل ها و دایرکتوری ها می باشد (os مخفف "operating system" است). os.getcwd نام دایرکتوری جاری را بر می گرداند: >>> import os >>> cwd = os.getcwd() >>> print cwd /home/dinsdale اصطلاح cwd مخفف "current working directory" به معنی دایرکتوری جاری در حال کار می باشد. نتیجه مثال فوق /home/aminpy می باشد، که دایرکتوری خانگی کاربری با نام aminpy می باشد (در سیستم عامل لینوکس). شبه رشته (string like) فوق یعنی cwd یک فایل را که مسیر (path) نامیده می شود را شناسایی می کند. مسیر نسبی (relative path) از دایرکتوری جاری شروع می شود و مسیر کامل (absolute path) از بالاتری دایرکتوری سیستم فایل شروع می شود. مسیرهایی که تا کنون دیدیم یک نام ها فایل ساده بوده اند، بنابراین این مسیرها مسیرهای نسبی از دایرکتوری جاری بوده اند. برای یافتن یک مسیر کامل به یک فایل، می توانیم از os.path.abspath استفاده کنیم: >>> os.path.abspath('memo.txt') '/home/dinsdale/memo.txt' تابع os.path.exists وجود فایل یا دایرکتوری را بررسی می کند: >>> os.path.exists('memo.txt') True در صورتیکه فایل مورد نظر وجود داشته باشد، os.path.isdir بررسی می کند که آن دایرکتوری است یا خیر: >>> os.path.isdir('memo.txt') False >>> os.path.isdir('music') True به همین ترتیب، os.path.isfile نیز بررسی می کند که آیا آرگومان ارسالی به آن یک فایل است یا خیر. تابع os.listdir لیستی از فایل ها و دایرکتوری موجود در دایرکتوری داده شده را بر می گرداند: >>> os.listdir(cwd) ['music', 'photos', 'memo.txt'] برای شرح این توابع، مثال زیر درون یک دایرکتوری گشته، و اسامی تمامی فایل ها را چاپ کرده، و خودش را به صورت بازگشتی (recursively) درون تمام دایرکتوری ها فراخوانی می کند. def walk(dirname): for name in os.listdir(dirname): path = os.path.join(dirname, name) if os.path.isfile(path): print path else: walk(path) تابع os.path.join نام یک دایرکتوری و فایل را دریافت کرده و آن ها را در یک مسیر کامل شده به هم متصل می کند. کنترل خطا در فایل هنگام خواندن یا نوشتن درون فایل اشتباهات بسیاری می تواند رخ دهد. در صورتیکه سعی کنید فایلی را که وجود ندارد را باز کنید، خطای IOErro رخ خواهد داد: >>> fin = open('bad_file') IOError: [Errno 2] No such file or directory: 'bad_file' در صورتیکه حق دسترسی به فایل را نداشته باشید با خطای زیر مواجه خواهید شد: >>> fout = open('/etc/passwd', 'w') IOError: [Errno 13] Permission denied: '/etc/passwd' و در صورتیکه یک دایرکتوری را برای خواندن باز کنید، خطای زیر را خواهید دید: >>> fin = open('/home') IOError: [Errno 21] Is a directory برای جلوگیری از خطاهای فوق، می توان از توابعی مانند os.path.exists و os.path.isfile استفاده کرد، ولی این کار زمان زیادی را خواهد گرفت و کد تمام احتمالات را باید بررسی کنید (if “Errno 21” is any indication, there are at least 21 things that can go wrong). بهتر است زمانی که مشکل رخ داد با آن درگیر شویم، این دقیقا کاری است که عبارت try انجام می دهد. syntax آن شبیه به عبارت if است: try: fin = open('bad_file') for line in fin: print line fin.close() except: print 'Something went wrong.' پایتون با اجرای بلاک try آغاز می کند. در صورتیکه همه چیز بدون مشکل در بلاک try انجام شود، پردازش بلاک except نادیده گرفته خواهد شد. در صورتی که یک خطا رخ دهد، مفسر از بلاک try بیرون پریده و بلاک except را اجرا می کند. مدیریت خطا با یک جمله try را کنترل خطا می گویند. در مثال فوق، بلاک except یک پیام خطا چاپ می کند که کمک زیاد نمی کند. به طور کلی، کنترل یک خطا به شما شانس این را می دهد که مشکل را حل کرده، یا دوباره سعی کرده و یا حداقل برنامه را به آرامی خاتمه دهید. دیتابیس ها دیتابیس یک فایل است که برای ذخیره سازی داده سازمان دهی شده است. اغلب دیتابیس ها همانند دیکشنری ساخته شده اند، بدین معنی که کلیدها را به مقادیر مرتبط می کنند. بزرگترین فرق آن این است که دیتابیس بر روی دیسک (یا هاردهای دائمی دیگر) می باشد، بنابراین بعد از اتمام برنامه نیز باقی خواهد ماند. ماژول anydbm یک رابط برای ایجاد و به روز رسانی فایل های دیتابیس فراهم می کند. به عنوان مثال، ما یک دیتابیس که حاوی فایل های تصویری و عناوین آن می باشد را ایجاد خواهیم کرد: >>> import anydbm >>> db = anydbm.open('captions.db', 'c') حالت 'c' بدین معنی است که دیتابیس در صورتی که وجود نداشته باشد ایجاد شود. نتیجه یک شیء دیتابیس است که می تواند (برای اغلب عملیات ها) مانند یک دیکشنری استفاده شود. در صورتیکه یک مورد جدید ایجاد کنیم، anydbm فایل دیتابیس را به روز رسانی می کند. >>> db['cleese.png'] = 'Photo of John Cleese.' هنگامی که به یک از موارد دسترسی پیدا می کنیم، anydbm فایل را می خواند: >>> print db['cleese.png'] Photo of John Cleese. در صورتیکه انتساب دیگری را برای یک کلید موجود ایجاد کنیم، anydbm مقدار جدید را با مقدار قدیمی جایگزین می کند: >>> db['cleese.png'] = 'Photo of John Cleese doing a silly walk.' >>> print db['cleese.png'] Photo of John Cleese doing a silly walk. بسیاری از متدهای دیکشنری، مانند keys و items، با شیء های دیتابیس کار می کنند. بنابراین عملیات تکرار را با یک جمله for انجام می دهیم. for key in db: print key همانند فایل های دیگر، باید با استفاده از متد close شیء دیتابیس را مسدود کنیم: >>> db.close() Pickling یکی از محدودیت های anydbm این است که نوع کلید و مقدار استفاده شده در آن باید رشته باشد. در صورتیکه از انواع دیگر در آن استفاده کنید، با خطا مواجه خواهید شد. ماژول pickle در این مورد سودمند خواهد بود. این ماژول تقریبا تمامی نوع شیء ها را به رشته مناسب با آن برای ذخیره درون دیتابیس ترجمه کرده و رشته های ترجمه شده را به شیء های قبلی آن بر می گرداند. تابع pickle.dumps یک شیء را به عنوان پارامتر دریافت کرده و یک رشته متناظر با آن بر می گرداند (dumps کوتاه شده "dump string" می باشد): >>> import pickle >>> t = [1, 2, 3] >>> pickle.dumps(t) '(lp0\nI1\naI2\naI3\na.' فرمت رشته برگردانده شده واضح به نظر نخواهد رسید؛ این رشته جهت ساده شدن برای picke جهت تفسیر یه این شکل در آمده است. pickle.loads("loads string") شیء را بازسازی می کند: >>> t1 = [1, 2, 3] >>> s = pickle.dumps(t1) >>> t2 = pickle.loads(s) >>> print t2 [1, 2, 3] هرچند شیء جدید مقداری مشابه با شیء قدیمی دارد، ولی به طور کلی این دو شیء با یکدیگر یکی نخواهند بود: >>> t1 == t2 True >>> t1 is t2 False به عبارت دیگر، عمل pickling و سپس unpickling، تاثیری یکسان با کپی کردن شیء دارد. می توان از pickle برای ذخیره داده هایی به غیر از رشته در دیتابیس استفاده کرد. در حقیقت، این ترکیبی بسیار رایج است که درون ماژولی به نام shelve قرار گرفته است. Pipes اغلب سیستم عامل ها دارای یک رابط خط فرمان شناخته شده به عنوان shell می باشند. shell ها معمولا دارای دستوراتی برای هدایت فایل سیستم و اجرای برنامه ها هستند. برای مثال در یونیکس می توان دایرکتوری ها را با دستور cd تغییر داد، می توان با دستور ls محتویات یک دایرکتوری را نمایش داد، و (به عنوان مثال) با تایپ دستور firefox مرورگر وب را اجرا کرد. هر برنامه ای که را که از shell اجرا می کنید را، با استفاده از pipe می توان در پایتون نیز اجرا نمود. pipe یک شیء است که یک برنامه در حال اجرا را نشان می دهد. به عنوان مثال، دستور یونیکس ls -l معمولا محتویات دایرکتوری فعلی (در یک فرمت بلند) نمایش می دهد. می توان دستور ls را با استفاده از os.popen (بهتر است از subprocess به جای آن استفاده کنید، ولی برای سادگی و درک مطلب در اینجا ما از این ماژول استفاده کردیم.) درون پایتون اجرا نمود. >>> cmd = 'ls -l' >>> fp = os.popen(cmd) آرگومان ارسالی یک رشته حاوی دستور shell می باشد. مقدار برگشتی یک شیء است که درست مثل یک فایل باز شده رفتار می کند. می توان خروجی پردازش ls را خط به خط با readline بدست آورد و یا با read به کل خروجی دسترسی پیدا کرد: >>> res = fp.read() بعد از اتمام کار، مانند فایل شیء مورد نظر را close می کنیم: >>> stat = fp.close() >>> print stat None مقدار برگشتی آخرین وضعیت پردازش ls می باشد، None به معنای پایان یافتن عادی (بدون خطا) می باشد. برای مثال، اغلب سیستم های Unix دستوری با نام md5sum را برای خواندن محتویات یک فایل و محاسبه یک "checksum" ارائه می کنند. برای اطلاعات بیشتر در مورد MD5 می توانید به [Hidden Content] مراجعه کنند. این دستور یک روش موثر برای بررسی یکی بودن محتویات دو فایل ارائه می کند. The probability that different contents yield the same checksum is very small (that is, unlikely to happen before the universe collapses). می توان از pipe برای اجرای md5sum در پایتون و گرفتن نتیجه آن استفاده کرد: >>> filename = 'book.tex' >>> cmd = 'md5sum ' filename >>> fp = os.popen(cmd) >>> res = fp.read() >>> stat = fp.close() >>> print res 1e0033f0ed0656636de0d75144ba32e0 book.tex >>> print stat None ماژول نویسی هر فایلی که حاوی کد پایتون باشد می تواند به عنوان یک ماژول import شود. به عنوان مثال، فرض کنید فایلی به نام wc.py با محتویات زیر داریم: def linecount(filename): count = 0 for line in open(filename): count = 1 return count print linecount('wc.py') در صورتیکه برنامه فوق را اجرا کنیم، برنامه محتویات خود را خوانده و تعداد خطوط موجود در فایل را که عدد ۷ باشد را چاپ می کند. شما همچنین می توانید آن را import کنید: >>> import wc 7 حالا ما یک شیء ماژول به نام wc در اختیار داریم: >>> print wc <module 'wc' from 'wc.py'> این ماژول دارای تابعی به نام linecount می باشد: >>> wc.linecount('wc.py') 7 و همه این ها مراحل نوشتن یک ماژول در پایتون نشان می دهند. تنا مشکل موجود در مثال فوق این است که، زمانی که ما ماژول را import می کنیم، کد آزمایشی پایین ماژول اجرا می شود. به طور معمول زمانی که یک ماژول را import می کنیم، این کار توابع جدید را تعریف می کند، ولی آن ها را اجرا نمی کند. برنامه هایی که به صورت ماژول import می شوند، اغلب از کد زیر استفاده می کنند: if __name__ == '__main__': print linecount('wc.py') __name__ یک متغیر داخلی پایتون است که زمانی که برنامه شروع می شود مقدار دهی می گردد. در صورتیکه برنامه مانند یک script اجرا شود، __name__ دارای مقدار __main__ می باشد؛ در این مورد، کد آزمایشی اجرا می شود. در غیر اینصورت، در صورتیکه ماژول import شود، کد آزمایشی نادیده گرفته می شود.
  14. پایان نامه طراحی محله مسکونی براساس سبک زندگی ساکنان توسط مرضیه ریاضی و به راهنمایی دکتر مطلبی برای دریافت درجه کارشناسی ارشد طراحی شهری از دانشگاه هنر اسلامی تبریز در سال 1391 ارائه شد که فایل PDF اون رو از پیوست می تونید دانلود کنید. فهرست مطالب: فصل اول: کلیات پژوهش مقدمه اهمیت موضوع طرح مسئله طرح سوال های مطالعه علت انتخاب نمونه موردی سابقه موضوع و پیشینه تحقیق اهداف پژوهش راهبرد پژوهش فرایند طراحی فصل دوم : مروری بر متون نظری و عملی مرتبط با موضوع مقدمه تعریف و مفهوم شهر تعریف و مفهوم روستا تفاوتهای ساختاری بین شهر و روستا تعریف و مفهوم توسعه توسعه پایدار طراحی شهری در زمینه حفاظت تاریخی و طبیعی مفاهیم مشارکت نوشهرگرایی مفهوم روستا شهر مرمت شهری استخوان بندی شهر کیفیات کالبدی طراحی شهری ضوابط ومقررات هویت بخشی به سیما و کالبد شهرها و روستاهای کشور بررسی طرح های شهری خارجی و داخلی جمع بندی و ارائه چارچوب نظری طرح فصل سوم: بررسی نمونه های موردی مرتبط مقدمه روستا شهر کلوین گروو طراحی شهری در بم جمع بندی فصل چهارم: فرایند شناخت بستر طرح مقدمه معرفی نمونه موردی: زنوز اهداف کلان و چشم انداز اولیه شناخت بر اساس تئوری مدل مکان پایدار جمع بندی فصل پنجم: فرایند طراحی مقدمه تدقیق چشم انداز تبیین اهداف کلان، راهبردها و سیاست های اجرایی در خصوص شهر زنوز ارائه گزینه های پیشنهادی در مقیاس شهر ارائه طرح پیشنهادی نهایی مقایسه ساختارهای وضع موجود، طرح هادی و طرح پیشنهادی رساله طرح پیشنهادی ساماندهی و ساختار فضایی محله سیدلر طرح ساماندهی محور سیدلر راهنمای طراحی موثر در طراحی محور سیدلر نتیجه گیری نهایی پیوست 1 فهرست مراجع طراحی محله مسکونی براساس سبک زندگی ساکنان.pdf
×
×
  • جدید...