python第一章環境搭建和基本語法個人總結
1、Pyenv安裝操作系統準備準備Linux最小系統即可。
2、pyenv安裝方式
git 安裝
1)、安裝git
# yum install git -y
2)、安裝Python編譯依賴
# yum -y install gcc make patch gdbm-devel openssl-devel sqlite-devel
readline-devel zlib-devel bzip2-devel
3)、創建用戶python
# useradd python
4)、使用python用戶登錄后安裝Pyenv
$ curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenvinstaller | bash
##使用python用戶,原因是因為root賬號權限較大,為免造成混亂等,使用python賬號。
- 、在python用戶的/.bash_profile中
export PATH=”/home/python/.pyenv/bin:$PATH”
eval “$(pyenv init -)”
eval “$(pyenv virtualenv-init -)”
$ source ~/.bash_profile
- Pyenv的使用python 版本及path路徑$ python –version$ python -V$ echo $PATH可以看到當前系統Python
4、在線安裝指定版本 $ pyenv install 3.5.3 $ pyenv versions 這樣的安裝可能較慢,為了
提速,可是選用cache方法。
使用緩存方式安裝 在~/.pyenv目錄下,新建cache目錄,放入下載好的待安裝版本的文件。 不確定要哪一個文件,把下載的3個文件都放進去。 $ pyenv install 3.5.3 -v
5、pyenv的python版本控制
version 顯示當前的python版本 versions 顯示所有可用的python版本,和當前版本
global 全局設置 $ pyenv global 3.5.3 可以看到所有受pyenv控制的窗口中都是3.5.3的
python版本了。 這里用global是作用于非root用戶python用戶上,如果是root用戶安裝,請不要使
用global,否則影響太大。比如,這里使用的CentOS6.5就是Python2.6,使用了global就成了3.x,
會帶來很不好的影響。 $ pyenv global system
shell 會話設置 影響只作用于當前會話 $ pyenv shell 3.5.3
local 本地設置 使用pyenv local設置從當前工作目錄開始向下遞歸都繼承這個設置。 $ pyenv
local 3.5.3
Virtualenv 虛擬環境設置
為什么要使用虛擬環境? 因為剛才使用的Python環境都是一個公共的空間,如果多個項目使用不同
Python版本開發,或者使用不同的Python版本部署運行,或者使用同樣的版本開發的但不同項目使
用了不同版本的庫,等等這些問題都會帶來沖突。最好的解決辦法就是每一個項目獨立運行自己的
“獨立小環境”中。
使用插件,在plugins/pyenv-virtualenv中 $ pyenv virtualenv 3.5.3 mag353 使用python
3.5.3版本創建出一個獨立的虛擬空間。
$ pyenv versions
* system (set by /home/python/.pyenv/version)
3.5.3
3.5.3/envs/mag353
mag353
可以在版本列表中存在,就和3.5.3是一樣的,就是一個版本了。 真實目錄在~/.pyenv/versions
/下,以后只要使用這個虛擬版本,包就會按照到這些對應的目錄下去,而不是使用3.5.3。
[python@node ~]$ mkdir -p magedu/projects/web
[python@node ~]$ cd magedu/projects/web/
[python@node web]$ pyenv local mag353
(mag353) [python@node web]$ cd ..
[python@node projects]$ cd web/
(mag353) [python@node web]$
- pip 通用配置
Linux系統 $ mkdir ~/.pip 配置文件在~/.pip/pip.conf
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
trusted-host=mirrors.aliyun.com
在不同的虛擬環境中,安裝redis包,使用pip list看看效果。 $ pip -V
pip install pkgname 命令,是以后經常要使用的安裝python包的命令
windows系統 windows下pip的配置文件在~/pip/pip.ini,內容同上
安裝ipython
ipython 是增強的交互式Python命令行工具
$ pip install ipython
$ ipython
Jupyter 是基于WEB的交互式筆記本,其中可以非常方便的使用Python。 安裝Jupyter,也會安裝
ipython的
$ pip install jupyter
$ jupyter notebook help
$ jupyter notebook –ip=0.0.0.0 –no-browser
$ ss -tanl
7、導出包
虛擬環境的好處就在于和其他項目運行環境隔離。每一個獨立的環境都可以使用pip命令導出已經安
裝的包,在另一個環境中安裝這些包。
(mag353) [python@node web]$ pip freeze > requirement
(mag353) [python@node web]$ mkdir ~/magedu/projects/pro1
(mag353) [python@node web]$ cd ~/magedu/projects/pro1
[python@node pro1]$ pyenv install –list
[python@node pro1]$ pyenv install 3.6.4
[python@node pro1]$ pyenv virtualenv 3.6.4 mag364
[python@node pro1]$ pyenv local mag364
(mag364) [python@node pro1]$ mv ../web/requirement ./
(mag364) [python@node pro1]$ pip install -r requirement
- windows安裝方式
python的windows安裝下載 Windows x86-64 executable installer ,按照提示安裝即可。 注意,勾選增加PATH路
9、安裝成功之后(cmd命令)
pyenv離線安裝
首先從github上克隆項目
$ git clone https://github.com/pyenv/pyenv.git ~/.pyenv
$ git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins
/pyenv-virtualenv
$ git clone https://github.com/pyenv/pyenv-update.git ~/.pyenv/plugins/pyenvupdate
$ git clone https://github.com/pyenv/pyenv-which-ext.git ~/.pyenv/plugins
/pyenv-which-ext
可以把克隆的目錄打包,方便以后離線使用。
$ vim ~/.bash_profile
export PATH=”/home/python/.pyenv/bin:$PATH”
eval “$(pyenv init -)”
eval “$(pyenv virtualenv-init -)”
$ source ~/.bash_profile
- 安裝jupyter ?(pip install jupyter) ??安裝完成后,設置登陸密碼,jupyter notebook password設置密碼。。jupyter ?notebook ?–ip=0.0.0.0:8888(可以自己更改)。然后就可以登錄使用。
- 安裝
- 計算機基礎知識。
- 程序;一組能讓計算機識別和執行的命令;
- 電子計算機:能夠執行程序的機器。
- 現代計算機:
艾倫.麥席森.圖靈,英國數學家、邏輯學家,被稱為計算機科學之父,人工智能之父。
馮諾依曼。他提出了二進制作為數字計算機的數制基礎,計算機能夠按照程序順序執行,計算機應該有五大部件。
馮諾依曼體系
- cpu。由運算器和控制器組成;
- 運算器是主管算數據的,四則運算等。算數運算和邏輯運算。
- 控制器:是計算機控制的,在bas上面跑,執行指令。
- 存儲器。由于記憶程序和數據,例如內存。數據掉電易失的,好處是速度快。
- 輸入設備。將數據或者程序輸入到計算機中,例如鍵盤等。I
- 輸出設備:例如打印機等。展示給用戶。o
- 磁盤,cpu不是直接和磁盤打交道。
- 所有數據—–磁盤—內存 —-cpu。
- cpu算好的數據—–內存—磁盤。
- cpu中還有寄存器和多級緩存cache。
- 寄存器是放在cpu當中的,必須把數據裝到寄存器中。把操作數據放到寄存器,計算器去處理。
- 緩存cache,緩存比寄存器大的多。
- 緩存、寄存、內存的掉電易失的、離cpu較近的越容易分級的。一級比一級的處理速度慢。
- 優化的是cpu的。
- 編程語言:計算機語言;人與機器之間交互的語言。
- 機器語言:就是指令,一定位數組成二進制的0和1的序列,成為機器指令,機器指令的集合就是機器語言。與自然語言差異太大,難學,難懂,難寫,難記,難查錯。
- 匯編語言。用一些助劑符號代替機器指令,成為匯編語言。ADD A,B指的是將寄存器A得數與寄存器B的數相加得到的結果放到寄存器A中。。匯編語言寫好的程序需要匯編程序轉換成機器指令。 ???匯編語言只是稍微好記了一些,可以認為就是機器指令對應的助記符。只是符號本身接近自然語言
- 語言分類
低級語言
面向機器的語言,包括機器語言、匯編語言
不同的機器不能通用,不同的機器需要不同的機器指令或者匯編程序
高級語言
接近自然語言和數學語言的計算機語言
高級語言首先要書寫源程序,通過編譯程序把源程序轉換成機器指令的程序
1954年正式發布的Fortran語言是最早的高級語言,本意是公式翻譯
人們只需要關心怎么書寫源程序,針對不同機器的編譯的事交給編譯器關心處理
- 語言越高級,越接近人類的自然語言和數學語言
語言越低級,越能讓機器理解
高級語言和低級語言之間需要一個轉換的工具:編譯器、
解釋器
C、C++等語言的源代碼需要本地編譯
Java、Python、C#的源代碼需要被解釋器編譯成中間代碼(Bytecode),在虛擬機上運行
編譯語言,把源代碼轉換成目標機器的CPU指令,提前聲明變量。
解釋語言,解釋后轉換成字節碼,運行在虛擬機上,解釋器執行中間代碼。無須提前聲明變量,可以直接拿來使用。Python是動態強類型語言。
- 高級語言的發展。
- 非結構化語言。
編號或者標簽。GOTO,子程序可以有多個入口和出口。
有分支和循環。
- 結構化語言。任何基本機構只允許是唯一的入口和出口。
順序、分支、循環、GOTO。
- 面向對象語言:更加接近人類認知世界的方式。萬事萬物抽象成對象,對象間關系抽象成類和繼承。。。。封裝、繼承、多態。
- 函數式語言:古老的編程范式,應用在數學計算,并行處理的場景,引入到了很多現代高級語言中。。。。。。函數是“一等公民”
,高階函數。
- 程序Program
1)程序:算法+數據結構=程序。
數據一切程序的核心。
程序結構是數據在計算機中的類型和組織方式。
算法是處理數據的方式,算法有優劣之分。
- 寫程序難點:理不清數據。
搞不清處理方法。
無法把數據設計轉換成數據結構,無法把處理方法轉換成算法。
無法用設計范式來進行程序設計。
世間萬物皆有bug,但不會debug(找到問題所在)。
- Python解釋器
- 官方cpython
C語言開發的,最廣泛的python解釋器。
- Ipython
一個交互式、功能增強的Cpython。上課常用的。
- Pypy
Python語言寫成的python解釋器,jit技術,動態編譯python代碼。JIT實時編譯,動態編譯。直接編譯成本地代碼(向c語言或者c++)。動態調整,動態優化,最比較牛的技術。
- Jython
Python的源代碼編譯成JAVA的字節碼,跑在JVM上面。
5)IronPYthon
與Jython類似,運行在。Net的平臺上的解釋器,Python代碼被編譯成。Net的字節碼。
- Python基礎語法
1)注釋:#標準的文本。
2)數字:整數,不區分long和int。
進制0xa、0o10、0b10.
Bool,2個值True、Talse。
浮點數:
1.2、3.1415、-0.12,1.46e9等價于1.46*10(9次冪)不能表達所有的小數。
復數:1+2j
3)字符串。
使用‘”單雙引號引用的字符的序列。
‘’‘和“”“單雙單引號,可以跨行、可以在其中自由的使用單雙引號。
- 基礎語法
- 轉義序列(字符)
\\ ??\t ??\r ??\n ?\’???\”
- 縮進
未使用c語言的花括號,而是采用縮進的方式表示層次關系。
約定使用4個空格縮進。
- 續行
在行尾使用 \
- 基礎語法
標示符:1、一個名字,用來指代一個值。
2、只能用字母和下劃線和數字。
3、只能以字母或下劃線開頭,開頭的第一個不能是數字。
4、不能是python的關鍵字,例如def、class就不能作為標示符。
5、Python是大小寫敏感的。
約定:
不允許使用中文。不允許使用歧義單詞,例如class。。在python中不要隨便使用下劃線開頭的表示符。
- 基礎語法:
- 常量;一旦賦值以后不能改變值的標示符。。。Python中無法定義常量。
- 字面常量:一個單獨的量,例如12、’’abc’’、
- 變量:賦值后,可以改變值的標識符。
- python的語言類型。
1)python是動態語言、強類型語言。
- 靜態編譯語言:Java。C。。C++、實現聲明變量類型,類型不能再改變。
編譯時檢查。
- 動態編譯語言:不用事先聲明類型。隨時可以賦值為其他類型。。。編程時不知道是什么類型,很難推斷。
- 強類型語言。不同類型之間操作,必須事先強制類型轉換為同一類型。Print(‘a’+1)
- 弱類型,不同類型之間可以操作,自動隱士轉換。
- 運算符Operater
1)算數運算符;
+ – * / % **
自然除/結果是浮點數,整除//。
- 位運算符。
& ?| ?~ ??^ ?<< ?>>(位移,左右。)
常用方式 ??乘以2的倍數,,32//4相當于>>2
(27)原碼、反碼、補碼,負數表示法
1)原碼
5 => 0b101,1 => 0b1 ,-1 => -0b1, bin(-1)
2)反碼
正數的反碼與原碼相同;負數的反碼符號位不變其余按位取反
補碼
正數的補碼與原碼相同;負數的補碼符號位不變其余按位取反后+1
負數表示法
數字電路的CPU中的運算器實現了加法器,但是沒有減法器,減法是轉換成加法
負數在計算機中使用補碼存儲,-1的補碼為1111 1111
- 運算符
1)比較運算符
== ???!= ??< ??> ???>= ???<=
返回一個bool值。
1<’1’????1==’1’
鏈式比較操作符;
4>3>2 ?????4>munumber >=1
- 邏輯操作符
與或非 and ?or ??not
短路運算符。And第一個表達式為Flase,后面的沒必要參與計算,結果為Flase
Or如果第一個表達誰為True,后面沒必要參與運算。這個表達式為True。
- 運算符的優先級
- 算數運算符》位運算符》身份運算符》成員運算符》邏輯運算符。
- 記不住,用括號。
- 長表達式,多用括號,易懂易讀。
比較大小必須是相同的數據類型。
不同類型可做等于不能,但是不能比較大小。
- 表達式Expression。
- 由數字、符號、括號、變量等的組合。
算數表達式
邏輯表達式
賦值表達式。
在python中,賦值即定義,如果一個變量已經定義,賦值相當于重新定義。
- 內存管理
1)變量無須事先聲明,也不需要指定類型。(動態語言的特性)
2)編程中一般無須關心變量的存亡,也不用關心內存的管理。
3)python使用引用計數記錄所有對象的引用數。
當對象引用數變為0,他就可以被當為垃圾回收GC
計數增加:賦值給其它變量就增加引用計數,例如;
計數減少:函數運行結束時,局部變量就會被自動銷毀,對象引用計數減少。
變量被賦值給其它對象。
有關性能的時候,就需要考慮變量的引用問題,但是該釋放內存,還是盡量不釋放內存,看需求3)回收策略,定時回收,內存規整,是有策略的。
4)分袋 ,分類存放:永久的,臨時的,只用一次的。(引用計數)
數據挪移過程中,不允許操作。垃圾清理過程中。
5)一般不手動進行垃圾回收(GC)。
6)具體看情況,清理GC。
7)內存不是取之不盡的資源。
(32)程序控制
順序:按照先后順序一條條執行。
分支:根據不同的情況判斷,條件滿足執行某條件下定的語句。
循環:條件滿足就反復執行,不滿足就不執行或不再執行。
- 單分支結構
If語句: ?if condition: ??代碼塊。。Bool值,類型。
代碼塊:類似于if語句的冒號后面的就是一個語句塊。
在if、for、def、class等。
- 真值表
False等價布爾值,相當于bool(value)
空集合
空字符串
空字典
空列表
空元祖
None對象
0
- 多分支結構:……….elif………….else。
- 分支嵌套:嵌套結構,可以是分支、循環的嵌套。
可以相互嵌套多層。
- 循環 while語句。
語法;while condition:
Block:
- for循環。
For element in iteratable:(可迭代的)
Block。
Range函數。步長由負到正。
- 循環continue語句。
中斷當前循環的當次執行,繼續下一次循環。
- 循環break語句。
終止當前循環。
(41)循環continue / break總結。
continue和break是循環的控制語句,只影響當前循環,包括while、for循環
?如果循環嵌套, continue和break也只影響語句所在的那一層循環
continue和break 不是跳出語句塊,所以 if cond: break 不是跳出if,而是終止if外的break所在的循環
(42)循環else語句
while condition:
Block
else:
Block
For element in iteratable:
block
else:
Block
如果循環正常的執行結束,就執行else子句。如果使用break終止,就不會執行else語句。
- 三元表達式。當輸出項小于一行的,建議使用。
a=int(input(‘input first number’))
b=int(input(‘input second number’))
print(b,a) if a>b else print(a,b)
(45)拼字符串利用str()
(46)print的用法Sep=’’????end=’’????名字一致。
(47)斐波那契數列的定義。
斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞歸的方法定義:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,為此,美國數學會從1963年起出版了以《斐波納契數列季刊》為名的一份數學雜志,用于專門刊載這方面的研究成果。
- 時間模塊,
import datetime。
Start=Datetime.datetime now() ???
Delta[0]=(datetime.datetiame.now()-start).total_seconds()
Print(delta,sep=”\t”)
Timedelta 時間增量。
(49)練習題:
1)#判斷有幾位數
a=int(input(‘please input a number’))
if a<9:
print(1)
elif a<99:
print(2)
elif a<999:
print(3)
elif a<9999:
print(4)
elif a<99999:
print(5)
2)#計算10以內的偶數
for i in range(10):
if i%2:
continue
print(i)
3)#判斷有幾位數并依次打印一個的個數
a=int(input(‘please input a number’))
print(a)
if a>999:
if a>9999:
num=5
else:
num=4
else:
if a>99:
num=3
elif a>9:
num=2
else:
num=1
print(num)
n=a
for i in range(num):
n=a//10
print(a-n*10)
a=n
4)#打印一個邊長為n的正方形
a=int(input(‘please input a number’))
print(‘*’*a)
for i in range(a-2):
print(‘*’+ ‘ ‘*(a-2)+ ‘*’)
print(‘*’*a)
5)#求100內所有奇數的和(2500)
sum=0
for i in range(1,100,2):
sum+=i
print(sum)
6)判斷成績
score=int(input(‘please input you score’))
if score>=80:
if score>=90:
print(‘A’)
else:
print(‘B’)
else:
if score>=70:
print(‘C’)
elif score>=60:
print(‘D’)
else:
print(‘E’)
7)#求1到5階乘之和
sum=1
for i in range(1,6):
sum=sum*(i+1)
print(sum)
#求1到5階乘之和
sum=0
i=1
for i in range(1,6):
sum=sum+(i*(i+1))
print(sum)
8)#打印100以內的斐波那契
a=0
b=1
while True:
c=a+b
if c>100:break
a=b
b=c
print(c)
9)#給一個數,判斷它是否是素數(質數)
a=int(input(‘please input a number’))
for i in range(2,a):
if a%i==0:
print(‘No’)
break
else:
print(‘Yes’)
10)#打印九九乘法表
for i in range(1,10):
for j in range(1,i+1):
print(j,’*’,i,’=’,i*j ,’\t ‘,end=” “)
print()
11)#打印右側菱形
for i in range(-3,4):
print(‘ ‘*abs(i),’*’*(7-2*abs(i)),’ ‘*abs(i))
12)#打印右側菱形
for i in range(-3,4):
if i<0:
n=2*-(i)+1
print(‘ ‘*(i+3),’*’*n,’ ‘*(i+3))
elif a>=0:
n=2*i+1
print(‘ ‘*(3-i),’*’*n,’ ‘*(3-i))
13)#打印閃電。
for i in range(-3,4):
if i<0:
print(‘ ‘*(-i) ,’*’* (4+i))
elif i>0:
print(‘ ‘*2,’*’*(4-i))
else:
print(‘*’*7)
14)#打印100以內的斐波那契
a=0
b=1
while True:
c=a+b
if c>100:break
a=b
b=c
print(c)
15)#打印101項斐波那契
a=1
b=1
count=2
while True:
c=a+b
a=b
b=c
count+=1
print(‘{},{}’.format(count,c))
if count==101:
break
16)#求十萬以內的素數
for a in range(3,100001,2):
for i in range(3,int(a**0.5)+1,2):
if a%i==0:
break
else:
print(a)
17)#輸入圓的半徑,求面積和周長
r=int(input(‘please input r’))
print(‘s=’+str(3.14*r*r))
print(‘n=’+str(2*3.14*r))
18)#輸入兩個數,比較大小,并按照升序排序。
a=int(input(‘please input fist’))
b=int(input(‘please input second’))
print(b,a) if a>b else print(a,b)
19)#輸入若干個數,輸出最大數
temp=0
while True:
a=int(input(‘please input number’))
if a>temp:
temp=a
print(temp)
else:
print(‘please input true number’)
20)#輸入若干個數,輸入后輸出算數平均值
sum=0
count=0
while True:
a=int(input(‘please input number’))
sum+=a
count+=1
print(sum/count)
21)#解決猴子吃桃的問題
sum=1
for i in range(9):
sum=2*(sum+1)
print(sum)
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/92878