1. 程式人生 > >Python學習筆記之函數與正則

Python學習筆記之函數與正則

地址 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__
-------------------------------
print
result is : "兩數相加" 2.__name__ 返回函數名 def doc_value(x): ------------------------------- doc_value.__name__ ------------------------------- print result is: "doc_value" 3.__module__返回函數所在模塊名字 def doc_value(x): ------------------------------- doc_value.__module__ ------------------------------- print
result is: "__main__" maim 代表主函數 4.func_defaults 返回一個包含默認參數值的元祖 5.func_dicts 返回支持任意函數屬性的命名空間 6.func_globals 返回一個包含函數全局變量的字典應用 7.func_closure 返回一個胞體元祖,其中胞體包含了函數自由變量的綁定 ********************************************** 函數調用函數 1.默認函數 :這允許用戶為函數的參數定義一些默認值。 這種情況下,可以以更少的參數來調用該函數,而函數調用時未提供的參數,Python會使用默認提供的值作為這些參數值 def default(x=22.關鍵字函數 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(rworld) 
 
# 使用search()查找匹配的子串,不存在能匹配的子串時將返回None 
# 這個例子中使用match()無法成功匹配 
match = pattern.search(hello world!) 
 
print (match.group()) 

Python學習筆記之函數與正則