python--一、入門

python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。  
python在2017年統計的全部語言排名中處於第四名,穩步上升狀態。

 

python應用領域:
WEB開發(Django框架,異步高併發的Tornado框架,短小精悍的flask,bottle)
網絡編程(高併發的Twisted網絡框架, py3引入的asyncio使異步編程變容易)
爬蟲(Scrapy\Request\BeautifuSoap\urllib等模塊)
雲計算(openstack)
人工智能、科學運算( 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas,很是適合編寫 1 萬行以上的項目。)
自動化運維(jumpserver、CMDB)
金融分析(量化交易,金融分析)
python是一種什麼樣的語言:
  編程語言主要從如下幾個角度爲進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言。(此處僅介紹編譯型和解釋型)
    編譯型:把源碼文件的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機才能以本身認識的機器語言來執行。須要編譯器,相似翻譯軟件,調試麻煩,執行速度快。不依賴語言環境運行,跨平臺差,如C,
    解釋型:在執行程序時,才一條一條的解釋成機器語言給計算機來執行。須要解釋器,相似實時翻譯,調試方便,執行效率略低。跨平臺好,一份代碼,處處使用,如python,

編譯型vs解釋型

編譯型
優勢:編譯器通常會有預編譯的過程對代碼進行優化。由於編譯只作一次,運行時不須要編譯,因此編譯型語言的程序執行效率高。能夠脫離語言環境獨立運行。
缺點:編譯以後若是須要修改就須要整個模塊從新編譯。編譯的時候根據對應的運行環境生成機器碼,不一樣的操做系統之間移植就會有問題,須要根據運行的操做系統環境編譯不一樣的可執行文件。python

解釋型
優勢:有良好的平臺兼容性,在任何環境中均可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。程序員

缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。算法

當咱們在命令行中輸入python hello.py時,實際上是激活了Python的「解釋器」,告訴「解釋器」:你要開始工做了。但是在「解釋」以前,其實執行的第一項工做和Java同樣,是編譯。
 

Python的運行過程shell

在說這個問題以前,咱們先來講兩個概念,PyCodeObject和pyc文件。編程

咱們在硬盤上看到的pyc天然沒必要多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。咱們先簡單知道就能夠了,繼續向下看。flask

當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。網絡

當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,則直接載入,不然就重複上面的過程。多線程

因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說pyc文件實際上是PyCodeObject的一種持久化保存方式。併發

 
python編譯器的種類:
要運行代碼,就須要Python解釋器去執行 python代碼文件。
  CPython(官方默認的、C語言開發)、IPython(也是C寫的,交互性強)、PyPy(JIT技術,動態編譯,可提高執行速度)、Jython(在Java平臺,可直接譯成Java字節碼執行)、IronPython(在微軟.Net平臺,可直譯成 .NET執行)
 

Python的優缺點

主要優勢:框架

  1. Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
  2. 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
  3. 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
  4. 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工 做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
  5. 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
  6. 可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。

主要缺點:

  1. 速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比Python快了10倍,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
  2. 代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
  3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。

以己之長,較他之短。顯然是毫無心義的。沒有最好的,只有最適合的。

 
 python3較之python2的變更
交互採用input()
輸出變爲函數類型:print()
字符集改成unicode
某些庫更名了:
 

Old Name

New Name

_winreg

winreg

ConfigParser

configparser

copy_reg

copyreg

Queue

queue

SocketServer

socketserver

markupbase

_markupbase

repr

reprlib

test.test_support

test.support

安裝注意事項:

  安裝完後必定要作環境變量,多版本時複製一個 python.exe 改成 python3.exe 來區分。
 
入門第一代碼:輸出「hello world」,(直接在解釋器執行或寫入文件指定解釋器運行文件均可以)
  print(「hello world」)
#注:在Linux中想要像執行shell腳本同樣執行python程序,需在python文件第一行聲明運行的解釋器 #!/usr/bin/env python。並給文件添加可執行權限。
         代碼中出現中文要在開頭處添加 #_*_coding:utf-8_*_
 
變量
 
變量:可變的量值,在主代碼前定義。
  假設在寫程序時有多處須要定義同一個值,若直接寫值,之後在須要修改的時候須要挨個修改,效率低。若使用變量,在須要一樣值的多處都使用變量,若須要修改值時直接改變量值便可。
定義變量: name = value
變量名的定義範圍:只能是字母、數字、下劃線的任意組合,第一個字符不能是數字,不能是python內置的關鍵字
#注:python內置的關鍵字['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']
命名誤區:不要用中文拼音、不要過長、意義要明確。
定義變量要注意的: ID、value、type
#注:==比對的是value(值),is只比較的是內存地址(ID)
   解釋器中變量的value相同,但value中出現特殊字符(如空格,逗號等) 時會形成id不一樣。
 
常量 
常量:python語法中沒有定義,但程序員約定俗成用變量名所有大寫表明常量。
交互式獲取值:input(‘instruction’)
  不論用戶輸入何種類型值都會存成字符串,獲取到的值必定是str類型
python2中的input()用戶輸入什麼類型值,就存成什麼類型。raw_input()等價python3 input(),
 
註釋
爲何要註釋:由於遺忘是一個必然的過程,爲了增長代碼的可讀性,也方便別人理解。
分單行和多行註釋, 單行註釋用#,多行註釋能夠用三對雙引號""" """
只須要在本身以爲重要或很差理解的部分加註釋便可,用中英文均可,必定不能是拼音
在Linux中運行的python,必須定義的文件頭
#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
數據與數據類型
數據:即變量的值。變量的是用來反映/保持狀態以及狀態變化的,毫無疑問針對不一樣的狀態就應該用不一樣類型的數據去標識
數字類型: 定義時不用引號直接輸入,或用函數把數據轉爲數字類型
  int整形--int()   float浮點數--float()   complex複數型   long長整型(python2纔有)
字符串類型:定義時需把數據用引號引發來,或用函數把數據轉爲字符串類型
  str()
#注意1:字符串相加的效率不高 字符串1+字符串3,並不會在字符串1的基礎上加字符串2,而是申請一個全新的內存空間存入字符串1和字符串3,至關字符串1與字符串3的空間被複制了一次,
#注意2:只能字符串加字符串,不能字符串加其餘類型
 
列表:數據定義在 [] 內,或者使用list()函數把數據轉換爲列表。存在多個元素時用逗號分隔開,每一個元素能夠是任意類型,其中元素是可變的
能夠相互嵌套使用,取值時也能夠多層取值

經常使用操做:

  • 索引
  • 切片
  • 追加
  • 刪除
  • 長度
  • 切片
  • 循環
  • 包含
 
元組:數據定義在 () 內,或者使用tuple()將列表轉換爲元組。若只有一個元素時要在後面加逗號,存在多個元素時用逗號隔開。每一個元素能夠是任意類型,定義完成後元素的指向是永遠不變的(例如,元組中包含list,但list的值能夠改變)
能夠相互嵌套使用,取值時也能夠多層取值
 
字典:數據定義在 {} 內,或者使用dict()函數把數據轉換爲字典。用key=value形式表示一個元素,硬性規定了映射關係。用逗號(,)隔開。value能夠是任意類型。
可多層嵌套使用,取值時亦可多層取值。

經常使用操做:

  • 索引
  • 新增
  • 刪除
  • 鍵、值、鍵值對
  • 循環
  • 長度
 
集合
 
布爾:邏輯判斷,返回TRUE或FALSE。 通常在作比較時使用。亦可判斷數據是否爲空或0(0,'',[] 等值均爲FALSE,數據非空非0即爲TRUE。)
 
#注1.可變類型:在id不變的狀況下,value能夠變,則稱爲可變類型,如列表,字典
#注2. 不可變類型:value一旦改變,id也改變,則稱爲不可變類型(id變,意味着建立了新的內存空間) 
 
格式化輸出: 把用戶輸入或上層返回的值,穿插到固定格式的字符串中。
使用佔位符,如:%s 字符串佔位、%d 數字佔位
例:
name=input('your name: ')
print('My name is %s',%name)
 

基本運算符

假設a=10 , b=20

計算

 

比較

 

賦值

 

邏輯

 

 

優先級

 

 

條件判斷語句: if爲語句開始,elif爲屢次不一樣條件判斷,else爲不知足上面的條件則執行。可多層嵌套

if condition :

  exec

elif condition :

  exec

else :

  exec

迭代式循環語句:for。每循環一次從數據中按順序取出一個值,直到數據中全部值均被使用。可多層嵌套、

for i in range(0,9) :

  exec

條件循環語句:while。 條件爲真則循環,條件爲假則中止循環。若條件定義爲True則成死循環。可多層嵌套。

while condition :

  exec

 while的條件可使用布爾值變量判斷循環是否成立。在多個while嵌套須要一次退出時,能夠經過修改該變量的布爾值一次控制多個循環退出。

while ...else 語句,while 後面的else 做用是當while 循環正常執行完,中間沒有被break 停止的話,就會執行else後面的語句

break與continue (僅適用於循環語句)

break 執行後會跳出此循環。外層循環不會受影響。

continue  執行後跳過此循環內後面的代碼,直接開始下一次循環。

 

練手代碼:

'1 使用while循環輸出1 2 3 4 5 6     8 9 10'
number=1
while number <= 10:
if number == 7 :
number+=1
continue
print(number)
number+=1

while number <= 10 :
if number != 7 :
print(number)
number+=1
'2. 求1-100的全部數的和'
number2 = 0
total2 = 0
while number2 <= 100 :
total += number2
number2+=1
print(total)
裝X方法:print(sum(range(101)))
'3. 輸出 1-100 內的全部奇數'
number3 = 0
total3 = 0
while number3 <= 100 :
if number3 % 2 == 1:
total3 += number3
number3+=1
裝X方法:print(sum(range(1,101,2)))
'4. 輸出 1-100 內的全部偶數'
number4 = 0
total4 = 0
while number4 <= 100 :
if number4 % 2 == 0:
total4 += number4
number4+=1
print(total4)
裝X方法:print(sum(range(0,101,2)))
'5. 求1-2+3-4+5 ... 99的全部數的和'
number5 = 0
odd = 0
even = 0
while number5 <= 99 :
if number5 % 2 == 1:
odd += number5
else :
even += number5
number5+=1
result = odd - even
print(result)
裝X方法:print(sum(range(1,100,2))-sum(range(0,100,2)))
'6. 用戶登錄(三次機會重試)'
user = 'jinyudong'
password = '666666'
count = 0
while count < 3 :
username = input('user->:')
passwd = input('passwd->:')
if username == user and password == passwd :
print('login OK !')
break
count+=1
print('login count is %d' %count)
else:
print('login error!')
'7:猜數字遊戲'
import random
secret = random.randint(1,99)
# print(secret)
guess = 0
count = 0
print("AHOY! i'm the Dread Pirate Roberts, and I have a secret!")
print("It is a number from 1 to 99. I'll give you 6 tries.")
while count < 6:
guess = int(input( "What's yer guess?"))
if guess < secret:
print("Too low,ye scurvy dog!")
elif guess > secret:
print("Too high,landlubber!")
else :
print("Avast! Ye got it! Found my secret,ye did!")
break
count += 1
else:
print("No more guesses! Better luck next time,matey!")
print("The secret number was",secret)
'8:猜年齡遊戲升級'import randomsecret = random.randint(1,99)guess = 0count = 0print("AHOY! i'm the Dread Pirate Roberts, and I have a secret!")print("It is a number from 1 to 99. I'll give you 6 tries.")while  count < 6:    guess = int(input( "What's yer guess?"))    if guess < secret:        print("Too low,ye scurvy dog!")    elif guess > secret:        print("Too high,landlubber!")    else :        print("Avast! Ye got it! Found my secret,ye did!")        break    if count == 5 :        print("Max error number,continue place 'y',exit place 'n'")        YorN = input('-->:')        if YorN == 'y':            count=0            continue        else:            exit()    count += 1else:        print("No more guesses! Better luck next time,matey!")        print("The secret number was",secret)
相關文章
相關標籤/搜索