Python學習筆記之函數與正則
阿新 • • 發佈:2017-12-18
地址 tee 大於等於 格式 匿名函數 驗證碼 分組 indent 引用
Python函數
Pycharm 常用快捷鍵,例如復制當前行、刪除當前行、批量註釋、縮進、查找和替換。 常用快捷鍵的查詢和配置:Keymap Ctrl + D:復制當前行 Ctrl + E:刪除當前行 Shift + Enter:快速換行 Ctrl + /:快速註釋(選中多行後可以批量註釋) Tab:縮進當前行(選中多行後可以批量縮進) Shift + Tab:取消縮進(選中多行後可以批量取消縮進) Ctrl + F:查找 Ctrl + H:替換 ----------------------------------------------------------------- 是否為主文件:__name__ __name__就是標識模塊的名字的一個系統變量 if __name__ == ‘__main__‘ 查看當前文件路徑 __file__ print __file__ 查看當前文件路徑 __doc__ print __doc__ 查看模塊註釋
1.__doc__ 返回指定函數的文檔字符串(函數的註釋) def doc_value(x): """兩數相加""" return x+x ------------------------------- doc_value.__doc__ ------------------------------- printresult is : "兩數相加" 2.__name__ 返回函數名 def doc_value(x): ------------------------------- doc_value.__name__ ------------------------------- print result is: "doc_value" 3.__module__返回函數所在模塊名字 def doc_value(x): ------------------------------- doc_value.__module__ ------------------------------- printresult is: "__main__" maim 代表主函數 4.func_defaults 返回一個包含默認參數值的元祖 5.func_dicts 返回支持任意函數屬性的命名空間 6.func_globals 返回一個包含函數全局變量的字典應用 7.func_closure 返回一個胞體元祖,其中胞體包含了函數自由變量的綁定 ********************************************** 函數調用函數 1.默認函數 :這允許用戶為函數的參數定義一些默認值。 這種情況下,可以以更少的參數來調用該函數,而函數調用時未提供的參數,Python會使用默認提供的值作為這些參數值 def default(x=2) 2.關鍵字函數 key =value def dict_value(**x) dict_value(x=2) 3.任意的參數列表 ,可變函數 Python還支持定義這樣的函數,該函數可以接受以元組形式傳遞的任意數量的參數 def list_value(*x) list_value(1,2,3,4,5) 當實參為list時也可以入多個值 def list_test(x) list_test([1,2,3,4]) 參數定義的順序必須是:必選參數、默認參數、可變參數和關鍵字參數 def test(a, b=1, *c, **d)
yield 生成器,延遲生成 |保持函數的執行狀態 xrange 生成器 python3取消 python3 range 放映列表對象range(1,10) --------------------------- 三元運算: result = ‘gt‘ if 1 > 3 else ‘lt‘ print(result) lambda 可以這樣認為,lambda作為一個表達式,定義了一個匿名函數 非常容易理解,在這裏lambda簡化了函數定義的書寫形式。是代碼更為簡潔,但是使用函數的定義方式更為直觀,易理解。 lambda語句中,冒號前是參數,可以有多個,用逗號隔開,冒號右邊的返回值 --------------------------- 內置函數 help()幫助 dir() 返回模塊的屬性列表。 vars() 返回對象object的屬性和屬性值的字典對象 type() 查看參數是什麽類型 ---------------------------- reload() 用於重新載入之前載入的模塊 import test_demo.demo import imp imp.reload(test_demo.demo) id()查看變量內存地址 ---------------------------- 原cmp(x, y)用於比較2個對象 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1 python3 摒棄 import operator #首先要導入運算符模塊 operator.gt(1,2) #意思是greater than(大於) operator.ge(1,2) #意思是greater and equal(大於等於) operator.eq(1,2) #意思是equal(等於) operator.le(1,2) #意思是less and equal(小於等於) operator.lt(1,2) #意思是less than(小於) 返回布爾值 ---------------------------- abs() 絕對值 bool()布爾值 divmod() 返回商與余數的元組 用於網頁分頁 max() 最大值 min() 最小值 len() 長度 sum() 求和 all(可叠代對象) 遍歷叠代對象,全部為真則為true,有一個為假則為假,空為True any(可叠代對象) 有一個不為flase,則返回true,空為flase chr()主要用來表示ascii碼對應的字符他的輸入時數字 ord()函數主要用來返回對應字符的ascii碼 hex(x ) 將一個整數轉換為一個十六進制字符串 oct(x ) 將一個整數轉換為一個八進制字符串 bin() 返回一個整數 int 或者長整數 long int 的二進制表示 ----------------------------------------------- enumerate 對於一個可叠代的(iterable)/可遍歷的對象(如列表、字符串),enumerate將其組成一個索引序列,利用它可以同時獲得索引和值 list_value = [1, 2, 3, 4] for value in enumerate(list_value): print(value) (0, 1) (1, 2) (2, 3) (3, 4) print(‘{0}{1}{2}‘.format(‘無敵‘, ‘的‘, ‘我‘)) ----------------------------------------------- 結果:無敵的我 apply(func [, args [, kwargs ]]) 函數用於當函數參數已經存在於一個元組或字典中時,間接地調用函數(python3已結不支持了) Python2詳細用法: http://www.jb51.net/article/53044.htm map(function,list)是 Python 內置的高階函數,它接收一個函數 f 和一個 list,並通過把函數 f 依次作用在 list 的每個元素上,得到一個新的 list 並返回。 print(list(map(lambda x: x*2, [1, 3, 5, 7, 9]))) filter(function,list)函數用於過濾序列,過濾掉不符合條件的元素,返回由符合條件元素組成的新列表 該接收兩個參數,第一個為函數,第二個為序列,序列的每個元素作為參數傳遞給函數進行判,然後返回 True 或 False,最後將返回 True 的元素放到新列表中 print(list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5]))) reduce(function,list[,可選參數])函數會對參數序列中元素進行累積。 函數將一個數據集合(鏈表,元組等)中的所有數據進行下列操作:用傳給reduce中的函數 function(有兩個參數)先對集合中的第 1、2 個元素進行操作, 得到的結果再與第三個數據用 function 函數運算,最後得到一個結果。 python3 reduce已經從全局名字空間移除了, from functools import reduce print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])) zip()函數用於將可叠代的對象作為參數,將對象中對應的元素打包成一個個元組,然後返回由這些元組組成的列表 傳N個列表,生成一個新的序列,讓每一列是一組 list1 = [1, 2, 3] list2 = [‘a‘, ‘b‘, ‘c‘] list3 = [‘hello‘, ‘world‘, ‘jack‘] print(list(zip(list1, list2, list3))) [(1, ‘a‘, ‘hello‘), (2, ‘b‘, ‘world‘), (3, ‘c‘, ‘jack‘)] eval() 函數用來執行一個字符串表達式,並返回表達式的值 print(eval(‘8*8‘)) 64
反射:通過字符串的形式導入模塊,並以字符串的形式執行函數 # 反射(模塊) temp = ‘os‘ model = __import__(temp) print(model.path.split(__file__)[0]) C:/Users/TDH/Desktop/TestKnow/Python/day03/test_01 實際: -------------------------------- 動態導入 切換不同數據庫 mysql,sqlserver 用於隨時切換數據庫,減低程序耦合 getattr() 函數用於返回一個對象屬性值。 在沒有對應屬性時,將觸發 AttributeError # 反射(函數) model = __import__(‘demo1‘) function = getattr(model, ‘print_hello‘) print(function)
import random print(random.random) #生成隨機數,0-1之間 print(random.randint(1, 2)) #定義取數區間,去其中的一個整數 print(random.randrange(1, 3)) #大於等於1,小於3的數 # 6位驗證碼 import random code = [] for i in range(6): if i == random.randint(1, 5): code.append(str(random.randint(1, 5))) else: code.append(chr(random.randint(65, 90))) print(‘‘.join(code))
# md5加密 import hashlib m2 = hashlib.md5() m2.update(‘admin‘.encode(‘utf-8‘)) print(m2.hexdigest())
序列化/反序列化 將對象轉換為可通過網絡傳輸或可以存儲到本地磁盤的數據格式(如:XML、JSON或特定格式的字節串)的過程稱為序列化;反之,則稱為反序列化。 Python的JSON模塊 序列化與反序列化的過程分別叫做:encoding 和 decoding。 encoding: 把Python對象轉換成JSON字符串 decoding: 把JSON字符串轉換成python對象 import pickle li = [‘a‘, ‘12‘, ‘2‘, ‘32‘] print(pickle.dumps(li)) print(pickle.loads(pickle.dumps(li))) # 序列化到文件中 >>> with open(‘test.json‘, ‘w‘) as fp: ... json.dump({‘a‘:‘str中國‘, ‘c‘: True, ‘e‘: 10, ‘b‘: 11.1, ‘d‘: None, ‘f‘: [1, 2, 3], ‘g‘:(4, 5, 6)}, fp, indent=4) # 反序列化文件中的內容 >>> with open(‘test.json‘, ‘r‘) as fp: ... json.load(fp) {‘e‘: 10, ‘g‘: [4, 5, 6], ‘b‘: 11.1, ‘c‘: True, ‘d‘: None, ‘a‘: ‘str中國‘, ‘f‘: [1, 2, 3]} 應用場景:Python與Python之間文件傳輸
Python正則表達式
正則表達式,又稱正規表示式、正規表示法、正規表達式、規則表達式、常規表示法 ---------------------------------------------------- Python支持的正則表達式元字符和語法 ********************************* 字符 --------------------------------- .匹配除換行符\n之外的任意字符 \轉義字符 [...] 字符集,對應的位置可以使字符集中任意字符 ********************************* 預定義字符集 --------------------------------- \d 數字[0-9] \D 非數字[^\d] \s 空白字符[<空格>\t\r\n\f\v] \S 非空白字符[^\s] \w 單詞字符[A-Za-z0-9] \W 非單詞字符[^\w] ********************************* 數量詞 --------------------------------- * 匹配前一個字符0或無限次 + 匹配前一個字符1次或無限次 ? 匹配前一個字符0次或1次 {m} 匹配前一個字符m次 {m,n} 匹配前一個字符m至n次 *?+??非貪婪模式 ********************************* 邊界匹配 --------------------------------- ^ 匹配字符串開頭 $ 匹配字符串末尾 \A 僅匹配字符串開頭 \Z 僅匹配字符串末尾 \b 匹配\w和\W之間 \B [^\b] ********************************* 邏輯、分組 --------------------------------- | 代表左右表達式任意匹配一個 (...) 被括起來的表達式將作為分組 (?P<name>...)分組,除了原有的編號外再指定一個額外的別名 \<number>引用編號為<number>的分組匹配到的字符串 (?P=name)應用別名為<name>的分組匹配的字符串 ********************************* 特殊構造 --------------------------------- (?..) (..)的部分組版本 (?iLmsux) iLmsux的每個字符代表一個匹配模式,只能用於正則表達式的開頭 (?#...) #之後的內容將作為註釋被忽略 (?=...) 之後的字符串內容需要匹配表達式才能匹配成功 (?!...) (?<=..) (?<!..) (?(id/name)yes-pattern|no-pattern) ********************************* ---------------------------------------------------- 貪婪模式與非貪婪模式 Python裏數量詞默認是貪婪的,總是嘗試匹配盡可能多的字符;非貪婪的則相反,總是嘗試匹配盡可能少的字符 例如:正則表達式"ab*"如果用於查找"abbbc",將找到"abbb"。而如果使用非貪婪的數量詞"ab*?",將找到"a" ---------------------------------------------------- match 只能從起始位置匹配 search 在整個字符串去匹配 findall函數返回的總是正則表達式在字符串中所有匹配結果的列表 re.compile()函數,將正則表達式的字符串形式編譯為Pattern實例,然後使用Pattern實例處理文本並獲得匹配結果(一個Match實例) groups 只獲取組裏的字符 group 匹配所有符合的正則的字符 ---------------------------------------------------- # 將正則表達式編譯成Pattern對象 pattern = re.compile(r‘world‘) # 使用search()查找匹配的子串,不存在能匹配的子串時將返回None # 這個例子中使用match()無法成功匹配 match = pattern.search(‘hello world!‘) print (match.group())
Python學習筆記之函數與正則