標籤:instagram get inpu 官方庫 聲明變數 下載 ida 搜尋引擎 打破
編譯器是把來源程式的每一條語句都編譯成機器語言,並儲存成二進位檔案,這樣運行時電腦可以直接以機器語言來運行此程式,速度很快;
而解譯器則是只在執行程式時,才一條一條的解釋成機器語言給電腦來執行,所以運行速度是不如編譯後的程式啟動並執行快的.
這是因為電腦不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進位的形式)
編譯型和解釋型又有什麼優缺點呢?
編譯型
優點:編譯器一般會有先行編譯的過程對代碼進行最佳化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程式執行效率高。可以脫離語言環境獨立運行。
缺點:編譯之後如果需要修改就需要整個模組重新編譯。編譯的時候根據對應的運行環境產生機器碼,不同的作業系統之間移植就會有問題,需要根據啟動並執行作業系統環境編譯不同的可執行檔。
解釋型
優點:有良好的平台相容性,在任何環境中都可以運行,前提是安裝瞭解釋器(虛擬機器)。靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。
缺點:每次啟動並執行時候都要解釋一遍,效能上不如編譯型語言。
最後,讓我們一起來看看Python
的優缺點:
先看優點
- Python的定位是“優雅”、“明確”、“簡單”,所以Python程式看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。
- 開發效率非常高,Python有非常強大的第三方庫,基本上你想通過電腦實現任何功能,Python官方庫裡都有相應的模組進行支援,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發週期,避免重複造輪子。
- 進階語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體一類的底層細節
- 可移植性————由於它的開源本質,Python已經被移植在許多平台上(經過改動使它能夠工 作在不同平台上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平台上運行
- 可擴充性————如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。
- 可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式使用者提供指令碼功能。
再看缺點:
- 速度慢,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的運行速度慢在大多數情況下使用者是無法直接感知到的,必須藉助測試載入器才能體現出來,比如你用C運一個程式花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是非常誇張了,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程式速度的要求,除非你要寫對速度要求極高的搜尋引擎等,這種情況下,當然還是建議你用C去實現的。
- 代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求原始碼必須是加密的,那你一開始就不應該用Python來去實現。
- 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全域解譯器鎖(Global Interpreter Lock),是電腦程式設計語言解譯器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是作業系統的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由作業系統調度線程的執行。一個python解譯器進程內有一條主線程,以及多條使用者程式的執行線程。即使在多核CPU平台上,由於GIL的存在,所以禁止多線程的並存執行。關於這個問題的折衷解決方案,我們在以後線程和進程章節裡再進行詳細探討。
其實,對於任何一門語言都不是十全十美的,隨意,對與各種語言的優缺點,我們要充分發揮各自的長處,而不是一味的進行比較,進行抵觸!!!
Python發展史
- 1989年,為了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
- 1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠調用C語言的庫檔案。從一出生,Python已經具有了:類,函數,異常處理,包含表和詞典在內的核心資料類型,以及模組為基礎的拓展系統。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
- Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言架構的基礎
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB架構Django 誕生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
- Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
說到這裡,還是沒有一點關於python的代碼,別急,先做一些瞭解嘛。對於知識,多多益善的嘛~~~~
好了,廢話不多說了,來讓我們進行一下,最最莊嚴的“儀式”----“Hello world!”吧
對於Python2.7和python3.x存在的不同,可以在學習的過程中一點點去認識,也可以去看官方的介紹!
我在這裡,用得到的是3.x版本。編輯器用的是Pycharm
print("Hello world")
其實,在2.7版本中,print是不需要進行加括弧的,但是在3的版本中,不加可是會報錯的~~
聲明變數
#-*-coding:utf-8-*-"""在3.x版本中,預設utf-8""" name = "Xiaoming"
上述代碼聲明了一個變數,變數名為: name,變數name的值為:"Xiaoming"
變數定義的規則:
- 變數名只能是 字母、數字或底線的任意組合
- 變數名的第一個字元不能是數字
- 以下關鍵字不能聲明為變數名
[‘and‘, ‘as‘, ‘assert‘, ‘break‘, ‘class‘, ‘continue‘, ‘def‘, ‘del‘, ‘elif‘, ‘else‘, ‘except‘, ‘exec‘, ‘finally‘, ‘for‘, ‘from‘, ‘global‘, ‘if‘, ‘import‘, ‘in‘, ‘is‘, ‘lambda‘, ‘not‘, ‘or‘, ‘pass‘, ‘print‘, ‘raise‘, ‘return‘, ‘try‘, ‘while‘, ‘with‘, ‘yield‘]
變數的賦值
#-*- coding:utf-8 -*-name = "Mr丶zhang"name2 = nameprint("My name is",name)name = "Maomao"print(name,name2)
其列印結果可以看出來,name的賦值給name2,name重新定義,並不會影響name2的值,name2 的值指向的是name指向的值,而不是name!!
實現使用者的輸入:
#__Author__:Mr_zhangName = input("請輸入Name:")Age = input("請輸入Age:")Tob = input("請輸入Tob:")Salary = input("請輸入Salary:")info = """----------info of %s----------Name:%sAge:%sTob:%sSalary:%s"""%(Name,Name,Age,Tob,Salary)info2 = """----------info of {_Name}----------Name:{_Name}Age:{_Age}Tob:{_Tob}Salary:{_Salary}""".format(_name=Name, _Name = Name, _Age = Age, _Tob=Tob, _Salary = Salary)info3 = """----------info of {0}----------Name:{0}Age:{1}Tob:{2}Salary:{3}""".format(Name, Name, Age,Tob,Salary)print(info)
其實在這裡,既認識了input,有學到了格式化輸出的幾種方式!但是所表達的結果都是一樣的~
接下來,讓我們寫個好玩的,讓我們再來學習一點新的知識點:
#__Author__:Mr_zhangimport getpass_username = "admin"_password = "admin"name = input("Please enter the name:")# password = getpass.getpass("Please enter the password:") #getpass模組,就是進行使用者在輸入password的時候,進行明文加密,不顯示明文password = input("Please enter the password:")if _username == name and _password==password: print("Welcome user{name} login...".format(name=name))else: print("Invalid username or password")print(name,password)
其實看到這裡,我們不僅進行了一次有趣的代碼編寫,還學到了If條件陳述式的文法,其實很容看得出來,在這個程式中,就是一個很簡單那的登陸程式!!當然了,在現實中還有還多中情況進行判斷,那到時候再說咯~~~~現在最主要的就是能夠認識,瞭解
在看了if條件陳述式以後,我們再來認識一下另一個迴圈:while
#__Author__:Mr_zhanglaozhang = 60i = 0while i<3: age = int(input(‘The age of:‘)) if age == laozhang: print("Yes,You got it.") break elif age>laozhang: print("No,the age is high") elif age <laozhang: print("No,the age is low") i+=1else: print("You have try too many time....bye!!!")
其實,這算是一個小遊戲啦,就是猜年齡!在程式中,如果你連續猜錯3次,就會退出程式!那麼讓我們來換一種寫法,順便認識一下另一個迴圈:For
#__Author__:Mr_zhanglaozhang = 60for i in range(3): age = int(input(‘The age of:‘)) if age == laozhang: print("Yes,You got it.") break elif age > laozhang: print("No,the age is high") elif age < laozhang: print("No,the age is low") i += 1else: print("You have try too many time....bye!!!")
在這裡要是看不明白for迴圈案例,我們寫個簡單明了的:
#-*- coding:utf-8 -*-#__Author__:Mr_zhangfor i in range(10): print(i)for i in range(0,10,2): print(i)
不難看出。for迴圈的中,range(開始值,結束值,步長)
其實,這種方法和上面的方法,就寫法上面不同,運行起來是一樣的,看到這裡,不知道有沒有朋友發現,我在寫while和for的時候,都用到了else,在這裡不用奇怪,是可以的,不單單只有if和else才配的哦~~~
還是這個遊戲,讓我們變一下規則,就是在連續猜錯3次以後,不讓他直接退出來,而是進行一次詢問,若你回答Y,則表示繼續猜測,若是N,就徹底結束,推出迴圈:
#__Author__:Mr_zhanglaozhang = 60i = 0while i<3: age = int(input(‘The age of:‘)) if age == laozhang: print("Yes,You got it.") break elif age>laozhang: print("No,the age is high") elif age <laozhang: print("No,the age is low") i+=1 if i == 3: res = input("Do you want you keep guessing..? (Y/N)",)#斷行符號繼續 if res != "N": i = 0
其實,到這裡我需要補充一個知識點,那就是break
Python break語句,就像在C語言中,打破了最小封閉for或while迴圈。
break語句用來終止迴圈語句,即迴圈條件沒有False條件或者序列還沒被完全遞迴完,也會停止執行迴圈語句。
break語句用在while和for迴圈中。
如果您使用嵌套迴圈,break語句將停止執行最深層的迴圈,並開始執行下一行代碼。
其實,有的人會不明白,不明白不要緊,我們來寫個案例來看一下,這句話是什麼意思~
#-*- coding:utf-8 -*-#__Author__:Mr_zhangfor i in range(0,10,2): print ("*"*10,i) for j in range(10): if j>5: break else: print(j)
在兩次嵌套的迴圈中,內部迴圈使用了一個Break,其結果只是影響到了內部的迴圈,對於外部的迴圈並沒有影響,所以誰,break跳出的是當前的迴圈體,那麼,說到這裡,有些編程知識的人就會想到contine,那麼這個到底怎麼執行的呢,其實在分步執行程式的時候最明了,continue是跳出本次迴圈,開始下次迴圈 ,影響的只是continue後面的操作,各位可以自己寫個程式運行一下看看!!
這次學習就先到這裡吧,天道酬勤,有付出,必定會有彙報!python的自學之旅。不會停歇!各位朋友要是有什麼好的資源,希望可以共用,一同學習,一起探討,一起成長!!python先手,在這裡獻醜了
Python的自學之路:Python基礎(一)