python&pymysql

???????????????????????????????????????????一? python基礎(chǔ)

1.Python 中的字符串有兩種索引方式,從左往右以 0 開始,從右往左以 -1 開始。

? ??Python 沒有單獨的字符類型症歇,一個字符就是長度為 1 的字符串郎笆。

????字符串的截取的語法格式如下:變量[頭下標:尾下標:步長]? 尾下標不可取

? ? str= ' chenrui '

? ? print(str[1:-1])? ? ? 輸出 henru

? ? print(str*2)? ? ? ? ? ? 輸出chenruichenrui

? ? print(str+'你好')? ? 連接字符串 輸出chenrui你好

2.?print 默認輸出是換行的谭梗,如果要實現(xiàn)不換行需要在變量末尾加上?end=''

? ? print('chen', end='')

? ? print('rui')? ??

輸出chenrui

3.

不可變數(shù)據(jù)(3 個):Number(數(shù)字)、String(字符串)宛蚓、Tuple(元組)激捏;

比如str='chen'

? ? ? ? str[1]='m'? ? ?是錯誤的,不能重新復(fù)制

可變數(shù)據(jù)(3 個):List(列表)凄吏、Dictionary(字典)远舅、Set(集合)。


4.list列表 可變元素痕钢,寫在[ ]內(nèi)

可以存放不同類型元素图柏,可以切片,分割任连。與字符串不同的是蚤吹,列表可以更改元素

a=[123 , 'cccc' , 2.7 , 19 , 'a' ]


(1)切片

c=a[1:4:2]? ? ? ? #c=['cccc' , 19]? ?

(2)判斷元素在不在里面

>>> 123 in a

? ? ? ? True

? ? (3)長度

>>>? len(a)

? ? ? ? 5

(4)? ?list.append(x)? 在列表尾部插入x? ??

(5)? list.insert(x,y)? ? ?在list[x]處插入y

(6)? ?list.count(x)? ? ? ? 統(tǒng)計列表中元素x出現(xiàn)次數(shù)

(7)list.remove(x)? ?移除列表中指定值

(8)list.reverse()? ?反轉(zhuǎn)列表

(9)list.extend(b)? ?將列表b添加到尾部

(10)list.sort()? ?列表由小到大排序

(11)del? list[1]? 刪除該元素

(12)棧與隊列

list.pop([index=-1])? pop函數(shù)默認彈出最后一個元素 且list也會減少一個元素

現(xiàn)有列表a[1,2,3,4,5,6]

要實現(xiàn)棧 就一直用 a.pop()? , a.apend(x)

要實現(xiàn)隊列 就一直用 a.pop(0)? ,? a.apend(x)

(13)列表推導(dǎo)式由包含一個表達式的中括號組成随抠,表達式后面跟隨一個 for 子句如蚜,之后可以有零或多個 for 或 if 子句沽翔。結(jié)果是一個列表,由表達式依據(jù)其后面的 for 和 if 子句上下文計算而來的結(jié)果構(gòu)成。

? ? ? ?>>> list?= [x**2 for x in range(10)]? ? #? list =? [0, 1, 4, 9, .....81]

? ? ? ? ?x ** 2就是表達式? 將表達式后面的語句的計算結(jié)果依次帶入表達式毛仪,生成一個列表

? ? ? ??>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]

????????????????[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

????????????(x,y)是表達式?



5.tuple? 元組? 不可變元素 寫在()內(nèi) 用逗號分隔

a=(123 , 'chen' , 'aa' )

a[1: ]? ? ?# ('chen' , 'aa')

a=(123)? # type(a)==int

a=(123,)? # type(a) == tuple


6. set 集合? 無序 無重復(fù)元素 {}或set()創(chuàng)建

(1)消除重復(fù)

>>> a = {1,3,4,1,3,2}

>>> print(a)

? ? ? ? {1,3,4,2}? ? 重復(fù)元素被消除

或者用set()函數(shù)創(chuàng)建

>>> a = set('chenrui')? ? ?# a={'c', 'h', 'e', 'n', 'r', 'u', 'i'}

>>> a = set( ['chen', 'rui', 123,789] )? # a={'chen', 'rui', 123,789}

(2)交? 并 差 對稱差集

>>> a = set('abracadabra')

>>> b = set('alacazam')

>>> a? ? ? ? ? ? # a 去重后的字母{'a', 'r', 'b', 'c', 'd'}

>>> a - b? ?????# 差 {'r', 'd', 'b'}

>>> a | b? ? ? ?# 聯(lián)合? {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

>>> a & b? ? ? #交{'a', 'c'}

>>> a ^ b? ? ? ?# 對稱差集? 存在于 a 或 b 但不同時存在的字母{'r', 'd', 'b', 'm', 'z', 'l'}

(3)集合推導(dǎo)式?

? ?a = { x for x in 'abcdefg' if x not in 'abcd'}

# a = {'e', 'f', 'g'}

(4)各種方法

http://www.runoob.com/python3/python3-set.html


7.字典? 鍵唯一 但一個鍵可以有多個值 (通過列表實現(xiàn))

a = {'chen' : 'rui' , 'asc':' asd', 'cccc':'wqe'}

a= {'chen':['asd', 'asdqwq', '123'], 'rui':'ee', 'man':'bbb'}

(1)用dict()從包含鍵值對的元組中創(chuàng)建

a = dict( ( ('chen', 'rui'), ('asd', 'cx'),('asdqqq','wqezz') ) )

則a = {'chen':'rui', 'asd':'cx', 'asdqqq':'wqezz'}

(2)? del刪除

? del a['chen']


(3)?遍歷一個字典,使用字典的?items()?方法州刽。

? ??>>> data

{'Kushal': 'Fedora', 'Jace': 'Mac', 'kart_': 'Debian', 'parthan': 'Ubuntu'}

>>> for x, y in data.items():

? ? ?????????????print("{} uses {}".format(x, y))

(4)setdefault(key, default)? 與 get(key, default)

a.setdefault('name', 0)? #如果a沒有'name'這個鍵辕狰,則創(chuàng)建該鍵矿酵,并且值為0. 否則返回name鍵的值

a.get('name', 0)? ?#有name鍵 返回對應(yīng)的值。否則返回0

(5)zip() 函數(shù)

zip()?函數(shù)用于將可迭代的對象作為參數(shù)背犯,將對象中對應(yīng)的元素打包成一個個元組坏瘩,然后返回由這些元組組成的對象,這樣做的好處是節(jié)約了不少的內(nèi)存漠魏。

我們可以使用 list() 轉(zhuǎn)換來輸出列表倔矾。

如果各個迭代器的元素個數(shù)不一致,則返回列表長度與最短的對象相同柱锹,利用?*?號操作符哪自,可以將元組解壓為列表。

>>>a = [1,2,3]

>>> b = [4,5,6]

>>> c = [4,5,6,7,8]

>>> zipped = zip(a,b)? ? # 返回一個對象

>>> zipped<zip object at 0x103abc288>

>>> list(zipped)????????? # list() 轉(zhuǎn)換為列表[(1, 4), (2, 5), (3, 6)]

>>> list(zip(a,c))? ? ? ? ? ? ? # 元素個數(shù)與最短的列表一致[(1, 4), (2, 5), (3, 6)]

>>> list(zip(a,b,c))? ? #? ? [(1,4,4), (2,5,5), (3,6,6)]

>>> a1, a2 = zip(*zip(a,b))? ? ? ? ? # 與 zip 相反禁熏,zip(*) 可理解為解壓壤巷,返回二維矩陣式

>>> list(a1)

????????[1, 2, 3]

>>> list(a2)

????????[4, 5, 6]


需要同時遍歷兩個序列類型,你可以使用?zip()?函數(shù)瞧毙。

>>>a= ['Pradeepto','Kushal']

>>>b= ['OpenSUSE','Fedora']

>>>for x, y in zip(a, b):

? ? ? ? ? ? ? print("{} uses {}".format(x, y))

輸出 Pradeepto uses OpenSUSE

? ? ?Kushal uses Fedora


8. *用于賦值

利用 * 表達式獲取單個變量中的多個元素胧华,只要它的解釋沒有歧義即可。* 獲取的值默認為 list

>>> a, b, *c =0,1,2,3

>>> a

0

>>> b

1

>>> c

[2,3]



9.? str.format()? ?利用{}和:

數(shù)字格式化

print( ' {:7.2f } '.format(3.141595) )? ? ?#3.14 后面3個空格? 注:小數(shù)點也占一位

print( ' {this is a? {:x>4d}} '.format(10) ')? ? # this is a xx10

print( ' {this is a? {:x<4d}} '.format(10) ' )? ? # this is a 10xx

可以傳入?yún)?shù)

day,name=12,'chen'

print(' today is {} , my name is {} '.format(day,name) )

也可以不格式化

print( ' x=? ' , x)

10.邏輯運算符? and or not

邏輯運算符?and?和?or?也稱作短路運算符:它們的參數(shù)從左向右解析宙彪,一旦結(jié)果可以確定就停止矩动。例如,如果?A?和?C?為真而?B?為假释漆,A and B and C?不會解析?C?悲没。作用于一個普通的非邏輯值時,短路運算符的返回值通常是能夠最先確定結(jié)果的那個操作數(shù)男图。

5 or 4? 返回5

3 and 0 and 1? ?返回0?

not?具有最高的優(yōu)先級示姿,or?優(yōu)先級最低,所以?A and not B or C?等于?(A and (notB)) or C

11.? if? for? while

(1) if

if :

? ? pass

elif:

? ? pass

else:

(2)for 與 range()與for? else

? ? ? ?a=[123 , 'asd' , 456]

? ? ? ? for x in a:

? ? ? ? ? ? ? ?print (x)


range(5)產(chǎn)生一個0-4的對象逊笆,不是列表

>>> a = range(5)

>>>? a

? ? ? ? range(5)

>>> b = list(a)

>>> b

? ? ? ? [0,1,2,3,4]

range(1,5,2)產(chǎn)生一個1-4的數(shù)列且步長為2? ? 即1 , 3

? ? ? ? for? x? in? range(len(a)) :

? ? ? ? ? ? ? ? ????print(a[x])

在循環(huán)后面使用可選的?else?語句栈戳。它將會在循環(huán)完畢后執(zhí)行,除非有?break?語句終止了循環(huán)难裆∽犹矗可以用來檢測for循環(huán)是否正常執(zhí)行完

for i in range(0, 5):?

????????????????print(i)

else:

????????????print("Bye bye")? ? ? ?

0?

1?

2?

3?

4?

Bye Bye?


(3)while? ??

? ? ?while n<10:

? ? ? ? ? ? ? ?pass

? ? ? ? while ...else ...用法與for相同


12.字符串

(1)str.split(str,num)? ?返回字符串被分割后的列表

str --分割依據(jù),默認為空格? ? num --分割次數(shù)

txt = "Google#Runoob#Taobao#Facebook"? ? ? ? ? ? ? ?

x = txt.split("#", 1)?????????????????# 第二個參數(shù)為 1差牛,返回兩個參數(shù)列表??['Google', 'Runoob#Taobao#Facebook']


(2)str.strip(char)? 剝離字符串中的指定字符 默認為首尾的空格和換行符

a = 'abcdefg...'

a.strip('bcd.')? ?#剝離字符串中的 'b', 'c', 'd', '.'字符

a = 'aefg'??


(3)str.find(char)? ? ?找到第一個匹配的子字符串命锄,沒有找到則返回 -1。

s = "faulty for a reason"

?s.find("for")

7

s.find("fora")

-1

(4)%格式化操作符 與c類似 多了括號和%

name = 'chen'

print('my name is %s? and my age is %d' % (name,16))


13.函數(shù)

(1)def函數(shù)名(參數(shù)):

? ? ????????????????語句1? ??

????????????????????語句2

(2)global? 關(guān)鍵字告訴編譯器后面的變量是全局的 即使在內(nèi)部改動也會影響外部的值

def change():

? ? global a

? ? a = 90

? ? print(a)

a = 9

print("Before the function call ", a)? ? #a=9

print("inside change function", end=' ')? ?

change()? ?#? a=90

print("After the function call ", a)? ?# a= 90

如果沒有g(shù)lobal 函數(shù)內(nèi)的a是局部變量偏化,與外面的a沒有關(guān)系


(3)默認參數(shù)值

def? f(a , b=-99):

? ? ? ? ? ? pass

注:1. 具有默認值的參數(shù)后面不能再有普通參數(shù)脐恩,比如?f(a,b=90,c)?就是錯誤的

? ? ? ? 2.?默認值只被賦值一次,因此如果默認值是任何可變對象時會有所不同侦讨,比如列表驶冒、字典或大多數(shù)類的實例苟翻。例如,下面的函數(shù)在后續(xù)調(diào)用過程中會累積(前面)傳給它的參數(shù):

? ??????deff(a, data=[]):? #默認參數(shù)是列表 可變的骗污。

????????????????data.append(a)

????????????????return data

????????print(f(1))

????????[1]

? ? ? ?print(f(2))? ?#此時調(diào)用f(), data的默認值為[1]

? ? ? ?[1, 2]

? ? ? ?print(f(3))

? ? ? ?[1, 2, 3]

要避免這個問題崇猫,你可以像下面這樣:

def f(a, data=None):? ? #None不是可變對象,所以作為默認值時需忿,data的值不會積累诅炉。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#即下次調(diào)用f時,data值還是None屋厘。設(shè)置為data=123也是一樣的效果涕烧。123是字面量,不? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#可變汗洒,值不會積累

? ? ? ? if data is None:? ? ??

????????data = []

? ? ? ? data.append(a)

? ? ? ? return data

print(f(1))? #? ?[1]

print(f(2))? #? ?[2]


(4)關(guān)鍵字參數(shù)


可變參數(shù)允許你傳入0個或任意個參數(shù)议纯,這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple,而關(guān)鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict溢谤。請看示例:

def person(name, age, **kw):

????print('name:', name,'age:', age,'other:', kw)

函數(shù)person除了必選參數(shù)name和age外瞻凤,還接受關(guān)鍵字參數(shù)kw,前面兩個**。在調(diào)用該函數(shù)時世杀,可以只傳入必選參數(shù):

>>> person('Michael',30)

? 輸出? name:Michaelage:30other:{}

也可以傳入任意個數(shù)的關(guān)鍵字參數(shù):

>>> person('Bob',35, city='Beijing')? ? # key=value? ? ? 調(diào)用時若key,value均為字符串key不能加引號阀参,value要加

????name:Bob age:35 other:{'city':'Beijing'}

>>> person('Adam',45, gender='M', job='Engineer')

????name:Adam age:45 other:{'gender':'M','job':'Engineer'}

關(guān)鍵字參數(shù)有什么用?它可以擴展函數(shù)的功能玫坛。比如结笨,在person函數(shù)里包晰,我們保證能接收到name和age這兩個參數(shù)湿镀,但是,如果調(diào)用者愿意提供更多的參數(shù)伐憾,我們也能收到勉痴。試想你正在做一個用戶注冊的功能,除了用戶名和年齡是必填項外树肃,其他都是可選項蒸矛,利用關(guān)鍵字參數(shù)來定義這個函數(shù)就能滿足注冊的需求。

和可變參數(shù)類似胸嘴,也可以先組裝出一個dict雏掠,然后,把該dict轉(zhuǎn)換為關(guān)鍵字參數(shù)傳進去:

>>> extra = {'city':'Beijing','job':'Engineer'}? ?#先組裝一個dict

>>> person('Jack',24, city=extra['city'], job=extra['job'])

????????name:Jack age:24 other:{'city':'Beijing','job':'Engineer'}

當然劣像,上面復(fù)雜的調(diào)用可以用簡化的寫法:

>>> extra = {'city':'Beijing','job':'Engineer'}

>>> person('Jack',24, **extra)

????????name:Jack age:24 other:{'city':'Beijing','job':'Engineer'}

**extra表示把extra這個dict的所有key-value用關(guān)鍵字參數(shù)傳入到函數(shù)的**kw參數(shù)乡话,kw將獲得一個dict,注意kw獲得的dict是extra的一份拷貝耳奕,對kw的改動不會影響到函數(shù)外的extra绑青。



(5)可變參數(shù)(列表參數(shù))



(7)強制關(guān)鍵字參數(shù)

defdog(name, host, *, age):

????????print(name, host, age)

參數(shù)中有一個 “*” 號诬像,在該符號之后的所有參數(shù)(可一至多個)均被稱為強制關(guān)鍵字參數(shù),如果按照位置參數(shù)的方式對這些參數(shù)傳值:

dog('dobi','xuzhoufeng',2)

????????TypeError: dog() takes 2 positional arguments but 3 were given

就會出現(xiàn)?TypeError闸婴,正確的傳值形式為:

dog('dobi', 'xuzhoufeng', age =2)?

????????dobi xuzhoufeng 2

也即這里的age?必須使用關(guān)鍵字參數(shù)的形式進行傳值坏挠。


(8)map函數(shù)

map?是一個在 Python 里非常有用的高階函數(shù)。它接受一個函數(shù)和一個序列(迭代器)作為輸入邪乍,然后對序列(迭代器)的每一個值應(yīng)用這個函數(shù)降狠,返回一個迭代器,不是現(xiàn)成的列表庇楞,其包含應(yīng)用函數(shù)后的結(jié)果喊熟。

舉例:

>>> lst = [1,2,3,4,5]

>>> def square(num):

? ? ? ? ????returnnum * num

>>> print(list(map(square, lst)))

????????[1,4,9,16,25]

又:

list(map(lambda x,y:x+y, [1,2,3,4], [1,2,3,4]))

結(jié)果是 [2,4,6,8]

(9)? enumerate()函數(shù)?

用于將一個可遍歷的數(shù)據(jù)對象(如列表、元組或字符串)組合為一個索引序列姐刁,同時列出數(shù)據(jù)和數(shù)據(jù)下標芥牌,一般用在 for 循環(huán)當中。

list = ['Spring', 'Summer', 'Fall', 'Winter']

for i, x in enumerate(list):

? ? print(i, x)

輸出:

0 Spring

1 Summer

2 Fall

3 Winter


14.文件

(1)open()? close()

r --只讀

r+ --打開一個文件用于讀寫聂使。文件指針將會放在文件的開頭

w --以寫入模式打開壁拉,如果文件存在將會刪除里面的所有內(nèi)容,然后打開這個文件進行寫入

w+ --打開一個文件用于讀寫柏靶。如果該文件已存在則打開文件弃理,并從開頭開始編輯,即原有內(nèi)容會被刪除屎蜓。如果該? ? ? ? ? ? 文件不存在痘昌,創(chuàng)建新文件

a --以追加模式打開,寫入到文件中的任何數(shù)據(jù)將自動添加到末尾

a+ --打開一個文件用于讀寫炬转。如果該文件已存在辆苔,文件指針將會放在文件的結(jié)尾。文件打開時會是追加模式扼劈。如? ? ? ? ? ? 果該文件不存在驻啤,創(chuàng)建新文件用于讀寫。

file_object = open('filename'[,'r/w/a'])? #open()返回一個對象荐吵,第一個參數(shù)為文件名骑冗,第二個默認為r。

file_object.close()? ? ?#用完一定要關(guān)閉

(2)讀取

file_object.read([size])? #默認讀完整個文件 返回的是字符串

file_object.readline()? ?#讀一行

file_object.readlines()? #讀所有行 以列表形式保存

比如 file_object = open('sample.txt')

>>> file_object.readlines()

['I love Python\n', 'I love shiyanlou\n']

也可以循環(huán)的方式讀

for x in file_object:

? ? print(x, end='')? ?

輸出 :

I love Python

I love shiyanlou

注:可以把讀的結(jié)果給一變量? s = file_object.read()? ?print(s)


for i in file_object :? ? #? ?i 此時是一行一行的字符串? ??

? ? ? ? ? ? ? pass


for i in file_object.read() :? ? ?#? i? 此時是一個一個的字符

? ? ? ? ? ? ? ?pass

(3)write()? 寫入

file_object = open('test.txt','w')??

file_object.write('this is a test\n')? #? 'w'模式下會清空文件再寫


(4)? sys模塊中的argv? ?sys.argv[]

用于在命令行模式中獲取參數(shù)

假設(shè)sample.py 文件用于文件的拷貝

```

import sys

file1 = open(sys.argv[1])? ?#sys.argv[1]具體是什么要取決于命令傳入的參數(shù)

s = file1.read()

file2 = open(sys.argv[2], 'w')

file2.write(s)

```

$ python3 sample.py newfile.py? ?#此處即為命令行命令? 第一個參數(shù)永遠是文件路徑及文件名第二個參數(shù)是? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#sample.py? 第三個是newfile.py

則sys.argv[0] = 文件路徑及文件名

? ? sys.argv[1] = sample.py

? ?sys.argv[2] = newfile.py


(5)with語句

with?語句處理文件對象先煎,它會在文件用完后會自動關(guān)閉贼涩,就算發(fā)生異常也沒關(guān)系。它是 try-finally 塊的簡寫:

>>>?

with open('sample.txt') as fobj:

?????????for line in fobj:

?????????????print(line, end ='')

輸出:

I love PythonI?

love shiyanlou


15.異常? ? 一定要看這篇博客https://www.cnblogs.com/wj-1314/p/8707804.html

注:博客中沒有提到的如下

(1)try語句執(zhí)行遇到錯誤會拋出給except捕獲并保存當前pc薯蝎,若捕獲失敗遥倦,則程序終止。捕獲成功良风,執(zhí)行該except下的語句谊迄,執(zhí)行完后從原pc繼續(xù)執(zhí)行try語句

異常處理是為了在程序運行發(fā)生錯誤時不讓程序終止運行闷供,而是拋出一個自定義的語句來提醒用戶發(fā)生了錯誤,

except用來捕捉程序運行時發(fā)生的錯誤统诺。如果發(fā)生的錯誤沒被except捕捉歪脏,則程序會直接結(jié)束,這樣不好粮呢。

while True:

????try:

????????num =int(input('輸入一個數(shù):'))

????????num =5/num

????????print(num)

? ? except ZeroDivisionError:? ? ? ?

????????print('輸入數(shù)字不能為0')

#當用戶輸入0婿失,自然會產(chǎn)生異常,即ZeroDivisionError啄寡,若不用except捕捉豪硅,則直接回結(jié)束程序,不會給用戶第二次輸入的機會

(2)else語句

如果使用這個子句挺物,那么必須放在所有的except子句之后懒浮。這個子句將在try子句沒有發(fā)生任何異常的時候執(zhí)行。例如:

for arg in sys.argv[1:]:

? ? try:

? ? ? ? f = open(arg, 'r')? ??

????except IOError:

? ? ? ? print('cannot open', arg)? ??

????else:

? ? ? ? print(arg, 'has', len(f.readlines()), 'lines')? ? ? ??

f.close()

使用 else 子句比把所有的語句都放在 try 子句里面要好识藤,這樣可以避免一些意想不到的砚著、而except又沒有捕獲的異常。

(3)Exception是所有 NameError的基類


try :

? ? ? ? .....

except Exception:? ? ? ? ?捕捉Exception時痴昧,會捕捉所有的異常 等同于只寫except

? ? ? ? .....

(4) raise?

try:

????raise?TypeError('類型錯誤')? ? #主動拋出一個TypeError型異常稽穆,是Exception的子類

except?Exception as e:? ? ? ? #由于是Exception是基類異常,所以會捕獲所有try拋出的異常

????print(e)? ? ? ? ??

輸出:

'類型錯誤'

(5) except NameError as e:

? ? ? ? ? ? ? ? ......

e是NameError類的實例赶撰,與? except NameError:? ....? 有區(qū)別


(6)自定義異常類

class MyError(Exception):

????def __init__(self,value):

????????self.value = value

????def __str__(self):? ? #__str__魔法方法 會在實例被要求print()的時候被調(diào)用

????????return self.value

try:

????raise MyError('my error')? ? ?#self.value = 'my error'

except MyError as e:? ? # e是MyError類的實例

????print(e)? ? ?#此處print()調(diào)用了e的__str__魔法方法


(7)在真實場景的應(yīng)用程序中舌镶,finally?子句用于釋放外部資源(文件或網(wǎng)絡(luò)連接之類的),無論它們的使用過程中是否出錯豪娜。


16.類

(1)語法

class nameoftheclass(parent_class):

? ? statement1? ??

????statement2? ??

????statement3

(2)__init__(self[,v1[,v2...])

類的實例化操作會自動為新創(chuàng)建的類實例調(diào)用?__init__()?方法

classComplex:

?????def__init__(self, realpart, imagpart):

? ? ? ? ? ?self.r = realpart

? ? ? ? ? ?self.i = imagpart

>>> x = Complex(3.0, -4.5)

>>> x.r, x.i

(3.0, -4.5)

(3)self

self代表類的實例餐胀,即當前對象的地址,而非類侵歇。類的方法與普通的函數(shù)只有一個特別的區(qū)別——它們必須有一個額外的第一個參數(shù)名稱, 按照慣例它的名稱是 self骂澄。

(4) 子類調(diào)用父類的方法的兩種形式

如下代碼中的???處進行父類方法調(diào)用

class Person:

? ? def __init__(self, name):

? ? ? ? ? ? self.name = name

? ? def ps(self):

? ? ? ? ? ? print('my name is {}'.format(self.name))


class Student(Person):

? ? ? ? def __init__(self,name,age,sex):

? ? ? ? ? ? ? ? ???

? ? ? ? ? ? ? ? self.age = age

? ? ? ? ? ? ? ? self.sex = sex

? ? ? ? ?def ps1(self):

? ? ? ? ? ? ? ? print('my name is {} , my age is {}, my sex is {}'.format(self.name,self.age,self.sex))


  第一種是直接法吓蘑。使用父類名稱直接調(diào)用惕虑,形如?parent_class.parent_attribute(self),對應(yīng)例程即語句:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Person.__init__(self,name)? ?#一定要有self

? ? ? 第二種是通過super函數(shù)磨镶,形如 super(child_class, child_object).parent_attribute(arg)溃蔫。第一個參數(shù)表示調(diào)用父類的起始處,第二個參數(shù)表示類實例(一般使用self)琳猫,父類方法的參數(shù)只有self時伟叛,參數(shù)args不用寫。此外脐嫂,類內(nèi)部使用時统刮,child_class, child_object也可省略紊遵。對應(yīng)例程:

super(Student,self).__init__(name)

或者:

super().__init__(name)

在類外面也可使用super函數(shù),但是要有child_class, child_object兩個參數(shù)侥蒙。


(5)裝飾器??https://www.zhihu.com/question/26930016

首先明確? ?func與func()

函數(shù)只寫函數(shù)名表示函數(shù)對象本身暗膜,加上括號表示執(zhí)行這個函數(shù)

很多時候,你需要對一段代碼加上權(quán)限認證鞭衩,加上各種功能学搜;但是又不想,或者不方便破壞原有代碼论衍,則可以用裝飾器去擴展它瑞佩。比如play()函數(shù)默認播放動畫片,現(xiàn)在規(guī)定年齡范圍內(nèi)的才能看坯台,可以不用改動play()函數(shù)炬丸,使用裝飾器


userAge=40


def canYou(func):

????????def decorator(*args,**kwargs):

????????????if userAge > 1 and userAge < 10:

????????????????return func(*args,**kwargs)? ?#func加了括號,說明返回的是對這個函數(shù)的執(zhí)行

? ? ? ? ? ? print('你的年齡不符合要求蜒蕾,不能看')

? ? ? ? ?return decorator? ? ? ?#返回的是函數(shù)對象decorator,相當于一個變量御雕,沒有執(zhí)行這個函數(shù)


@canYou? ? # @為語法糖? 實際為 play = canYou(play),在函數(shù)定義后執(zhí)行。? 執(zhí)行后滥搭,play指向了decorator這個對

? ? ? ? ? ? ? ? ? ? #象酸纲。此時的play不再是原來的單一功能的函數(shù),而是一個有了年齡判斷功能的新函數(shù)

def play():

? ? print('開始播放動畫片 《喜洋洋和灰太狼》')


play()

# 輸出

# 你的年齡不符合要求瑟匆,不能看

# 你可以修改上面的 userAge 為9 試試



Python連接數(shù)據(jù)庫的步驟

1)建立數(shù)據(jù)庫連接? ? ? ? ? ?(db = pymysql.connect(......))

2)創(chuàng)建游標對象? ? ? ? ? ? ? ?(c = db.cursor())

3)游標方法? ? ? ? ? ? ? ? ? ? ? ?(c.execute(sql語句))

4)提交到數(shù)據(jù)庫? ? ? ? ? ? ? ? (db.commit())

5)關(guān)閉游標對象? ? ? ? ? ? ? ? ?(c.close())

6)關(guān)閉數(shù)據(jù)庫? ? ? ? ? ? ? ? ? ? ?(db.close())


connect對象

? ? ? ? ? ? ? 1)db=pymysql.connect(參數(shù)列表)

? ? ? ? ? ? ? ? ? ? 參數(shù)列表有:

? ? ? ? ? ? ? ? ? ? 1. host : 主機地址闽坡,本地地址 localhost

? ? ? ? ? ? ? ? ? ? 2. port : 端口號 ,默認為3306

? ? ? ? ? ? ? ? ? ? 3. user : 用戶名

? ? ? ? ? ? ? ? ? ? 4. password : 密碼

? ? ? ? ? ? ? ? ? ? 5. database : 要連接到的庫

? ? ? ? ? ? ? ? ? ? 6. charset : 編碼方式愁溜,推薦使用 utf8

? ? ? ? ? ? ? 2)數(shù)據(jù)庫連接對象(db)的方法

? ? ? ? ? ? ? ? ? ?1.db.close() ? ?關(guān)閉連接

? ? ? ? ? ? ? ? ? ?2.db.commit() ? ?提交到數(shù)據(jù)庫執(zhí)行

? ? ? ? ? ? ? ? ? ?3.db.rollback() ?回滾

? ? ? ? ? ? ? ? ? ?4.db.cursor() ? ?返回游標對象疾嗅,用于具體執(zhí)行

? ? ? ? ? ? ? ? ? ?SQL命令

? ? ? ? ? ? ? 3)游標對象(cur)的方法

? ? ? ? ? ? ? ? ? ?1.cur.execute(SQL命令,[列表]) ? 執(zhí)行SQL命令

? ? ? ? ? ? ? ? ? ?2.cur.close() ? ? ? ? ? ?關(guān)閉游標對象

? ? ? ? ? ? ? ? ? ?3.cur.fetchone() ?獲取查詢結(jié)果集的第一條數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【獲取結(jié)果為一個元組】

? ? ? ? ? ? ? ? ? ?4.cur.fetchmany(n) ?獲取查詢結(jié)果集的第n條數(shù)據(jù)

? ? ? ? ? ? ? ? ? ? ? 【獲取結(jié)果為一個元組 如:((記錄1),(記錄2))】

? ? ? ? ? ? ? ? ? ?5.cur.fetchall() ? ?獲取所有記錄(結(jié)果為元組)

? ? ? ? ? ? ? ? ? ?注意:

? ? ? ? ? ? ? ? ? ?fetchone , fetchmany , fetchall 均獲取一條記錄少一條記錄

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市冕象,隨后出現(xiàn)的幾起案子代承,更是在濱河造成了極大的恐慌,老刑警劉巖渐扮,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件论悴,死亡現(xiàn)場離奇詭異,居然都是意外死亡墓律,警方通過查閱死者的電腦和手機膀估,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耻讽,“玉大人察纯,你說我怎么就攤上這事。” “怎么了饼记?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵香伴,是天一觀的道長。 經(jīng)常有香客問我具则,道長瞒窒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任乡洼,我火速辦了婚禮崇裁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘束昵。我一直安慰自己拔稳,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布锹雏。 她就那樣靜靜地躺著巴比,像睡著了一般。 火紅的嫁衣襯著肌膚如雪礁遵。 梳的紋絲不亂的頭發(fā)上轻绞,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音佣耐,去河邊找鬼政勃。 笑死,一個胖子當著我的面吹牛兼砖,可吹牛的內(nèi)容都是我干的奸远。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼讽挟,長吁一口氣:“原來是場噩夢啊……” “哼懒叛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起耽梅,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤薛窥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后眼姐,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诅迷,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年妥凳,在試婚紗的時候發(fā)現(xiàn)自己被綠了竟贯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡逝钥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情艘款,我是刑警寧澤持际,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站哗咆,受9級特大地震影響蜘欲,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晌柬,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一姥份、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧年碘,春花似錦澈歉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涤久,卻和暖如春涡尘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响迂。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工考抄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蔗彤。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓座泳,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幕与。 傳聞我的和親對象是個殘疾皇子挑势,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容

  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,750評論 0 10
  • 心愿2016閱讀 667評論 0 0
  • 數(shù)據(jù)庫編程概述啦鸣、pymysql基本操作方法總結(jié)潮饱、參數(shù)化列表防止SQL注入總結(jié) 2.6 Python數(shù)據(jù)庫編程 學習...
    Cestine閱讀 1,539評論 0 2
  • 剛開始,看到是開心麻花制作的電影诫给,就抱著一種看喜劇片的心態(tài)去觀看香拉,沒想到,后來笑著笑著便沉默了中狂。 ...
    _起點_閱讀 256評論 0 0
  • 在醫(yī)院實習凫碌,平時的范圍只有兩點一線。趁著夕陽拍了幾張胃榕,拍完后用手機自帶的光效改變修改了一下盛险。就是改了一些曝光度,飽...
    萌萌的土豆閱讀 262評論 1 1