python擅長的領域:
web開發:
Django\pyramid\Tornado\Bottle\Flask\WebPy
網絡編程:
Twisted\Requests\Scrapy\Paramiko
科學運算:
SciPy\Pandas\lpython
GUI圖形開發:
wxPython\PyQT\Kivy
運維自動化:
Openstack\SaltStack\Ansible\騰訊藍鯨
運維必需要會開發麼?運維開發作什麼?
一、幫助公司開發各類自動化工具,定製開發各類開源軟件
二、幫助評估和優化業務技術架構
三、開發公司的內部辦公系統、CRM、網站等
四、作個全棧工程師,全棧就是指什麼都能作的樣子html
python發展史:java
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, 2015python
python主要應用領域:
雲計算:雲計算最火的語言,典型應用OpenStack
WEB開發:衆多優秀的WEB框架,Django
科學運算、人工智能:典型NumPy,CciPy,Matplotlib,Enthought librys,pandas
系統運維:運維人員必備語言
金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的不少,並且重要性逐年提升。緣由:做爲動態語言的python,語言架構清洗簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛,生產效率遠遠高於C,C++,java,尤爲擅長策略回測。
圖形GUI:PyQT,WxPython,Tklnterweb
使用公司:
google,CIA,NASA
語言分類:
編譯型:C/C++,PASCAL/Object,Pascal(Delphi),VB
解釋型:Java,java script,VBScript,perl,python算法
動態語言:動態類型語言是指在運行期間纔去作數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,改語言會在你第一次賦值給變量時,在內部將數據類型記錄下來,Python和Ruby就是一種典型的動態類型語言,其餘的各類腳本語言如VBScript也多少屬於動態類型語言。
靜態語言:靜態類型語言與動態類型語言恰好相反,它的數據類型是在編譯期間檢查的,也就是說寫程序時要聲明全部變量的數據類型,C/C++是靜態類型語言的典型表明,其餘的靜態類型語言還有C#,JAVA等shell
強類型定義語言和弱類型定義語言
強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據微型,若是不通過強制轉換,那麼它就是永遠是這個數據類型了,舉個例子:若是你定義了一個整型變量A,那麼程序根本不可能將A看成字符串類型處理。強類型定義語言是類型安全的語言。
弱類型定義語言:數據類型能夠被忽略的語言。它與強類型定義語言相反,一個變量能夠賦不一樣數據類型的值
例如:Python是動態語言,是強類型定義語言;VBScript是動態語言,是弱類型定義語言;JAVA是靜態語言,是強類型定義語言。編程
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 InterpreterLock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。
Python解釋器:
CPython
當咱們從Python官方網站下載並安裝好Python2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。
IPython
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>做爲提示符,而IPython用In [序號]:做爲提示符。
PyPy
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。
Jython
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。
IronPython
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。
小結
Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。
Python 2 or 3?
In summary : Python 2.x is legacy, Python 3.x is the present and future of the language
2.x已是過去式,3x纔是將來
Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of
2.7到2020年結束支持
extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is under active development and has already seen over five years of stable releases, including version 3.3 in 2012,
3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only
available by default in Python 3.x.
Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.
python3能夠支持中文,2裏是不支持的
Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x).
print和exec須要寫括號
py2與3的詳細區別
PRINT IS A FUNCTION
The statement has been replaced with a print() function, with keyword arguments to replace most of the special syntax of the old statement (PEP 3105). Examples:
此文記錄於:https://www.cnblogs.com/alex3714/articles/5465198.html
若是你要把寫好的程序變成可執行程序就要聲明他的解釋器:
#!/usr/bin/env python #從環境變量查找解釋器,建議以此方式聲明
#!/usr/bin/python
#!/bin/bash
等
腳本內容:
print ("hello world")
保存文件爲.py結尾的文件
變量\字符編碼
PyCharm工具
建立project
在項目下建立一個目錄day1,表示學習第一條寫的代碼
在PyCharm工具的view選項欄下拉菜單選擇Toolbar,會顯示工具欄
選擇齒輪和板子的設定選項-->editor-->File and code Templates中填寫每次建立python腳本固定的內容,寫好後應用,每次編寫腳本時會顯示出模板內容
模板定義內容:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
在腳本中寫入
print ("hello world")
在空白處選擇右鍵中的Run 'var' 便可運行結果
寫好的內容可直接保存
變量:
儲存代碼中要用到的一段結果輸出,就是變量
定義變量:
python:
name = "Donray" # 聲明變量
shell:
name="Donray" # shell中不能有空格
C++:
string name = "Donray";
調用變量:使用,號區分變量值
print ("My name is ",name)
在後面再次爲name = "Alex" 賦值,則後端顯示調用則爲Alex
變量定義的規則:
變量名只能是字母、數字或下劃線的任意組合,中橫線表明減號所以不能定義爲變量
變量名的第一個字符不能是數字
一下關鍵字不能聲明爲變量名
and as assert break class continue def del elif else except exec finally for form global if import in is lambda not or pass print raise return try while with yield
變量的賦值:
name = "Donray"
name2 = name
print (name,name2)
name = "jack"
print("What is the value of name2 now?")
變量分兩種:
變量:可變的量值
常量:不變的量值 C++中可用const
默認python是不支持常量的,但能夠寫爲下面的方式
python表示常量:
PIE = # 變量名要大寫
字符編碼:
python解釋器加載.py文件中的代碼時,會對內容進行編碼(默認:ascill)
ASCII美國標準信息交換代碼是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘休語言,其最多隻能用8位來表示(一個字節),即2**8=256-1,因此,ASCII碼最多隻能表示255個符號。
二進制數字:0和1的表達
128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1 全滿表示255
表示153則要去掉一些1
1 0 0 1 1 0 0 1 表示153
想表達153 則153-128=25,後面的數加起來能表示出25便可,哪一個位超出則爲0
每進一位則爲後面位數加在一塊兒的總和+1
字符編碼的區別和介紹:
二進制與字符之間就要用字符編碼來轉換,就是ASCII碼
8 byte=1 bit
簡體中文編碼:GB2312
1980年GB2312收錄了7445個字符,包括6763個漢字和682個符號。漢字區內碼範圍字節從B0-F7,低字節A1-FE,佔用的碼位72*94=6768.其中5個空位是D7FA-D7FE。
因爲支持的漢字太少,在1995年的漢字擴展規範GBK1.0收錄了21886個符號,它分爲漢字區和高子節區。漢字包括21003個字符。2000年GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族漢字。如今的PC平臺必須支持GB18030,對嵌入式產品暫不做要求。因此手機、MP3通常只支持GB2312.
從ASCII、GB23十二、GBK到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中老是相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文能夠統一地處理。
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此就須要新出一種能夠表明全部字符的編碼,即:Unicode(統一碼、萬國碼、單一碼)2**16=65536
字符編碼發展史:
ASCII 255 1bytes
--> 1980 gb2312 7xxx
--> 1995 GBK1.0 2w+
--> 2000 GB18030 27xxx
--> unicode 2bytes
--> utf-8 en:1bytes,zh:3bytes
所以要告訴python解釋器,用什麼編碼來執行源代碼:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
name = "你好,世界"
print (name)
在python3版本以後支持了中文字符編碼,寫了上面的腳本在pycharm中settings-->project-->project interpreter中更改一下python版本,執行結果便會報錯,ASCII中未定義字符集必須添加#-*- coding:utf-8 -*- 來定義字符集
但在python3中不用加#-*- coding:utf-8 -*-此行,就能夠顯示中文結果
註釋:
單行註釋行首加#
單行引用:使用雙引號或單引號都可
msg = "Donray"
多行註釋在多行前一行和後一行添加三個單引號或雙引號
例如:將中間的變量以及print結果都註釋掉
'''
name = "你好,世界"
print (name)
'''
三個單引號也可表示爲打印多行
msg = '''
name = "你好,世界"
print (name)
'''
print (msg)
輸入結果爲:
name = "你好,世界"
print (name)
用戶輸入:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
username = input ("username:")
password = input ("password:")
print (username,password)
使用input進行用戶交互
字符串拼接:
第一種方式:此方式會開闢不少塊內存空間效率較爲低下,不建議使用
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
name = input ("name:")
age = input ("age:")
job = input ("job:")
salary = input ("salary:")
info = '''
------------ info of ''' + name + '''-----------
Name: ''' + age + '''
Age: ''' + job + '''
Job: ''' + salary
#Salary:
#'''
print (info)
輸出:
C:\ProgramData\Anaconda3\python.exe C:/Users/Administrator/PycharmProjects/untitled/day1/interaction.py
name:donray #手動輸入
age:23
job:it
salary:20000
------------ info of donray-----------
Name: 23
Age: it
Job: 20000
Process finished with exit code 0
另外一種引用方法:%s表示str %d表示強制整數 %f表示
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
name = input ("name:")
age = int(input ("age:")) # int表示integer整型,強制轉換類型
job = input ("job:")
salary = input ("salary:")
info = '''
------------ info of %s-----------
Name: %s
Age: %d
Job: %s
Salary:%s
'''%(name,name,age,job,salary)
print (info)
輸出:
C:\ProgramData\Anaconda3\python.exe C:/Users/Administrator/PycharmProjects/untitled/day1/interaction.py
name:donray
age:23
job:it
salary:20000
------------ info of donray-----------
Name: donray
Age: 23
Job: it
Salary:20000
Process finished with exit code 0
此處%d輸入整數22卻提示錯誤,在輸入下面寫入
print(type(age))
輸出結果爲<class 'str'> #表示python中默認輸入的均爲字符串
須要強行轉換
age = int(input ("age:")) # int表示integer整型,強制轉換類型
此時再輸入報錯就沒有了
轉回字符串
print (type(age)) , (type(str(age)))
還有一種引用方法:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
name = input ("name:")
age = input ("age:")
job = input ("job:")
salary = input ("salary:")
info2 = '''
------------ info of {_name}-----------
Name: {_name}
Age: {_age}
Job: {_job}
Salary:{_salary}
''' .format(_name=name,
_age=age,
_job=job,
_salary=salary)
print (info2)
輸出:
C:\ProgramData\Anaconda3\python.exe C:/Users/Administrator/PycharmProjects/untitled/day1/interaction.py
name:donray
age:23
job:it
salary:20000
------------ info of donray-----------
Name: donray
Age: 23
Job: it
Salary:20000
Process finished with exit code 0
最後一種寫法:
info3 = '''
------------ info of {0}-----------
Name: {0}
Age: {1}
Job: {2}
Salary:{3}
''' .format(name,age,job,salary)
print (info3)
密文輸入密碼:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
import getpass
username = input ("username:")
password = getpass.getpass ("password:")
print (username,password)
getpass在pycharm中不會調用只能在python客戶端中執行
if else流程判斷:輸入正確密碼輸出登陸信息,輸入錯誤則提示非法用戶登陸
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
#import getpass
_username = 'Donray'
_password = '123'
username = input ("username:")
password = input ("password:")
if _username == username and _password == password:
print("Welcome user {name} login..." .format(name=username))
else:
print ("Invalid username or password!")
由於python有強制縮進所以避免告終束符段落,不必跟shell同樣寫fi,done之類的結束語句
猜年齡,guess.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
age_of_oldboy = 56
guess_age = int(input("guess gae:"))
if guess_age == age_of_oldboy :
print("yes,you got it.")
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")
while循環,腳本不退出猜對再退出,運行至1000次時終止循環
不斷累加
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
count = 0
while True:
print("count:",count)
count = count +1 #count +=1
if count == 1000:
break
guess.py - while版本
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
age_of_oldboy = 56
while True:
guess_age = int(input("guess gae:"))
if guess_age == age_of_oldboy :
print("yes,you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")
加計數器:輸入三次對錯都要退出
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
age_of_oldboy = 56
count = 0
while True:
if count ==3:
break
guess_age = int(input("guess gae:"))
if guess_age == age_of_oldboy :
print("yes,you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")
count +=1
優化版:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
age_of_oldboy = 56
count = 0
while count <3:
guess_age = int(input("guess gae:"))
if guess_age == age_of_oldboy :
print("yes,you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")
count +=1
if count ==3: #或者else
print ("you have tried too many times...fuck off")
while與for循環
for i in fange(10): # i爲臨時變量,range(10)爲循環10次,0-9次
print("loop",i) #
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
age_of_oldboy = 56
count = 0
for i in range(3):
guess_age = int(input("guess gae:"))
if guess_age == age_of_oldboy :
print("yes,you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")
else:
print ("you have tried too many times...fuck off")
打印0-9順序完成
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
for i in range(10):
print ("loop",i)
只打印偶數
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
for i in range(0,10,2):
print ("loop",i)
任性玩:countine是跳出本次循環進入下一個循環,break是結束本次循環
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Donray
age_of_oldboy = 56
count = 0
while count <3:
guess_age = int(input("guess gae:"))
if guess_age == age_of_oldboy :
print("yes,you got it.")
break
elif guess_age > age_of_oldboy:
print("think smaller...")
else:
print("think bigger!")
count +=1
if count == 3:
countine_confirm = input("do you want to keep guessing...?")
if countine_confirm != 'n':
count = 0
else:
print ("you have tried too many times...fuck off")
循環套循環
for i in range(10):
print('-------------',i)
for j in range(10):
print(j)
做業一:每週一篇博客,博客園
做業二:編寫登陸接口,一、輸入用戶名密碼 二、認證成功後顯示歡迎信息 三、輸錯三次後鎖定
做業三:多級菜單,一、三級菜單 二、可依次選擇進入各子菜單 三、所需新知識點,列表、字典
做業每一個程序建立readme文件:包含blog addr和program summary,再加上一份流程圖
pycharm編碼格式調整
settings中搜索coding 在Editor --> File Encodings下,默認是GBK須要所有改成utf-8,不然pycharm下提交的代碼會有亂碼
本課記錄地址:https://www.cnblogs.com/alex3714/articles/5465198.html