1. 程式人生 > >python 基礎知識彙總(註釋規範)

python 基礎知識彙總(註釋規範)

1.python的註釋規範

python 分為 單行註釋,多行註釋以及特殊註釋

特殊註釋:

#!/usr/bin/env python
# -*-coding:utf-8-*-

例1:#!/usr/bin/env python

1、必須是檔案的第一行

2、必須以#!開頭

 3、告訴LINUX/UNIX去找到python的翻譯器。

例2:#-*-coding:utf-8-*-  :

1、基本上在檔案的第二行,在#!/usr/bin/env python的下一行

2、python interpret如何解釋字串的編碼

3、當你的檔案中出現中文的時候,你必須使用它

多行註釋:"""....."""

"""
多行註釋  
"""
'''
多行註釋'''

  一般用於給類文件,函式文件作註釋,可以是三個單引號也可以是雙引號。

單行註釋 #

# 單行註釋

如何檢視本地python的documentation:出處 

開啟cmd然後輸入:python -m pydoc -p 1234


給大家解釋一下命令含義: 


python -m pydoc表示開啟pydoc模組,這個模組就是用來檢視python文件的工具

-p 1234表示在埠號1234上開啟server,這個埠號可以自行設定

開啟的網頁documentation如下圖,根據需要檢視相關module/packages/等資訊。


python 除錯

1.設定斷點,紅色的點


2.除錯斷點,按 綠色甲殼蟲標誌,就會執行到斷點處(第二圖),可以在二圖的下方看到變數的變化。按F8 步進。



python中的import:出處 劉暢

"""
目錄結構如下:├── __init__.py
├── main.py
└── string.py
"""
# main.py 內容如下
import string
print string.a
# string.py 內容如下
a = 2
  1. 當我們執行main.py的時候,會發生什麼事情?
  2. 在main.py檔案執行到 importstring 的時候,直譯器匯入的string類庫是當前資料夾下的string.py還是系統標準庫的string.py呢?
  3. 如果明確的指明⾃己要引⼊的類庫?

Python的兩種引入機制

Python 提供了二種引入機制:

  1. relative import
  2. absolute import

relative import

relative import 也叫作相對引入,在Python2.5及之前是預設的引入方法。它的使用方法如下:
from .string import a
from ..string import a
from ...string import a
這種引入方式使用一個點號來標識引入類庫的精確位置。與linux的相對路徑表示相似,一個點表示當前目錄,每多一個點號則代表向上一層目錄。

absolute import針對如下語句:
"""
├── __init__.py
├── foo.py
└── main.py
"""
# foo.py
a = 2
# main.py
print __name__
from .foo import a
print a

absolute import 也叫作完全引入,非常類似於Java的引入進位制,在Python2.5被完全實現,但是是需要通過 from__future__importabsolute_import 來開啟該引入進位制。在Python2.6之後以及Python3,完全引用成為Python的預設的引入機制。它的使用方法如下:
from pkg import foo
from pkg.moduleA import foo

要注意的是,需要從包目錄最頂層目錄依次寫下,而不能從中間開始。

Python import實現


Python 提供了 import 語句來實現類庫的引用,下面我們詳細介紹當執行了 import 語句的時候,內部究竟做了些什麼事情。

當我們執行一行  frompackage importmodule asmymodule 命令時,Python直譯器會查詢package這個包的module模組,並將該模組作為mymodule引入到當前的工作空間。所以import語句主要是做了二件事:

  1. 查詢相應的module
  2. 載入module到local namespace
下面我們詳細瞭解python是如何查詢模組的。

查詢module的過程

在import的第一個階段,主要是完成了查詢要引入模組的功能,這個查詢的過程如下:

  1. 檢查 sys.modules (儲存了之前import的類庫的快取),如果module被找到,則到第二步。
  2. 檢查 sys.meta_path。meta_path 是一個 list,裡面儲存著一些 finder 物件,如果找到該module的話,就會返回一個finder物件。
  3. 檢查這些隱式的finder物件,不同的python實現有不同的隱式finder,但是都會有 sys.path_hooks, sys.path_importer_cache 以及sys.path。
  4. 丟擲 ImportError。

sys.modules

對於第一步中sys.modules,我們可以開啟Python來實際的檢視一下其內容:

Python 2.7.10 (default, Aug 22 2015, 20:33:39)
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>> import sys
>> sys.modules
{'copy_reg': <module 'copy_reg' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/copy_reg.pyc'>, 'sre_compile': <module 'sre_compile' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/sre_compile.pyc'>,...}
>> sys.modules['zlib'].__file__
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload/zlib.so'
可以看到sys.modules已經儲存了一些包的資訊,由這些資訊,我們就可以直接知道要查詢的包的位置等資訊.

finder、loader和importer

在上文中,我們提到了sys.meta_path中保證了一些finder物件。在python中,不僅定義了finder的概念,還定義了loader和importor的概念。

  • finder的任務是決定自己是否根據名字找到相應的模組,在py2中,finder物件必須實現find_module()方法,在py3中必須要實現find_module()或者find_loader()方法。如果finder可以查詢到模組,則會返回一個loader物件(在py3.4中,修改為返回一個module specs)。
  • loader則是負責載入模組,它必須實現一個load_module()的方法。
  • importer 則指一個物件,實現了finder和loader的方法。因為Python是duck type,只要實現了方法,就可以認為是該類。

sys.meta_path

在Python查詢的時候,如果在sys.modules沒有查詢到,就會依次呼叫sys.meta_path中的finder物件。預設的情況下,sys.meta_path是一個空列表,並沒有任何finder物件。

In [6]: sys.meta_path
Out[6]: []
我們可以向sys.meta_path中新增一些定義的finder,來實現對Python載入模組的修改。比如下例,我們實現了一個會將每次載入包的資訊打印出來的finder。
from __future__ import print_function
import sys


class Watcher(object):
@classmethod
def find_module(cls, name, path, target=None):
print("Importing", name, path, target)
return None
sys.meta_path.insert(0, Watcher)
import socket
當我們執行的時候,就可以看到系統載入socket包時所發生的事情。
liuchang@localhost  ~/Codes/pycon/ex5_meta_path
 $ python finder1.py
 Importing socket None None
Importing _socket None None
Importing functools None None
Importing _functools None None
Importing _ssl None None
Importing cStringIO None None

sys.path hook

Python import的hook分為二類,一類是上一章節已經描述的meta hook,另一類是 path hook。

當處理sys.path(或者package.path)時,就會呼叫對應的一部分的 Pack hook。Path Hook是通過向sys.path_hooks 中新增一個importer生成器來註冊的。

sys.path_hooks 是由可被呼叫的物件組成,它會順序的檢查以決定他們是否可以處理給定的sys.path的一項。每個物件會使用sys.path項的路徑來作為引數被呼叫。如果它不能處理該路徑,就必須丟擲ImportError,如果可以,則會返回一個importer物件。之後,不會再嘗試其它的sys.path_hooks物件,即使前一個importer出錯了。
在參考文獻劉暢 中還有關於import的擴充套件,但又需要時再擴充套件。

相關推薦

python 基礎知識彙總註釋規範

1.python的註釋規範python 分為 單行註釋,多行註釋以及特殊註釋特殊註釋:#!/usr/bin/env python # -*-coding:utf-8-*-例1:#!/usr/bin/env python1、必須是檔案的第一行2、必須以#!開頭 3、告訴LINU

網路基礎知識彙總持續更新

網路基礎知識彙總 1.網路模型 2.二三層轉發 3.IP路由 4.VLAN 1.網路模型 常見的網路層次劃分有OSI七層協議、TCP/IP四層協議以及TCP/IP五層協議,它們之間的對應關係如下圖所示: 由於工作偏向於底層網路,

MySQL資料庫基礎知識彙總學習筆記

前言 此文章主要內容是簡單的記錄學習歷程,主要通途是日後查詢東西比較方便,當做字典來使用。內容的順序也是從簡單的入門開始的。內容無非就是增刪改查。 ~~ ~~ 關係資料庫往簡單了說就是一個一個的表,每個表都有行和列,表與表之間又有聯絡。其中列,就是一個一個的欄位,代表著你要存入資料的標題。行

python基礎知識4字典和函數

python# 字典 - 又稱為(# hash,映射,關聯數組)- "字" ---> 先找首字母,查到這個字的解釋所在的頁數; ## 字典的定義:d = {}d = {"key1":"value1"}d = {"key1":"value1","key2":"value3"} d = { "17

python基礎知識5集合,高級特性,高階函數

python** 刪除列表中重復的元素:l = [1,2,3,1,2,3]- 強制轉化列表為集合類型:list(set(l))- 將列表轉化為字典,拿出裏面的所有key值: dict.fromkeys(l).keys()** 實現switch的兩種方法:- if...elif...else...- 通過字典實

python---基礎知識回顧模塊sys,os,random,hashlib,re,json,xml,shutil,configparser,logging,datetime,time,集合,堆,雙端隊列,其他

ID 正常 空值 字符 預測 platform OS normal 生成 前提:dir,__all__,help,__doc__,__file__ dir:可以用來查看模塊中的所有特性(函數,類,變量等) >>> import copy >>

python基礎知識總結不斷更新。。。。

python可以簡便的方法:(1)lambda x,y:x*y(2)list1 = list(filter(lambda x:x%3 == 0,range(100)))filter 第一個參數是過濾條件,第二個是要過濾的內容返回值是個Object,得轉換為其他類型(3)map: list1 = map(lam

python---基礎知識回顧叠代器和生成器

num list() 包括 實現 trac == 強烈 nbsp 數列 前戲:叠代器和生成器 叠代: 如果給定一個list或tuple,我們可以通過for循環來遍歷這個list或tuple,這種遍歷我們稱為叠代(Iteration)。 Python的for循環不僅可以

python---基礎知識回顧圖形用戶界面

oot exit root gty 有用 有變 src string tee 主要使用wxPython(最成熟的跨平臺python GUI工具包) 前戲:老牌python GUI程序(Tkinter) import tkinter.messagebox as messag

python---基礎知識回顧其他

its 入棧 eve license amd bsp python3.5 help none 一:語句中的入棧順序 同其他語言(C,C++等)一樣入棧順序是右端先進行執行後入棧(python3.5中),在python2.7之前的入棧順序是左端先 Python2.7: Py

python---基礎知識回顧圖形用戶界面-------WxPythin

hot drop bin frame 自己 圖片 opened 事件驅動 平臺 主要使用wxPython(最成熟的跨平臺python GUI工具包) wxPython手冊 前戲:基礎了解 import wx class MyFrame(wx.Frame):

python---基礎知識回顧進程和線程

進程搶占 有一個 信息 lin linux 下一個 最小 網絡 方式 前戲:進程和線程的概念 若是學過linux下的進程,線程,信號...會有更加深刻的了解。所以推薦去學習下,包括網絡編程都可以去了解,尤其是對select,pool,epool都會有更多的認識。 進程就是資

python---基礎知識回顧進程和線程自定義線程池,上下文管理器和協程的使用

elf () self. 數據類型 大小 get 基礎數據類型 __init__ 進行 前戲: 在進行自定義線程池前,先了解下Queue隊列 隊列中可以存放基礎數據類型,也可以存放類,對象等特殊數據類型 from queue import Queue class T:

老男孩python基礎知識練習題

rem python () 計算 輸出 長度 end 2個 下列表 20、字符串是否可叠代?如可以請使用for循環每一個元素? >>> name = " aleX ">>> for i in name:... print(i) 2

python基礎知識總結

字母 內容 查看 二進制 代碼 大寫字母 del 源碼 解決 一。python版本區別 宏觀上python2與python3的區別: python2:源碼不標準,混亂,重復的代碼太多,默認編碼方式是ascill碼。 python3:

python基礎知識總結

優先 轉化 情況 顯示 判斷 指定 賦值運算 true 比較運算 基礎數據類型初始:   int(數字):+ 加         - 減         * 乘         / 除         % 取余數   str(字符串):python中凡是用引號引起

Python基礎知識回顧也可以說有點小技巧性的東西

交換變數 a,b=2,3 a,b=b+1,a print(a,b) 結果如下: 4 2 字典推導和集合推導 some_list=[1,2,3,4,5,6] another_list=[i+1 for i in some_list] #列表的推導 print(another_

Python基礎知識筆記

一. CPU、記憶體、硬碟及作業系統之間的關係 1. CPU——中央處理器,運算中心與控制中心,相當於人的大腦。 2. 記憶體——暫時儲存資料,將應用程式載入到其中,以便與CPU進行資料傳輸互動。 3. 硬碟——即所謂的磁碟(如D盤,E盤),用於長期儲存資料。    &n

Python基礎知識筆記

一. 元組(tuple)       元組——只讀列表,資料能被查詢,不能修改。字串的切片操作同樣適用於元組。 1 s = ("ada", "jalksdj", "alkjsd") 2 3 # 注意,元組內只有一個值時,必須加個英文符逗號,比如下面

資料庫基礎知識彙總

五個基本的關係代數操作 並、差、笛卡爾積、選擇、投影 資料庫語言四大類 DQL(Data Query Language):資料庫查詢語言。 DDL(Data Definition Language):資料庫定義語言。定義關係模式、刪除關係、修改關