一、Python安裝
以python3.6為例,python2版本的安裝方式與python3類似
1.1 windows下安裝
1 1 .下載安裝包 2 https://www.python.org/downloads/ 3 2 .執(zhí)行可執(zhí)行程序,直接下一步即可: 4 默認(rèn)安裝路徑:C:\python36 5 3 .配置環(huán)境變量(如果在安裝時(shí)勾選配置環(huán)境變量,此步驟則不需要了) 6 【右鍵計(jì)算機(jī)】--》【屬性】--》【高級(jí)系統(tǒng)設(shè)置】--》【高級(jí)】--》【環(huán)境變量】--》【在第二個(gè)內(nèi)容框中找到變量名為Path的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 7 如:原來(lái)的值;C:\python36,切記前面有分號(hào)
1.2 windows下更新python
卸載重裝即可
1.3 linux下安裝python
1 linux中默認(rèn)自帶的python,以最新的ubuntu18.04的系統(tǒng)為例,默認(rèn)自帶的Python版本為python2.7 ,可以再次安裝python3的版本,通過(guò)命令: 2 # 安裝python3 3 sudo apt- get install python3 4 # 安裝pip3 5 sudo apt-get install python3-pip
?
二、初識(shí)python
2.1 第一個(gè)Python程序
? ?在linux下的/home/目錄下創(chuàng)建文件hello.py
# 打印hello world print ( " hello world " )
執(zhí)行文件:
python3 hello.py
輸出:hello world
上一步中執(zhí)行 python3 hello.py時(shí),明確的指出 hello.py 腳本由python3解釋器來(lái)執(zhí)行。
如果想要類似于執(zhí)行shell腳本一樣執(zhí)行python腳本,例: ./hello.py ,那么就需要在 hello.py 文件的頭部指定解釋器
1 # !/usr/bin/env python3 2 3 print ( " hello world " )
如此一來(lái),執(zhí)行./hello.py文件即可
ps:如果在執(zhí)行的時(shí)候報(bào)沒(méi)有權(quán)限的錯(cuò)誤,請(qǐng)記得給文件進(jìn)行賦權(quán),chmod 775 hello.py
程序除了可以寫(xiě)在文件中,還可以使用Python自帶的交互解釋器執(zhí)行:
1 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)] on win32 2 Type " help " , " copyright " , " credits " or " license " for more information. 3 >>> print ( " hello world " ) 4 hello world 5 >>>
2.2 Python的注釋
1 單行注釋:以 # 開(kāi)頭,# 右邊的所有東西都被當(dāng)做說(shuō)明文字,而不是真正要執(zhí)行的程序,只起到輔助說(shuō)明作用 2 3 # 這是一個(gè)單行注釋 4 5 為了保證代碼的可讀性, # 后面建議先添加一個(gè)空格,然后再編寫(xiě)相應(yīng)的說(shuō)明文字 6 7 8 # ############################## 9 多行注釋: 10 如果希望編寫(xiě)的 注釋信息很多,一行無(wú)法顯示,就可以使用多行注釋 11 要在 Python 程序中使用多行注釋,可以用 一對(duì) 連續(xù)的 三個(gè) 引號(hào)(單引號(hào)和雙引號(hào)都可以) 12 13 """ 14 這是一個(gè)多行注釋 15 """
什么時(shí)候需要使用注釋:
- 注釋不是越多越好,對(duì)于一目了然的代碼,可以不用添加注釋
- 對(duì)于復(fù)雜的操作,應(yīng)該在操作開(kāi)始前寫(xiě)上若干行注釋
- 對(duì)于不是一目了然的代碼,應(yīng)在其行尾添加注釋(為了提高可讀性,注釋?xiě)?yīng)該至少離開(kāi)代碼 2 個(gè)空格)
- 絕不要描述代碼,假設(shè)閱讀代碼的人比你更懂 Python,他只是不知道你的代碼要做什么
2.3 PEP8規(guī)范
- Python 官方提供有一系列 PEP(Python Enhancement Proposals) 文檔
- 其中第 8 篇文檔專門針對(duì) Python 的代碼格式 給出了建議,也就是俗稱的 PEP 8
- 文檔地址:https://www.python.org/dev/peps/pep-0008/
- 谷歌有對(duì)應(yīng)的中文文檔:http://zh-google-styleguide.readthedocs.io/en/latest/google-python-styleguide/python_style_rules/
三、編碼
python2中默認(rèn)編碼為ASCII,而python3中的默認(rèn)編碼為Unicode,如果使用的解釋器是python2的話,并且代碼中含有中文的話,那么需要在文件的開(kāi)頭加上:
1 在文件開(kāi)頭加入: # _*_coding:utf-8_*_ 2 或者: # coding=utf-8
python解釋器在加載.py文件時(shí),會(huì)對(duì)文件進(jìn)行編碼(python2則用ascii編碼,python3則用unicode編碼)
?
ASCII(American Standard Code for Information Interchange,美國(guó)標(biāo)準(zhǔn)信息交換代碼)是基于拉丁字母的一套電腦編碼系統(tǒng),主要用于顯示現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言,其最多只能用 8 位來(lái)表示(一個(gè)字節(jié)),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個(gè)符號(hào)。
顯然ASCII碼無(wú)法將世界上的各種文字和符號(hào)全部表示,所以,就需要新出一種可以代表所有字符和符號(hào)的編碼,即:Unicode
Unicode(統(tǒng)一碼、萬(wàn)國(guó)碼、單一碼)是一種在計(jì)算機(jī)上使用的字符編碼。Unicode 是為了解決傳統(tǒng)的字符編碼方案的局限而產(chǎn)生的,它為每種語(yǔ)言中的每個(gè)字符設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,規(guī)定雖有的字符和符號(hào)最少由 16 位來(lái)表示(2個(gè)字節(jié)),即:2 **16 = 65536,
注:此處說(shuō)的的是最少2個(gè)字節(jié),可能更多
UTF-8,是對(duì)Unicode編碼的壓縮和優(yōu)化,他不再使用最少使用2個(gè)字節(jié),而是將所有的字符和符號(hào)進(jìn)行分類:ascii碼中的內(nèi)容用1個(gè)字節(jié)保存、歐洲的字符用2個(gè)字節(jié)保存,東亞的字符用3個(gè)字節(jié)保存...
四、執(zhí)行腳本傳入?yún)?shù)
Python有大量的模塊,從而使得開(kāi)發(fā)Python程序非常簡(jiǎn)潔。類庫(kù)有包括三中:
- Python內(nèi)部提供的模塊
- 業(yè)內(nèi)開(kāi)源的模塊
- 程序員自己開(kāi)發(fā)的模塊
Python內(nèi)部提供一個(gè) sys 的模塊,其中的 sys.argv 用來(lái)捕獲執(zhí)行python腳本時(shí)傳入的參數(shù)
1 # !/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import sys 5 print sys.argv
五、變量
5.1 變量的定義
1 # !/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 name = " zhangsan "
上述代碼聲明了一個(gè)變量,變量名為: name,變量name的值為:"zhangsan"
變量的作用:昵稱,其代指內(nèi)存里某個(gè)地址中保存的內(nèi)容
5.2 變量的命名規(guī)則
- 標(biāo)示符可以由 字母、下劃線 和 數(shù)字 組成
- 不能以數(shù)字開(kāi)頭
- 不能與關(guān)鍵字重名
python的關(guān)鍵字有:['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']
ps:Python中的變量名是區(qū)分大小寫(xiě)的, and和And不是一個(gè)變量
5.3 變量的命名規(guī)范
- 每個(gè)單詞都使用小寫(xiě)字母
-
多個(gè)單詞之間使用
_下劃線,例如:
- first_name,last_name等
?
?
六、用戶的輸入
1 # !/usr/bin/env python 2 # -*-coding:utf-8-*- 3 4 """ 5 @author:fyh 6 @time:2019/6/6 7 """ 8 9 name = input( " 請(qǐng)輸入用戶的姓名: " ) 10 age = input( " 請(qǐng)輸入用戶的年齡: " ) 11 12 # 打印用戶的姓名和年齡 13 print (name) 14 print (age)
七、.pyc是啥
?7.1 Python是一門解釋型語(yǔ)言?
我初學(xué)Python時(shí),聽(tīng)到的關(guān)于Python的第一句話就是,Python是一門解釋型語(yǔ)言,我就這樣一直相信下去,直到發(fā)現(xiàn)了*.pyc文件的存在。如果是解釋型語(yǔ)言,那么生成的*.pyc文件是什么呢?c應(yīng)該是compiled的縮寫(xiě)才對(duì)啊!
為了防止其他學(xué)習(xí)Python的人也被這句話誤解,那么我們就在文中來(lái)澄清下這個(gè)問(wèn)題,并且把一些基礎(chǔ)概念給理清。
7.2 解釋型語(yǔ)言和編譯型語(yǔ)言
計(jì)算機(jī)是不能夠識(shí)別高級(jí)語(yǔ)言的,所以當(dāng)我們運(yùn)行一個(gè)高級(jí)語(yǔ)言程序的時(shí)候,就需要一個(gè)“翻譯機(jī)”來(lái)從事把高級(jí)語(yǔ)言轉(zhuǎn)變成計(jì)算機(jī)能讀懂的機(jī)器語(yǔ)言的過(guò)程。這個(gè)過(guò)程分成兩類,第一種是編譯,第二種是解釋。
編譯型語(yǔ)言在程序執(zhí)行之前,先會(huì)通過(guò)編譯器對(duì)程序執(zhí)行一個(gè)編譯的過(guò)程,把程序轉(zhuǎn)變成機(jī)器語(yǔ)言。運(yùn)行時(shí)就不需要翻譯,而直接執(zhí)行就可以了。最典型的例子就是C語(yǔ)言。
解釋型語(yǔ)言就沒(méi)有這個(gè)編譯的過(guò)程,而是在程序運(yùn)行的時(shí)候,通過(guò)解釋器對(duì)程序逐行作出解釋,然后直接運(yùn)行,最典型的例子是Ruby。
通過(guò)以上的例子,我們可以來(lái)總結(jié)一下解釋型語(yǔ)言和編譯型語(yǔ)言的優(yōu)缺點(diǎn),因?yàn)榫幾g型語(yǔ)言在程序運(yùn)行之前就已經(jīng)對(duì)程序做出了“翻譯”,所以在運(yùn)行時(shí)就少掉了“翻譯”的過(guò)程,所以效率比較高。但是我們也不能一概而論,一些解釋型語(yǔ)言也可以通過(guò)解釋器的優(yōu)化來(lái)在對(duì)程序做出翻譯時(shí)對(duì)整個(gè)程序做出優(yōu)化,從而在效率上超過(guò)編譯型語(yǔ)言。
此外,隨著Java等基于虛擬機(jī)的語(yǔ)言的興起,我們又不能把語(yǔ)言純粹地分成解釋型和編譯型這兩種。
用Java來(lái)舉例,Java首先是通過(guò)編譯器編譯成字節(jié)碼文件,然后在運(yùn)行時(shí)通過(guò)解釋器給解釋成機(jī)器文件。所以我們說(shuō)Java是一種先編譯后解釋的語(yǔ)言。
7.3 Python到底是什么
其實(shí)Python和Java/C#一樣,也是一門基于虛擬機(jī)的語(yǔ)言,我們先來(lái)從表面上簡(jiǎn)單地了解一下Python程序的運(yùn)行過(guò)程吧。
當(dāng)我們?cè)诿钚兄休斎雙ython hello.py時(shí),其實(shí)是激活了Python的“解釋器”,告訴“解釋器”:你要開(kāi)始工作了。可是在“解釋”之前,其實(shí)執(zhí)行的第一項(xiàng)工作和Java一樣,是編譯。
熟悉Java的同學(xué)可以想一下我們?cè)诿钚兄腥绾螆?zhí)行一個(gè)Java的程序:
javac hello.java
java hello
只是我們?cè)谟肊clipse之類的IDE時(shí),將這兩步給融合成了一步而已。其實(shí)Python也一樣,當(dāng)我們執(zhí)行python hello.py時(shí),他也一樣執(zhí)行了這么一個(gè)過(guò)程,所以我們應(yīng)該這樣來(lái)描述Python,Python是一門先編譯后解釋的語(yǔ)言。
7.4 簡(jiǎn)述Python的運(yùn)行過(guò)程
在說(shuō)這個(gè)問(wèn)題之前,我們先來(lái)說(shuō)兩個(gè)概念,PyCodeObject和pyc文件。
我們?cè)谟脖P上看到的pyc自然不必多說(shuō),而其實(shí)PyCodeObject則是Python編譯器真正編譯成的結(jié)果。我們先簡(jiǎn)單知道就可以了,繼續(xù)向下看。
當(dāng)python程序運(yùn)行時(shí),編譯的結(jié)果則是保存在位于內(nèi)存中的PyCodeObject中,當(dāng)Python程序運(yùn)行結(jié)束時(shí),Python解釋器則將PyCodeObject寫(xiě)回到pyc文件中。
當(dāng)python程序第二次運(yùn)行時(shí),首先程序會(huì)在硬盤中尋找pyc文件,如果找到,則直接載入,否則就重復(fù)上面的過(guò)程。
所以我們應(yīng)該這樣來(lái)定位PyCodeObject和pyc文件,我們說(shuō)pyc文件其實(shí)是PyCodeObject的一種持久化保存方式。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
