摘要:例如等價于到結束,但不包括。例如返回沒有每次跳躍的間距,默認為。
異常處理
單個異常處理:
try: print(num) except NameError: print("沒有定義變量") except FileNotFoundError: print("找不到文件路徑") print(1)
多個異常處理:
try: print(num) # 11/0 # open("xxx.txt") except (NameError, FileNotFoundError, ZeroDivisionError): # 多個異常統一處理 print("異常") print(1)
所有異常處理:
try: print(num) except Exception: # 所有異常處理 print("所有異常處理") print(1)
查看原來異常輸出:
try: print(num) except Exception as err: print(err) print(1)
沒有異常執行
try: a = 1 execpt Exception as err: print(err) else: print("沒有異常執行") finally: print("不管是否出現異常, 都執行") print(1)
import time try: f = open("test.txt") try: while True content = f.readline() if len(content) == 0: break time.sleep(2) print(content) except Exception: # pass print("文件產生異常") finally: f.close() print("關閉文件") except Exception: print("沒有這個文件")
try與except需要同時存在
當函數嵌套的時候,如果函數出現異常,會返回異常,然后捕獲到異常
raise: 拋出一個自定義異常
raise語句如果不帶參數,就會把當前錯誤原樣拋出。
def main (): try: s = input("請輸入-->") if len(s) < 3: raise ShortInputException(len(s), 3) else: print(s) except ShortInputException as result: print("ShortInputException: 輸入的長度是 %d, 長度至少需要是 %d" % (result.length, result.atleast)) else: print("沒有異常發生.") class ShortInputException(Exception): """自定義異常類""" def __init__(self, length, atleast): # super().__init() self.length = length self.atleast = atleast main()模塊
如何獲取當前模塊的文件名: __file__
引入模塊
import sys導入模塊中的全部功能
from argv import sys, from argv import sys,executable導入模塊中的多帶帶功能
from sys import *
from sys as s 別名
__name__: 用于表示當前模塊的名字,同時還能反映一個包的結構
導入輸出的是當前模塊名
模塊被直接運行時模塊名為:__main__
if __name__ == "__main__": # 如果模塊是被直接運行的,則代碼塊被運行,如果模塊是被導入的,則代碼塊不被運行。 # code
常用內建模塊
標準庫 | 說明 |
---|---|
builtins | 內建函數默認加載 |
os | 操作系統接口 [系統級別的操作(文件和目錄)] |
sys | Python自身的運行環境 [對解釋器相關的操作] |
functools | 常用的工具 |
json & pickle | 編碼和解碼 JSON 對象 |
logging | 記錄日志,調試 |
multiprocessing | 多進程 |
threading | 多線程 |
copy | 拷貝 |
time | 時間 |
datetime | 日期和時間 |
calendar | 日歷 |
hashlib | 加密算法 |
random | 生成隨機數 |
re | 字符串正則匹配 |
socket | 標準的 BSD Sockets API |
shutil | 文件和目錄管理 [高級的 文件、文件夾、壓縮包 處理模塊(遞歸,文件復制等)] |
glob | 基于文件通配符搜索 |
shelve | 一個簡單的k,v將內存數據通過文件持久化的模塊,可以持久化任何pickle可支持的python數據格式 |
hashlib
import hashlib m = hashlib.md5() # 創建hash對象,md5:(message-Digest Algorithm 5)消息摘要算法,得出一個128位的密文 print m #m.update("alogy") # 更新哈希對象以字符串參數 print m.hexdigest() # 返回十六進制數字字符串
例子:用于注冊、登錄
import hashlib import datetime KEY_VALUE = "alogy" now = datetime.datetime.now() m = hashlib.md5() str = "%s%s" % (KEY_VALUE,now.strftime("%Y%m%d")) m.update(str.encode("utf-8")) value = m.hexdigest() print(value) # c69c59b58209a94f40e6a7a425f9a977
functools
["WRAPPER_ASSIGNMENTS", "WRAPPER_UPDATES", "__builtins__", "__doc__", "__file__", "__name__", "__package__", "cmp_to_key", "partial", "reduce", "total_ordering", "update_wrapper", "wraps"]
partial()
把一個函數的某些參數設置默認值,返回一個新函數,調用這個新函數會更簡單。
import functools def showarg(*args, **kw): print(args) print(kw) p1 = functools.partial(showarg, 1, 2, 3) p1() p1(4,5,6) p1(a="python", b="alogy") p2 = functools.partial(showarg, a=3, b="linux") p2() p2(1, 2) p2(a="python", b="alogy")
wraps()
使用裝飾器時,被裝飾后等函數其實已經是另外一個函數(函數名等函數屬性會發生變化)
添加后由于函數名和函數的doc發生了改變,對測試結果有一些影響,例如:
def note(func): "note function" def wrapper(): "wrapper function" print("note something") return func() return wrapper @note def test(): "test function" print("I am test") test() print(test.__doc__)
運行結果
note something I am test wrapper function
所以,Python的functools包中提供了一個叫wraps的裝飾器來消除這樣的副作用。例如:
import functools def note(func): "note function" @functools.wraps(func) # 保存外邊函數名 def wrapper(): "wrapper function" print("note something") return func() return wrapper @note def test(): "test function" print("I am test") test() print(test.__doc__)
運行結果
note something I am test test function
常用擴展庫
擴展庫 | 說明 |
---|---|
requests | 使用的是 urllib3,繼承了urllib2的所有特性 |
urllib | 基于http的高層庫 |
scrapy | 爬蟲 |
beautifulsoup4 | HTML/XML的解析器 |
celery | 分布式任務調度模塊 |
redis | 緩存 |
Pillow(PIL) | 圖像處理 |
xlsxwriter | 僅寫excle功能,支持xlsx |
xlwt | 僅寫excle功能,支持xls ,2013或更早版office |
xlrd | 僅讀excle功能 |
elasticsearch | 全文搜索引擎 |
pymysql | 數據庫連接庫 |
mongoengine/pymongo | mongodbpython接口 |
matplotlib | 畫圖 |
numpy/scipy | 科學計算 |
django/tornado/flask | web框架 |
xmltodict | xml 轉 dict |
SimpleHTTPServer | 簡單地HTTP Server,不使用Web框架 |
gevent | 基于協程的Python網絡庫 |
fabric | 系統管理 |
pandas | 數據處理庫 |
scikit-learn | 機器學習庫 |
例如:讀寫excel文件
安裝esay_install工具
sudo apt-get install python-setuptools
安裝模塊
sudo easy_install xlrd
sudo easy_install xlwt
所有內置模塊
import sys sys.modules.keys()
["builtins", "sys", "_frozen_importlib", "_imp", "_warnings", "_thread", "_weakref", "_frozen_importlib_external", "_io", "marshal", "nt", "winreg", "zipimport", "encodings", "codecs", "_codecs", "encodings.aliases", "encodings.utf_8", "_signal", "__main__", "encodings.latin_1", "io", "abc", "_weakrefset", "site", "os", "errno", "stat", "_stat", "ntpath", "genericpath", "os.path", "_collections_abc", "_sitebuiltins", "sysconfig", "idlelib", "idlelib.run", "linecache", "functools", "_functools", "collections", "operator", "_operator", "keyword", "heapq", "_heapq", "itertools", "reprlib", "_collections", "types", "collections.abc", "weakref", "tokenize", "re", "enum", "sre_compile", "_sre", "sre_parse", "sre_constants", "_loc ale", "copyreg", "token", "queue", "threading", "time", "traceback", "warnings", "tkinter", "_tkinter", "tkinter.constants", "idlelib.autocomplete", "string", "_string", "idlelib.autocomplete_w", "platform", "subprocess", "signal", "msvcrt", "_winapi", "idlelib.multicall", "idlelib.config", "configparser", "_bootlocale", "encodings.gbk", "_codecs_cn", "_multibytecodec", "idlelib.hyperparser", "idlelib.pyparse", "idlelib.calltips", "inspect", "ast", "_ast", "dis", "opcode", "_opcode", "importlib", "importlib._bootstrap", "importlib._bootstrap_external", "importlib.machinery", "textwrap", "idlelib.calltip_w", "idlelib.debugger_r", "idlelib.debugger", "bdb", "fnmatch", "posixpath", "idlelib.macosx", "idlelib.scrolledlist", "idlelib.windows", "idlelib.debugobj_r", "idlelib.rpc", "pickle", "struct", "_struct", "_compat_pickle", "_pickle", "select", "socket", "_socket", "selectors", "math", "socketserver", "idlelib.iomenu", "shlex", "tempfile", "shutil", "zlib", "bz2", "_compression", "_bz2", "lzma", "_lzma", "random", "hashlib", "_hashlib", "_blake2", "_sha3", "bisect", "_bisect", "_random", "locale", "idlelib.stackviewer", "idlelib.debugobj", "idlelib.tree", "idlelib.zoomheight", "pydoc", "importlib.util", "importlib.abc", "contextlib", "pkgutil", "urllib", "urllib.parse"]
內置全局變量:vars()
{"__name__": "__main__", "__doc__": None, "__package__": None, "__loader__":, "__spec__": None, "__annotations__": {}, "__builtins__": }
第三方模塊:
anaconda: 數十個常用的第三方模塊
內建屬性
python類的內建屬性和方法
["__class__", "__delattr__", "__dict__", "__doc__", "__format__", "__getattribute__", "__hash__", "__init__", "__module__", "__new__", "__reduce__", "__reduce_ex__", "__repr__", "__setattr__", "__sizeof__", "__str__", "__subclasshook__", "__weakref__"]
常用專有屬性 | 說明 | 觸發方式 |
---|---|---|
__init__ | 構造初始化函數 | 創建實例后,賦值時使用,在__new__后 |
__new__ | 生成實例所需屬性 | 創建實例時 |
__class__ | 實例所在的類 | 實例.__class__ |
__str__ | 實例字符串表示,可讀性 | print(類實例),如沒實現,使用repr結果 |
__repr__ | 實例字符串表示,準確性 | 類實例 回車 或者 print(repr(類實例)) |
__del__ | 析構 | del刪除實例 |
__dict__ | 實例自定義屬性 | vars(實例.__dict__) |
__doc__ | 類文檔,子類不繼承 | help(類或實例) |
__getattribute__ | 屬性訪問攔截器 | 訪問實例屬性時 |
__bases__ | 類的所有父類構成元素 | 類名.__bases__ |
__getattribute__例子:
class Person(object): def __init__(self, subject1): self.subject1 = subject1 # 屬性訪問時攔截器,打log def __getattribute__(self, obj): if obj == "subject1": print("log subject1") return "redirect python" def show(self): print("this is Person") p = Person("python") print(p.subject1)
內建函數
dir(__builtins__)
["ArithmeticError", "AssertionError", "AttributeError", "BaseException", "BufferError", "BytesWarning", "DeprecationWarning", "EOFError", "Ellipsis", "EnvironmentError", "Exception", "False", "FloatingPointError", "FutureWarning", "GeneratorExit", "IOError", "ImportError", "ImportWarning", "IndentationError", "IndexError", "KeyError", "KeyboardInterrupt", "LookupError", "MemoryError", "NameError", "None", "NotImplemented", "NotImplementedError", "OSError", "OverflowError", "PendingDeprecationWarning", "ReferenceError", "RuntimeError", "RuntimeWarning", "StandardError", "StopIteration", "SyntaxError", "SyntaxWarning", "SystemError", "SystemExit", "TabError", "True", "TypeError", "UnboundLocalError", "UnicodeDecodeError", "UnicodeEncodeError", "UnicodeError", "UnicodeTranslateError", "UnicodeWarning", "UserWarning", "ValueError", "Warning", "ZeroDivisionError", "__debug__", "__doc__", "__import__", "__name__", "__package__", "abs", "all", "any", "apply", "basestring", "bin", "bool", "buffer", "bytearray", "bytes", "callable", "chr", "classmethod", "cmp", "coerce", "compile", "complex", "copyright", "credits", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "execfile", "exit", "file", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "intern", "isinstance", "issubclass", "iter", "len", "license", "list", "locals", "long", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "print", "property", "quit", "range", "raw_input", "reduce", "reload", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "unichr", "unicode", "vars", "xrange", "zip"]
range()
range(stop) # 整數列表 range(start, stop[, step]) # 整數列表
strat: 計數從start開始,默認是從0開始。例如:range(5)等價于range(0, 5)
stop: 到stop結束,但不包括stop。例如:range(0, 5), 返回[0, 1, 2, 3, 4]沒有5
step: 每次跳躍的間距,默認為1。例如:range(0, 5)等價于range(0, 5, 1)
map()
map函數會根據提供的函數作為指定序列做映射
map(function, sequence[, sequence, ...]) -> list
function: 一個函數
sequence: 一個或多個序列,取決于function需要幾個參數
返回值是一個list
# 函數需要一個參數 map(lambda x: x*x, [1, 2, 3]) # [1, 4, 9] # 函數需要兩個參數 map(lambda x, y: x+y, [1, 2, 3], [4, 5, 6]) # [5, 7, 9] def f1( x, y ): return (x, y) l1 = [0, 1, 2, 3, 4, 5, 6] l2 = ["Sun", "M", "T", "W", "T", "F", "S"] l3 = map(f1, l1, l2) print(list(l3)) # [(0, "Sun"), (1, "M"), (2, "T"), (3, "W"), (4, "T"), (5, "F"), (6, "S")]
filter()
filter()會對指定序列執行過濾操作
filter(function or None, sequence) -> list, tuple, or string
function: 接受一個參數,返回布爾值True或False
sequence: 序列可以是str,tuple, list
返回值list, tuple, string
filter(lambda x: x%2, [1, 2, 3, 4]) [1, 3] filter(None, "a") "a"
reduce()
reduce會對參數序列中對元素進行累積
reduce(function, sequence[, initial]) -> value
function:該函數有兩個參數
sequence:序列可以是str,tuple,list
initial:固定初始值
function: 該函數有二個參數
sequence: 序列可以是str, tuple, list
initial: 固定初始值
返回value
reduce(lambda x, y: x+y, [1,2,3,4]) # 10 reduce(lambda x, y: x+y, [1,2,3,4], 5) # 15 reduce(lambda x, y: x+y, ["aa", "bb", "cc"], "dd") # "ddaabbcc"
sorted()
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list
iterable: 迭代器
key: 函數
reverse: 正序,倒序
返回一個新的列表
sorted([1, 4, 2, 6, 3, 5]) # [1, 2, 3, 4, 5, 6] sorted([1, 4, 2, 6, 3, 5], reverse = 1) # 倒序 # [6, 5, 4, 3, 2, 1] sorted(["dd", "aa", "cc", "bb"]) # ["aa", "bb", "cc", "dd"] lst = [3, -19, -1, 28, 7, 0, -2, -5, 7, 8, 0 -3, 9, 0, 11] sorted(lst, key=lambda x: (x >= 0, -x if x >= 0 else x)) # [-19, -5, -3, -2, -1, 28, 11, 9, 8, 7, 7, 3, 0, 0] ???? sorted(lst, key=lambda x: (x >= 0, -abs(x))) # [-19, -5, -3, -2, -1, 28, 11, 9, 8, 7, 7, 3, 0, 0] ????
模塊中的__all__的作用
__all__只影響from
__all__ = ["test"] def test(): print("test")
包、__init__.py的作用
某個文件夾下具有__init.py的,稱之為包
__init__.py作用:
package的標識
定義package中的__all__,用來模糊導入
模塊的發布和安裝
新建一個setup.py寫入:
from distutils.core import setup setup(name="alogy", version="1.0", description="a", author="alogy", py_modules=["suba.aa"]) # suba.aa 包名.模塊名
發布:
> python setup.py build > python setup.py sdist
安裝:
> python setup.py install
import搜索路徑
import sys sys.path # sys.path的先后順序
重新導入模塊
模塊被導入后,import module不能重新導入模塊,需要重新導入
from imp import * reload("module") # module模塊名調試
pdb是基于命令行的調試工具
運行時啟動
python -m pdb xxx.py
l: list 查看運行的代碼
n: next 往下行執行
c: continue 繼續執行代碼直到結束
b 7,b 行數: break 添加斷點(通過c執行)
b: 查看所有斷點
clear 斷點序號: 清除指定斷點
s: step 進入當前作用域中
p 變量名: 查看指定變量名的值
a: 查看所有當前作用域的變量名和變量值
q: quit 退出調試
r: return 快速執行到函數最后一行
交互式調試
import pdb pdb.run("testfun(args)") # 此時會打開pdb調試,注意:先使用s跳轉到testfun函數中,然后可以使用
程序里埋點
當程序執行到pbd.set_trace()位置時停下來調試
import pdb pdb.set_trace()package
常用內置模塊:
sys: 系統模塊, 程序與python解釋器的交互, 用于操控python的運行時環境
os: 操作系統模塊, 程序與操作系統的交互, 系統操作IO等行為
time,datetime: 時間模塊
re: 正則
json: json處理
urllib: 網絡處理
random: 隨機
不常用內置模塊:
itertools: 一些特殊的函數可以操作可迭代對象或者排列組合
copy: 拷貝的函數(賦值一般是傳遞對象的引用,修改一個對象,會導致其它對象也受到改變)
string: String模塊包含大量實用常量和類
Naked
Naked: 一個Python命令行應用程序框架. 可用于執行JS代碼
from Naked.toolshed.shell import execute_js, muterun_js import sys response = muterun_js("file.js") if response.exitcode == 0: print(response.stdout) else: sys.stderr.write(str(response.stderr))
shutil
用于復制和歸檔文件和目錄樹的實用函數。
# 清dist目錄 clearDist = (len(sys.argv) == 4 and (sys.argv[3] == "--clear")) if clearDist: shutil.rmtree("./dist/")
subprocess
訪問I/O流的子進程
# 編譯vue buildStat = subprocess.call("node build/build.js " + webPath + " " + verPath, shell=True) if buildStat != 0: print("vue 編譯錯誤") sys.exit(1)
six
Python 2和3兼容庫
import six def bytes_to_str(s, encoding="utf-8"): """Returns a str if a bytes object is given.""" if six.PY3 and isinstance(s, bytes): return s.decode(encoding) return s其它
給程序傳遞參數
import sys print(sys.argv) # 接收運行時接受的參數
終止程序運行
import sys sys.exit(1)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41403.html
摘要:返回的信息特定于當前線程以及當前堆棧幀。出于某些原因,這個值可能無法計算,將返回返回安卓版本的構建時間,以整數表示。僅適用于安卓平臺返回解釋器的檢查間隔。可操作此屬性實現強制重新加載模塊等。 sys模塊提供對由解釋器使用或維護的某些變量、與解釋器交互的函數的訪問接口。 sys.abiflags 在使用標準configure腳本構建python的POSIX系統上,該屬性包含了PEP 31...
摘要:退出運行時上下文并返回一個布爾值旗標來表明所發生的任何異常是否應當被屏蔽。除了實現上下文管理協議以外,不同類型不會被特殊處理。其中一些并不會被內置函數所列出。 上一篇文章:Python標準庫---15、內置類型:集合類型、映射類型下一篇文章:Python標準庫---17、內置異常 上下文管理器類型 Python 的 with 語句支持通過上下文管理器所定義的運行時上下文這一概念。 此...
摘要:調試器可幫助程序員分析完整的代碼。我們將使用標準庫中的模塊調試我們的腳本。例外是程序執行期間發生的錯誤。設置斷點并檢查堆棧幀,并列出源代碼。輸入以繼續調試。分析和計時程序分析程序意味著測量程序的執行時間。的模塊用于分析程序。 showImg(https://segmentfault.com/img/remote/1460000018807029?w=902&h=442); 來源 | ...
摘要:前言最近之父龜爺終于在官方郵件組落實了的終焉之日。于之后的年月日發布,計劃作為的最后一個版本。統一使用作為縮進,如果和同時存在,就會觸發異常兼容技巧統一使用作為縮進。兼容技巧統一使用內置函數。統一輸出函數中的即是關鍵字又是內置函數。 前言 最近 Python 之父 Guido van Rossum(龜爺)終于在 Python 官方郵件組落實了 Python 2.7 的終焉之日(EOL)...
摘要:認為有極大的優化空間,在字符串和整形操作上可以取得很好的優化結果。的和方法返回迭代器,而之前的等函數都被廢棄。python有兩個主要的版本,python2 和 python3 ,但是python又不同于其他語言,向下兼容,python3是不向下兼容的,但是絕大多數組件和擴展都是基于python2的,下面就來總結一下python2和python3的區別。 ? 1.性能? Py3.0運...
閱讀 870·2021-09-02 09:55
閱讀 1495·2019-12-27 12:02
閱讀 1684·2019-08-30 14:24
閱讀 1138·2019-08-30 14:18
閱讀 2750·2019-08-29 13:57
閱讀 2193·2019-08-26 11:51
閱讀 1364·2019-08-26 10:37
閱讀 763·2019-08-23 16:09