廖雪峰老師Python教程(第一天)


廖雪峰老師Python教程(第一天)

筆記是參照廖雪峰老師的Python教程來學習的,內容大多都是從官網摘取,具體細節是百度搜索來的

1.Python簡介

1.1python

Python:是一種相當高級的計算機程序設計語言,編寫少量代碼就能完成工作,但代碼少的代價是運行速度慢

常見編程語言:非常難學的C語言,非常流行的Java語言,適合初學者的Basic語言,適合網頁編程的JavaScript語言等等。

編程語言:都是為了讓計算機干活,而計算機干活的CPU只認識機器指令,所以,盡管不同的編程語言差異極大,最后都得“翻譯”成CPU可以執行的機器指令。

操作系統只能用C語言寫,寫手機應用,只能用Swift/Objective-C(針對iPhone)和Java(針對Android);寫3D游戲,最好用C或C++。

努力,變成優秀的軟件架構師

問題一:關於Python分號“;”是否添加問題


Python是著名的“龜叔”Guido van Rossum(是荷蘭人)在1989年聖誕節期間,為了打發無聊的聖誕節而編寫的一個編程語言。

全世界差不多有600多種編程語言,但流行的編程語言也就那么20來種。如果你聽說過TIOBE排行榜,你就能知道編程語言的大致流行程度。

推薦學學:JavaScript,TypeScript,Python,匯編和C語言了解下

C語言是可以用來編寫操作系統的貼近硬件的語言,所以,C語言適合開發那些追求運行速度、充分發揮硬件性能的程序(C語言是除了匯編語言最貼近硬件交互的一種編程語言,所以運行速度非常快,比如單片機,嵌入式開發都是C語言編寫)。而Python是用來編寫應用程序的高級編程語言。

Python之所以開發簡單,除了語言設計非常簡潔,最大的優點便是提供一個非常完善的基礎代碼庫,讓你能直接調用,比如,針對電子郵件協議的SMTP庫,針對桌面環境的GUI庫,在這些已有的代碼庫的基礎上開發是非常方便的。

Python就為我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱作“內置電池(batteries included)”,同時還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。

Python是非常適合初學者入門的一種編程語言,因為淺顯易懂。很多美國高校的CS課程也把Python作為入門級的語言。

Python:定位是“優雅”、“明確”、“簡單”,適用於開發網絡應用,包括網站、后台服務等等;其次是許多日常需要的小工具,包括系統管理員需要的腳本任務等等;另外就是把其他語言開發的程序再包裝起來,方便使用。

缺點:任何編程語言都是有缺點的,

  • 第一個缺點就是運行速度慢,和C程序相比非常慢,因為Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,所以非常快。
  • 第二個缺點就是代碼不能加密。如果要發布你的Python程序,實際上就是發布源代碼,這一點跟C語言不同,C語言不用發布源代碼,只需要把編譯后的機器碼(也就是你在Windows上常見的xxx.exe文件)發布出去。要從機器碼反推出C代碼是不可能的,所以,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把源碼發布出去。

安裝python

Python是跨平台的,它可以運行在Windows、Mac和各種Linux/Unix系統上。在Windows上寫Python程序,放到Linux上也是能夠運行的(這便是解釋器的作用了)。

安裝python其實就是安裝一個解釋器,用來對.py程序進行‘解釋’,還有一個命令行交互環境,還有一個簡單的集成開發環境。

目前python主流的兩個版本是:3.X和2.7,舊的項目是2.7寫的,需要維護,但3.X版本是未來趨勢。這兩個版本是嚴格不兼容的。

在Mac上安裝Python

Mac,系統是OS X>=10.9,那么系統自帶的Python版本是2.7。

方法一:從Python官網下載Python 3.8的安裝程序,下載后雙擊運行並安裝;

方法二:如果安裝了Homebrew,直接通過命令brew install python3安裝即可。

在Windows上安裝Python(推薦!!)

根據你的Windows版本(64位還是32位)從Python的官方網站下載Python 3.8對應的64位安裝程序或32位安裝程序,然后,運行下載的exe安裝包:

特別要注意勾上Add Python 3.8 to PATH,然后點“Install Now”即可完成安裝。

如果沒有勾選 Add Python 3.8 to PATH,可以在安裝后打開電腦的系統環境變量,將python.exe所在路徑以及scripts文件夾添加到環境變量。

運行python

打開cmd命令窗口,輸入python,如果打印出Python 3.8.x表示安裝以及配置成功。

提示符>>>就表示我們已經在Python交互式環境中了,可以輸入任何Python代碼,回車后會立刻得到執行結果。現在,輸入exit()並回車,就可以退出Python交互式環境(直接關掉命令行窗口也可以)。

切記切記!!在Python中,所有的命令都是用英文書寫,包括所有的括號,單引號,雙引號,三引號,冒號等等,使用中文一定會報錯(在python中不要在語句結束后加分號,python不像其他編程語言需要加分號表示語句結束,而是使用換行表示)

win10安裝python3.7.7版本 , cmd 之后,需要在命令行輸入 py 會進入python 如果直接在命令行輸入python ,則會打開微軟商店 去下載python

Python解釋器(僅供了解)

當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執行.py文件。

由於整個Python語言從規范到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。

CPython(推薦)(默認)

當我們從Python官方網站下載並安裝好Python 3.x后,我們就直接獲得了一個官方版本的解釋器: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,而是通過網絡調用來交互,確保各程序之間的獨立性。

2.python中的基礎知識總結

3.python中的函數

3.1函數相関概念

  • 面向過程編程:當需要求三個圓的面積時,可以根據公式進行計算,但是如果計算圓比較多時就會有很多重復的代碼。
r1 = 12.34
r2 = 9.08
r3 = 73.1
s1 = 3.14 * r1 * r1
s2 = 3.14 * r2 * r2
s3 = 3.14 * r3 * r3
  • 面向函數編程:我們就不再每次寫s=3.14* x * x,而是寫成更有意義的函數調用s = area_of_circle(x),而函數area_of_circle本身只需要寫一次,就可以多次調用。

基本上所有的高級語言都支持函數,這也是從面向過程編程到面向函數編程過渡的思想。(最后還有更加方便的面向對象編程)

Python不但能非常靈活地定義函數,而且本身內置了很多有用的函數,可以直接調用。

抽象是數學中非常常見的概念,計算數列的和,比如:1 + 2 + 3 + ... + 100,寫起來十分不方便,於是數學家發明了求和符號∑,可以把1 + 2 + 3 + ... + 100函數就是最基本的一種代碼抽象的方式。

3.2函數的基本使用

3.3函數的參數

3.3.1參數定義規則

定義函數的時候,我們把參數的名字位置確定下來,函數的接口定義就完成了。對於函數的調用者來說,只需要知道如何傳遞正確的參數,以及函數將返回什么樣的值就夠了,函數內部的復雜邏輯被封裝起來,調用者無需了解。

Python的函數定義非常簡單,但靈活度卻非常大。除了正常定義的必選參數外,還可以使用默認參數、可變參數和關鍵字參數,使得函數定義出來的接口,不但能處理復雜的參數,還可以簡化調用者的代碼。

位置參數(正常普通的參數)
def power(x):
    return x * x

3.4遞歸函數的學習

在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。

意義:通過一定的“基”,並按照某種規則達到重復的效果

計算階乘
n! = 1 x 2 x 3 x ... x n

用函數表示
fact(n)=n!=1×2×3×⋅⋅⋅×(n−1)×n=(n−1)!×n=fact(n−1)×n

下面這個就是一個遞歸函數
def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)

計算過程
===> fact(5)
===> 5 * fact(4)
===> 5 * (4 * fact(3))
===> 5 * (4 * (3 * fact(2)))
===> 5 * (4 * (3 * (2 * fact(1))))
===> 5 * (4 * (3 * (2 * 1)))
===> 5 * (4 * (3 * 2))
===> 5 * (4 * 6)
===> 5 * 24
===> 120


優化后的代碼(不會有遞歸調用棧溢出)
def fact(n):
    return fact_iter(n, 1)

def fact_iter(num, product):
    if num == 1:
        return product
    return fact_iter(num - 1, num * product)
    
計算過程
===> fact_iter(51)
===> fact_iter(45)
===> fact_iter(320)
===> fact_iter(260)
===> fact_iter(1120)
===> 120

遞歸函數的優點:定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。

使用遞歸函數需要注意防止棧溢出。在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀(對比JavaScript的函數調用的作用域很類似)。由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出。

解決遞歸調用棧溢出的方法是通過尾遞歸優化,事實上尾遞歸和循環的效果是一樣的,所以,把循環看成是一種特殊的尾遞歸函數也是可以的。

尾遞歸是指,在函數返回的時候,調用自身本身,並且,return語句不能包含表達式。這樣,編譯器或者解釋器就可以把尾遞歸做優化,使遞歸本身無論調用多少次,都只占用一個棧幀,不會出現棧溢出的情況。

上面的fact(n)函數由於return n * fact(n - 1)引入了乘法表達式,所以就不是尾遞歸了。要改成尾遞歸方式,需要多一點代碼,主要是要把每一步的乘積傳入到遞歸函數中

尾遞歸調用時,如果做了優化,棧不會增長,因此,無論多少次調用也不會導致棧溢出。

遺憾的是,大多數編程語言沒有針對尾遞歸做優化,Python解釋器也沒有做優化,所以,即使把上面的fact(n)函數改成尾遞歸方式,也會導致棧溢出。

小結 使用遞歸函數的優點是邏輯簡單清晰,缺點是過深的調用會導致棧溢出。

針對尾遞歸優化的語言可以通過尾遞歸防止棧溢出。尾遞歸事實上和循環是等價的,沒有循環語句的編程語言只能通過尾遞歸實現循環。

Python標准的解釋器沒有針對尾遞歸做優化,任何遞歸函數都存在棧溢出的問題。

問題一:遞歸函數實現斐波那契數列

4.python高級特性

python基礎知識有:數據類型、變量常量、語句和函數。

在Python中,代碼不是越多越好,而是越少越好。代碼不是越復雜越好,而是越簡單越好。

代碼越少,開發效率越高,但不一定執行效率越高。

4.1切片

4.2迭代

4.3列表生成式

4.4生成器

4.5迭代器

5.函數式編程

5.1函數式編程相關概念

函數是Python內建支持的一種封裝,我們通過把大段代碼拆成函數,通過一層一層的函數調用,就可以把復雜任務分解成簡單的任務,這種分解可以稱之為面向函數的程序設計。還有面比較舊的面向過程編程。 函數就是面向函數的程序設計的基本單元。

匯編語言是最貼近計算機的語言。

越低級的語言,越貼近計算機,抽象程度低,執行效率高,比如C語言;越高級的語言,越貼近計算,抽象程度高,執行效率低,比如Lisp語言。

函數式編程就是一種抽象程度很高的編程范式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。而允許使用變量的程序設計語言,由於函數內部的變量狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數是有副作用的(有參數的概念)。

Python對函數式編程提供部分支持。由於Python允許使用變量,因此,Python不是純函數式編程語言。 具體介紹

5.2 高階函數

5.2.1基本概念

高階函數英文叫Higher-order function。高階函數就是以函數作為參數傳給另一個函數。

Python內置的求絕對值的函數abs(),加括號是調用,不加括號是函數本身內容。

5.2.2 map/reduce

5.2.3 filter

5.2.4 sorted

6.python模塊

6.1.模塊的基本概念

在計算機程序的開發過程中,隨着程序代碼越寫越多,在一個文件里代碼就會越來越長,越來越不容易維護。

為了編寫可維護的代碼,我們把很多函數分組(通常按照功能進行分組),分別放到不同的文件里,這樣,每個文件包含的代碼就相對較少,很多編程語言都采用這種組織代碼的方式(模塊化開發)。在Python中,一個.py文件就稱之為一個模塊(Module)。

一個復雜的Python程序一般是由團隊合作開發完成的,這就要求團隊成員各自負責部分Python程序的代碼編寫。

例如在一個圖書館借書管理系統中,可能會把整個系統划分為圖書管理、借書管理、讀者管理、財務結算四個功能模塊,系統的每個功能模塊由團隊的一個成員負責編寫程序代碼。這就是模塊化編程的概念,模塊化編程既有利於把復雜的功能分解為簡單的功能,也有利於團隊成員工作的划分,而且能夠增加代碼的共用性和可讀性。既然是團隊合作編程,Python代碼就不能寫到一個文件中,至少每個團隊成員負責的那塊代碼要單獨建立一個代碼文件。

book:書,書籍;borrow:借用;reader:讀者;finance:金融,財務;

模塊化編程:實際上是從邏輯上(或者說業務功能上將代碼划分為多個代碼文件,這些代碼文件獨立完成程序的一些功能,但彼此也有交互。

最大的好處是大大提高了代碼的可維護性。其次,編寫代碼不必從零開始。當一個模塊編寫完畢,就可以被其他地方引用。我們在編寫程序的時候,也經常引用其他模塊,包括Python內置的模塊和來自第三方的模塊。

使用模塊還可以避免函數名和變量名沖突。相同名字的函數和變量完全可以分別存在不同的模塊中,因此,我們自己在編寫模塊時,不必考慮函數名和變量名字會與其他模塊沖突。但是也要注意,盡量不要與內置函數名字沖突。點這里查看Python的所有內置函數內置函數

為了避免模塊名字的沖突,Python又引入了按目錄來組織模塊的方法,稱為包(Package)。

舉個例子,一個abc.py的文件就是一個名字叫abc的模塊,一個xyz.py的文件就是一個名字叫xyz的模塊。

現在,假設我們的abc和xyz這兩個模塊名字與其他模塊名字相同沖突了,於是我們可以通過包來組織模塊,避免沖突。方法是選擇一個頂層包名將兩個同名的模塊分隔開,比如mycompan

mycompany
├─ __init__.py
├─ abc.py
└─ xyz.py

引入了包以后,只要頂層的包名不與別人沖突,那所有模塊都不會與別人沖突。現在,abc.py模塊的名字就變成了mycompany.abc,類似的,xyz.py的模塊名變成了mycompany.xyz。

請注意,每一個包目錄下面都會有一個__init__.py的文件,這個文件是必須存在的,否則,Python就把這個目錄當成普通目錄,而不是一個包。__init__.py可以是空文件,也可以有Python代碼,因為__init__.py本身就是一個模塊,而它的模塊名就是mycompany。(當我們僅指定包名未指定模塊名,默認導入的便是導入包下的__init__.py模塊)

  • 模塊名要遵循Python變量命名規范,不要使用中文、特殊字符;
  • 模塊名不要和系統模塊名沖突,否則將無法導入系統自帶的內置模塊和已安裝第三方模塊,最好先查看系統是否已存在該模塊,檢查方法是在Python交互環境執行import abc,若成功則說明系統存在此模塊。
mycompany
 ├─ web
 │  ├─ __init__.py
 │  ├─ utils.py
 │  └─ www.py
 ├─ __init__.py
 ├─ abc.py
 └─ utils.py

mycompany.web也是一個模塊,對應的為啥是 web下面的__init__.py,而不是web下的別的

mycompany.web.a是web目錄下的a.py

mycompany.web.b是web目錄下的b.py

mycompany.web.c是web目錄下的c.py

mycompany.web其實完整的稱呼是mycompany.web.__init__.py

這個init文件是python包結構的指向的默認文件,沒這個文件python就不承認這個web目錄是包了

未指定具體的模塊,就使用默認的__init__.py,否則必須指定到具體的模塊

使用package的具體方法:先創建一個叫mycompany的文件夾(這個就是包的名字了),然后在這個文件夾里建一個__init__.py的文件,然后在把你自己的py文件放進這個文件夾就可以了。注意你的py文件不要和Python自帶的模塊名沖突! 我們可以自己創建一個package包,然后通過pipy將模塊發布出去。

另外就是python中的引入是非常靈活的,引入的方式有很多種!!

6.1.1知識總結

每個包目錄下面都會有一個__init__.py的文件,這個文件是必須存在的,否則python就把這個目錄當成普通目錄,而不是一個包.

在python中,一個.py文件就稱之為一個模塊module,例如abc.py文件就是一個名字叫abc的模塊,如果abc.py在mycompany下(mycompany是一個包,有__init__.py文件),那么abc.py模塊名就變成了mycompany.abc(要想使用包package,必須在該文件夾下創建__init__.py)

只要包的名字與其他包不沖突,包里面的模塊名和外部的模塊名有沖突也沒關系,但不推薦!

6.2.模塊的基本使用

6.2.1模塊的分類

模塊分為好幾種:

  • 內置模塊:Python本身內置很多標准模塊,無需額外安裝就能使用,比如內建的sys,time等等
  • 第三方模塊
  • 自定義模塊
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a test module '
__author__ = 'Michael Liao'
import sys
def test():
    args = sys.argv
    if len(args)==1:
        print('Hello, world!')
    elif len(args)==2:
        print('Hello, %s!' % args[1])
    else:
        print('Too many arguments!')
if __name__=='__main__':
    test()

第1行和第2行是標准注釋,第1行注釋可以讓這個hello.py文件直接在Unix/Linux/Mac上運行(不用在命令行前輸python直接運行,但是不支持Windows系統),第2行注釋表示.py文件本身使用標准UTF-8編碼;(不寫會出現中文亂碼)

第3行是一個字符串,表示模塊的文檔注釋,任何模塊代碼的第一個字符串都(該字符串不是賦值)被視為模塊的文檔注釋;(如果想使用多行注釋可以使用三引號) 第4行使用__author__變量把作者寫進去,這樣當你公開源代碼后別人就可以瞻仰你的大名;

以上就是Python模塊的標准文件模板,當然也可以全部刪掉不寫,但是,按標准辦事肯定沒錯。

使用任何模塊(不管是第三方還是內置還是自定義都需要引入)

import sys

導入sys模塊后,我們就有了變量sys指向該模塊,利用sys這個變量,就可以訪問sys模塊的所有功能。

sys模塊有一個argv變量,用list存儲了命令行的所有參數。argv至少有一個元素,因為第一個參數永遠是該.py文件的名稱

運行python3 hello.py獲得的sys.argv就是['hello.py'];

運行python3 hello.py Michael獲得的sys.argv就是['hello.py', 'Michael]。

if __name__=='__main__':
    test()

當我們在命令行運行hello模塊文件時,Python解釋器把一個特殊變量__name__置為__main__,而如果在其他地方導入該hello模塊時,if判斷將失敗,因此,這種if測試可以讓一個模塊通過命令行運行時執行一些額外的代碼,最常見的就是運行測試。(直接運行模塊時__name__置為__main__,而如果是將這模塊在其他地方進行引入,則__name__就不是__main__了,__name__有2個取值:當模塊是被調用執行的,取值為模塊的名字;當模塊是直接執行的,則該變量取值為:__main__)

"if __name__ == '__main__': " 實現的功能就是Make a script both importable and executable

Make a script both importable and executable:使腳本可導入和可執行,同時保證導入情況下不會額外執行該模塊自身的行為

問題一:python中三引號都有什么作用
問題二:__name__的取值到底怎么區分

6.2.2.python作用域

在一個模塊中,我們可能會定義很多函數和變量,但有的函數和變量我們希望給別人使用,有的函數和變量我們希望僅僅在模塊內部使用。在Python中,是通過 _前綴來實現的。

正常的函數和變量名是公開的(public),可以被直接引用,比如:abc,x123,PI等;

類似__xxx__這樣的變量是特殊變量,可以被直接引用,但是有特殊用途,比如上面的__author__,__name__就是特殊變量,hello模塊定義的文檔注釋也可以用特殊變量__doc__訪問,我們自己的變量一般不要用這種變量名;

類似_xxx和__xxx這樣的函數或變量就是非公開的(private),不應該被直接引用,比如_abc,__abc等;

private函數和變量“不應該”被直接引用,而不是“不能”被直接引用,是因為Python並沒有一種方法可以完全限制訪問private函數或變量,但是,從編程習慣上不應該引用private函數或變量。

private函數和變量作用通常是作為其他公開函數的處理邏輯隱藏起來,所以我們不推薦將私有函數公開出去。這也是一種非常有用的代碼封裝和抽象的方法

外部不需要引用的函數全部定義成private,只有外部需要引用的函數才定義為public。(但這僅僅是口頭約束,實際上還是能進行被外界訪問的,這也是為什么是不應該引入,而不是不能)

private 私有的,就是你的東西我們不應該拿,在現實中我們拿了就侵犯了你的隱私了,但是python沒有法律規定,只是從道德層面約束。

6.3.安裝第三方模塊

合理使用第三方模塊能夠極大提高我們的開發效率!!

在Python中,安裝第三方模塊,是通過包管理工具pip完成的。

6.3.1 Windows系統安裝pip

在Python安裝中確保勾選了pip和Add python.exe to Path(兩個都點上)(安裝的時候除了勾選添加環境路徑按鈕,其他都默認就行)

判斷是否安裝成功(前提是pip所在路徑必須添加到系統環境變量中):打開cmd命令窗口輸入pip,如果有顯示說明安裝成功。

安裝失敗:如果Windows提示未找到命令,可以重新運行安裝程序添加pip。

推薦一個強大好用的第三方插件---Pillow,Python Imaging Library(PIL)這是Python2下非常強大的處理圖像的工具庫。遺憾的是PIL目前只支持到Python 2.7,並且有年頭沒有更新了,因此,基於PIL的Pillow項目開發非常活躍,並且支持最新的Python 3。

第三方庫都會在Python官方的pypi.python.org網站注冊,要安裝一個第三方庫,必須先知道該庫的名稱,可以在官網或者pypi上搜索,比如Pillow的名稱叫Pillow,因此,安裝Pillow的命令就是:

pip install Pillow

常用第三方模塊:圖像處理工具Pillow,以及MySQL驅動程序,Web框架Flask,科學計算Numpy等。

用pip一個一個安裝費時費力,還需要考慮兼容性。我們推薦直接使用Anaconda,這是一個基於Python的數據處理和科學計算平台,它已經內置了許多非常有用的第三方庫,我們裝上Anaconda,就相當於把數十個第三方模塊自動安裝好了,非常簡單易用。(安裝好Anaconda就相當於安裝好多個模塊)(但是安裝Anaconda會出現很多bug問題,具體請看:詳細安裝介紹安裝和使用)(看別人出現好多問題,還是不要安裝為好)

6.3.2模塊搜索路徑

當我們試圖加載一個模塊時,Python會在指定的路徑下搜索對應的.py文件,如果找不到,就會報錯:

>>> import mymodule
Traceback (most recent call last):
  File "<stdin>", line 1in <module>
ImportError: No module named mymodule

默認情況下,Python解釋器會搜索當前目錄、所有已安裝的內置模塊和第三方模塊,搜索路徑存放在sys模塊的path變量中

>>> import sys
>>> sys.path
['''F:\\python\\python38.zip''F:\\python\\DLLs'
'F:\\python\\lib''F:\\python''F:\\python\\lib\\site-packages']

如果我們要添加自己的搜索目錄,有兩種方法:

一是直接修改sys.path,添加要搜索的目錄:

>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')

這種方法是在運行時修改,運行結束后失效。

第二種方法是設置環境變量PYTHONPATH,該環境變量的內容會被自動添加到模塊搜索路徑中。設置方式與設置Path環境變量類似。注意只需要添加你自己的搜索路徑,Python自己本身的搜索路徑不受影響。

在 python 交互式環境中,可以通過導入 sys 模塊並修改 sys.path 的值,來添加模塊搜索路徑,但這只是臨時有效,交互式環境關閉后,sys.path 被重置為默認值。

windows下的操作永久添加python模塊路徑的方法 import sys 並 sys.path 找到默認的python的路徑,如C:\Users\‘你的用戶名’\AppData\Local\Programs\Python\Python37\ 然后在硬盤對應位置找到這個目錄,然后在Python37\Lib\site-packages文件夾中,新建一個.pth 的文件,命名規則為 module_[modulename].pth ,例如,你需要通過 import hello來調用這個目錄,你可以將其命名為 module_hello.pth 然后記事本打開,里面填寫添加個人module的目錄*/*直接在windows資源管理器的地址欄復制即可*/* ,如E:\codes\python保存即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM