午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

某培訓(xùn)學(xué)員總結(jié)Python入門(mén)知識(shí)合集,厚著臉皮討要過(guò)來(lái)分享了!

 靜幻堂 2018-08-22
空手憶歲月 2018-08-22 16:13:21
 

暑假?zèng)]回家 ,一不小心培訓(xùn)了python,反正免費(fèi)的不聽(tīng)白不聽(tīng),總比呆在寢室無(wú)聊好的多,慶幸的是堅(jiān)持下來(lái)了,現(xiàn)在回想起來(lái)雖然學(xué)習(xí)時(shí)間很短,但確實(shí)感觸蠻大的,因此寫(xiě)這篇文章總結(jié)一下。第一節(jié)課就被授課者嚇到了,python處理TB級(jí)的數(shù)據(jù),是Hadoopj級(jí)別的,而擁有者能力的語(yǔ)言只有R,Ruby等少數(shù)語(yǔ)言,以后用幾個(gè)庫(kù)Scipy,Numpy,Matplotlib,可以做數(shù)值計(jì)算等,Matlab的絕大部分功能都可以用python寫(xiě)出來(lái) ,與MATLAB相比,Python是一門(mén)更易學(xué)、更嚴(yán)謹(jǐn)?shù)某绦蛟O(shè)計(jì)語(yǔ)言。它能讓用戶編寫(xiě)出更易讀、易維護(hù)的代碼。能不能別再嚇我的,我的小心臟受不了~~這里主要是以經(jīng)典的python為例,即python2.x,另外聽(tīng)說(shuō)EVE主要是用python寫(xiě)的~~,不得不說(shuō)有點(diǎn)難以置性。

首先接觸python就被它的另類所嚇到了,啥,簡(jiǎn)單粗暴沒(méi)括號(hào),嚇?biāo)牢伊?。那怎么玩啊,在python中沒(méi)有分號(hào),單引號(hào)和雙引號(hào)是不區(qū)分的,不像C中單個(gè)字符用單引號(hào),字符串用雙引號(hào)。python的代碼段是靠縮進(jìn)來(lái)表示的,不能用大括號(hào)。通過(guò)四個(gè)空格符或一個(gè)Tab鍵即可,不過(guò)在函數(shù)開(kāi)頭后應(yīng)有冒號(hào),來(lái)表示下面的代碼是其內(nèi)部的內(nèi)容。其次有些條件語(yǔ)句中的括號(hào)是可以省略的,如: if a>b:(Tab)...當(dāng)然加了括號(hào)也正確。而且不用寫(xiě)main函數(shù),也不用導(dǎo)入isotream或是stdio.h之類的庫(kù)。

 

Python 簡(jiǎn)介

1.免費(fèi)開(kāi)源

2.簡(jiǎn)單易學(xué)

3.解釋性語(yǔ)言,與C/C++等編譯性語(yǔ)言不同

4. 可移植,這個(gè)估計(jì)是流行起來(lái)的很重要的一個(gè)因素吧。python的程序都可以無(wú)需任何修改地移植到現(xiàn)今主流的系統(tǒng)平臺(tái)上。包括Windows,Linux,Macintosh,Solaris,OS/2,Android等等

5.同是支持面向?qū)ο蠛兔嫦蜻^(guò)程編程,類似C++。至于其面向?qū)ο蟮木幊?,python還有世界上最強(qiáng)大的類庫(kù)。

6.嵌入性:可以作為腳本語(yǔ)言嵌入到其他程序中,比如C/C++

7.可擴(kuò)展性:python開(kāi)發(fā)周期短,由于python是基于c開(kāi)發(fā)的,所以用C/C++來(lái)編寫(xiě)Python的擴(kuò)展,現(xiàn)在也有支持Java實(shí)現(xiàn)的Jpython。

8.豐富的類庫(kù):

9.內(nèi)存管理器

這個(gè)特別棒,再也不用要先給變量申請(qǐng)內(nèi)存了,也不用想著用完后釋放等等這些麻煩死了的東西。

10.python的應(yīng)用有系統(tǒng)編程,圖形處理,數(shù)字處理,文本處理,數(shù)據(jù)庫(kù)編程,網(wǎng)絡(luò)編程,Web編程,多媒體應(yīng)用,他們也用python寫(xiě)串口之類的。。

關(guān)于python版本的問(wèn)題

我想很多人都會(huì)果斷用最新的python3.4.1(寫(xiě)文章時(shí)是2014.7.31,估計(jì)幾年后如果這篇文章有幸被別人看到,對(duì)方肯定會(huì)呵呵的),人都是這樣,喜歡最新版本的。但是python3.x和python2.x不兼容,也就是說(shuō)你寫(xiě)的python3.x的程序不能在python2.x IDEL中運(yùn)行,反過(guò)來(lái)也是如此。很多庫(kù)不支持python3.0之后的版本,很多擴(kuò)展庫(kù)都沒(méi)有,你還怎么快樂(lè)玩耍。。比如python語(yǔ)言web框架的Django就不支持。再說(shuō)了網(wǎng)上很多優(yōu)秀代碼都是用python2.x寫(xiě)的,優(yōu)秀的代碼直接拿過(guò)來(lái)用就可以了,你自己寫(xiě)的費(fèi)事費(fèi)時(shí),還不一定好用??吹揭槐緯?shū)上的建議:目前大多數(shù)的應(yīng)用是python2.5/2.6居多。windows建議學(xué)2.6,Linux就玩2.5,怪不得前幾天有個(gè)人在群里說(shuō)他還在用2.5,估計(jì)是玩Linux的。在本人學(xué)習(xí)時(shí),他們授課是用python2.7.8的,是python2.x的最新版本(此時(shí)python3.x的最新版本是python3.4.1)。還是那句話吧,python2和python3并不是100%不兼容,只不過(guò)語(yǔ)法上做了一些修繕,更加精煉罷了。會(huì)python2的人對(duì)python3是不感冒的。

下面是python的print問(wèn)題:

書(shū)上明明寫(xiě)的是print ''hello world'',會(huì)出錯(cuò),必須寫(xiě)成print (''hello world''),其實(shí)這就是版本問(wèn)題,前一種是python2的語(yǔ)法,后一種是pyhton3的語(yǔ)法。書(shū)上大部分是python2,所以如果你用python3的話,很多資料的代碼你都要進(jìn)行改寫(xiě),很是麻煩。

一些基本內(nèi)容

1.round是四舍五入的函數(shù),如round(-9.1)=-9,round(10.7)=11

2.賦值可以多個(gè)同時(shí)進(jìn)行,如a,b=3,6,而且類似a<b<7,運(yùn)行顯示True。a<7<b,運(yùn)行顯示False。這一點(diǎn)與C不一樣,由此可見(jiàn)python的人性化啊~ ~

3.浮點(diǎn)數(shù)轉(zhuǎn)化成整數(shù)是直接截?cái)?,并非四舍五?/p>

4.python的變量是不能指定其類型的,他是通過(guò)所附的值來(lái)決定的,故int a=4是錯(cuò)誤的,而應(yīng)該寫(xiě)成a = 4,此外,long型整數(shù)沒(méi)有最大的長(zhǎng)度,具體取決于你的機(jī)器配置,一般幾百位的整數(shù)顯示時(shí)會(huì)在后面加一個(gè)L來(lái)表示其為long型。

5.‘+’可實(shí)現(xiàn)數(shù)字的相加或是字符串或是列表的相加,特別方便。如>>>a=[1,''hello'']+[2,''Mike''],則a就成了[1,''hello'',2,''Mike'']

6.用‘’來(lái)實(shí)現(xiàn)轉(zhuǎn)義,方法同C

7.逗號(hào)可以使print(不是print,python中的輸出函數(shù)是print)函數(shù)不換行的輸出。如print a,b 這和C比起來(lái)不知簡(jiǎn)單多上倍啊,要是打印個(gè)列表,python直接一個(gè)print 就出來(lái)了。。。

8.*可以實(shí)現(xiàn)字符串或列表的重復(fù)

>>> a=''hello''

>>> b=a*4

>>> b

''hellohellohellohello''

>>> list1=[1,''d'']

>>> list2=list1*3

>>> list2

[1, ''d'', 1, ''d'', 1, ''d'']

另外**是乘方,python還支持復(fù)數(shù),如:1-2j

9.輸入與輸出,其中輸入時(shí)通過(guò)input函數(shù),例:str1=input(''提示性語(yǔ)句'') 此時(shí)str1的類型取決于輸入類型。還有一個(gè)函數(shù)是raw_input,可以將輸入以字符串的形式處理。

輸出時(shí)可以直接在print后加變量名或表達(dá)式,

如: >>>print ''The area of the circle is",area,''sq cm''

The area of the circle is 80 sq cm

另外也可以用C語(yǔ)言的風(fēng)格輸出,不過(guò)有一點(diǎn)差異。

print ''The area of the circle is %f",area,''sq cm'' %area (注意,最末尾的百分號(hào)前面只有一個(gè)空格,否則會(huì)出錯(cuò)),如果有多個(gè)參數(shù)則%(參1,參2,...)

10.通過(guò)range可以方便的實(shí)現(xiàn)一個(gè)特殊的整數(shù)列表

range(下限,上限,步長(zhǎng)),左閉右開(kāi),同list的切片。

如:0~100 : range(0,101),或簡(jiǎn)寫(xiě)成range(101)

50~100的偶數(shù): range(0,101,2)

在表示C/C++語(yǔ)言中常用的循環(huán)時(shí),利用range可以很方便。

如:C/C++ for(int i =0;i<100;i++)

{

....

}

Python for i in range(100):

...

這個(gè)i 是局部變量,進(jìn)行range列表的迭代,可以實(shí)現(xiàn) i 從0到99共100次循環(huán)。是不是感覺(jué)有點(diǎn)小震撼。。

11.一些循環(huán)操作:

break:跳出循環(huán)

continue:跳過(guò)后面的語(yǔ)句,跳回循環(huán)體的頂部

pass:啥都不做

另外:和C相比python中沒(méi)有++,和- - ,else if用elif來(lái)代替,條件語(yǔ)句的()可以省略,條件后需有:。最后邏輯關(guān)系 &&用and,||用or , !用not 表示。

字符串操作

1.capitalize(),使字符串首字母大寫(xiě)

2.find(s,beg,end)beg和end之間首次出現(xiàn)參數(shù)s的索引

3.islower()和isupper() 測(cè)試所有字符是否均小/大寫(xiě)

4.replace(old,new) 將old替換成new

5.split() 將空格分隔的單詞以列表形式返回,同理如果是split(''a''),則會(huì)將字符串進(jìn)行如下處理,每當(dāng)碰到a字符則作為前一個(gè)字符串的結(jié)束,a字符相當(dāng)于空格。

如: >>> colors=''red orange green''

>>> colors.split(a)

[''red or'', ''nge green'']

6.strip()是刪除字符串中首尾的空格符

如: >>> a='' hello Kitty ''

>>> a.strip()

''hello Kitty''

列表操作

1. 通過(guò)for i in list1:來(lái)對(duì)list1列表的元素進(jìn)行迭代,賦值給i

2.如果要同時(shí)獲取i的索引可以用enumerate函數(shù)

如:>>> list1=[''Jim'',''Kitty'',"Tom"]

>>> for i,j in enumerate(list1):

print i,j

0 Jim

1 Kitty

2 Tom

注意 i和j之間本來(lái)是有()的,原型為(i,j),這里省略了括號(hào),所以i和j之間除了有逗號(hào)沒(méi)有空格符

3.列表的一些操作:

切片:咋說(shuō)呢,其實(shí)list和str都可以“切片”,簡(jiǎn)單地說(shuō)str[1:-1]就是去掉字符串的第一個(gè)字母和最后一個(gè)字符。str[1:]就是去掉第一個(gè)字符。切片方式和list是一樣一樣的,都是左閉右開(kāi),支持負(fù)索引,從0開(kāi)始。

list1=[''a'',''b'',''c'',''d'',''e'',''f'']

list2=list[0:4]

則list2為[''a'',''b'',''c'',''d''] 區(qū)間是左閉右開(kāi)的,即list2包括了list1[0]到list1[3]的所有元素

另兩種特殊的簡(jiǎn)化形式

list2=list1[:4]等同于list2=list1[0:4] list2=list1[4:]等同于list2=list1[4:6]

此外python的列表還支持負(fù)數(shù)索引,

如>>> list2=list1[-3:-1]

>>> list2

[''d'', ''e''] 依舊是左閉右開(kāi)

當(dāng)想表示從倒數(shù)第三個(gè)到結(jié)束則可以用以下兩種方式

>>> list4=list1[-3:6]

>>> list4

[''d'', ''e'', ''f'']

>>> list5=list1[-3:]

>>> list5[''d'', ''e'', ''f'']

其他情況則會(huì)返回空列表

4. 列表具有別名機(jī)制(相當(dāng)于引用)

如:list1=[...]

list2=list1

當(dāng)list1更改時(shí),list2也會(huì)更改,而字符串不具有別名機(jī)制,故字符串的別名是很安全的。

5.常見(jiàn)列表方法

append(v):列表后追加v

insert(i,v): v插入索引i

remove(v): 移除第一次找到的v值

reverse(): 反轉(zhuǎn)

sort(): 升序排列(字符串則以字母表順序?yàn)闇?zhǔn))

pop(): 移除最后一個(gè)元素并返回

注意:除了pop外,所有的方法都只會(huì)返回一個(gè)特殊值None,列表只有一個(gè),所有的方法都只會(huì)修改原列表而不會(huì)創(chuàng)建新的列表

如:>>>ted_colors=colors.sort()

>>>print sorted_colors

None

6.列表中的元素可以是列表

>>>life=[[''Canada'',76.5],[''United States'',75.5]]

>>>canada=life[0]

>>>canada[1]=80

>>>life

[[''Canada'',80],[''United States'',75.5]]

這里的canada是別名,對(duì)其操作會(huì)影響到主列表life

7.上文知道了如何將字符串轉(zhuǎn)化成列表了(別跟我說(shuō)你已經(jīng)忘了。。split 唄~~),那么如何將列表轉(zhuǎn)化成字符串呢?用 join,字面意思就是將列表中的字符連接以來(lái)。那用什么連接呢?你可以用 ’,‘ ’%‘ 或是其他任何你喜歡的字符或字符串都可以。列表放在join后的括號(hào)中,那用于連接的字符或字符串怎么寫(xiě)呢?給個(gè)例子

如:>>> list1=[''2'',''34'',''good'',''Hi'']

>>> '',''.join(list1)

''2,34,good,Hi''

這一點(diǎn)很特殊是用 字符(串).join(列表)

注意點(diǎn):

1.如果要進(jìn)行轉(zhuǎn)換操作,則對(duì)類表的元素有要求,必須全部是 字符(串),否則會(huì)出錯(cuò)。

>>> list3=[2,34,''good'',''Hi'']

>>> '',''.join(list3)

Traceback (most recent call last):

File "<pyshell#6>", line 1, in <module>

'',''.join(list3)

TypeError: sequence item 0: expected string, int found

2.可以用其他連接的哦,如:

>>> list1=[''2'',''34'',''good'',''Hi'']

>>> ''fool''.join(list1)

''2fool34foolgoodfoolHi''

8.特殊的列表:元組

元組是不可以直接更改的列表,其運(yùn)行效率更高,元組用‘()’來(lái)表示

>>>life=([''Canada'',76.5],[''United States'',75.5])

實(shí)際上元組中的對(duì)象仍舊可以更改如:life[0][1]=80.0,但不可以更改life[0]。

文件操作

1.標(biāo)準(zhǔn)文件輸入格式

如data.txt中的內(nèi)容為:

Mercury

Venus

Earth

data=open/file(''data.txt'',''r'')

for line in data:

print len(line)

為什么會(huì)長(zhǎng)度多1呢?因?yàn)槲募凶x取的每一行末尾都有一個(gè)結(jié)束符,用string.strip(),即可去掉該空白字符。前面字符串的方法已介紹過(guò)該方法。

data=open/file(''data.txt'',''r'')

for line in data:

line=line.strip()

print len(line)

data.close()

當(dāng)該表參數(shù)‘r’,改成‘w’是直接寫(xiě)如,而‘a(chǎn)’是追加

2.當(dāng)要打開(kāi)網(wǎng)站上的文件時(shí)需導(dǎo)入urllib模塊,通過(guò)其中的urlopen函數(shù)打開(kāi)目標(biāo)網(wǎng)頁(yè),并返回一個(gè)對(duì)象,就像操作本地文件一樣。

import urllib

url=''...''

web_page=urlopen(url)

for i in web_page:

line=line.strip()

print line

web_page.close()

集合和字典

1.集合可以使用元組或是列表

set((2,3,5))等價(jià)于set((2,2,3,5,5)),等價(jià)于set([2,3,3,5]),簡(jiǎn)單的說(shuō)集合只有一個(gè)元素,該元素是列表或是元組都可。

2.集合的操作

并(union),交(intersection),添加(add)和移除(remove),注意,只有add,remove和clear是修改當(dāng)前集合,其余都會(huì)創(chuàng)建一個(gè)新的集合。

eg:ten=set(range(10)), lows=set([0,1,2,3,4]), odds=set([1,3,5,7,9])

_____________________________________________________________________________________________________________________________________lows.add(9) None

lows.clear() None

(由于add并不會(huì)創(chuàng)建一個(gè)新集合,故為None,要想得到預(yù)期的效果,則需>>>lows=set([0,1,2,3,4]) >>>lows.add(9) >>>lows)

lows.differece(odds) A

lows.intersection(odds) B

lows.issubset(ten) True 包含于

lows.issuperset(odds) False 包含

lows.symmetric_difference(odds)

A+C 對(duì)稱差

lows.union(odds) A+B+C 并

另一種更簡(jiǎn)單的方法直接用數(shù)學(xué)符號(hào)表示即可

different set1-set2

intersection set1&set2

issubset set1<=set2

issuperset set1>=set2

symmetric_different set1^set2

union set1 |set2

字典

1.用‘{ }’表示字典,{字符串:值,...}

如:

>>>birds={‘canada goose’:3,‘northern fulmar’:1}

>>>birds[‘canada goose'']

3

2.通過(guò)賦值來(lái)直接對(duì)字典進(jìn)行擴(kuò)展(若原字典中無(wú)該鍵)或修改鍵值(原字典中已有該鍵)

>>>birds={}

>>>birds[''snow goose'']=3

>>>birds

{''snow goose'':3}

3.刪除鍵

del birds[''snow goose'']

4.對(duì)字典的循環(huán),返回的不是鍵值,而是鍵!這一點(diǎn)非常重要

for x in birds:

print x,birds[x]

-->''snow goose'' 3

5.其他一些常用方法

get(key,value1): 注意,若dict中有key,則返回dict[key],否則返回value1

keys(): 以列表形式返回鍵

items(): 返回(key,value)列表

values(): 以列表形式返回鍵值

update(temp): temp字典對(duì)原字典進(jìn)行更新

上訴方法其實(shí)一看名稱也就明白用途了。。

6.字典的迭代

用iteritems函數(shù)

如:for (key,value) in dictionary.iteritems():

...

Lambda表達(dá)式

這個(gè)特別有意思啊,當(dāng)你寫(xiě)函數(shù)時(shí)經(jīng)常會(huì)遇到,給個(gè)啥名字好呢?你感覺(jué)寫(xiě)一大堆單詞上去總怕表達(dá)不精練什么的,有可能還會(huì)寫(xiě)錯(cuò)單詞字母(啥,你英語(yǔ)水平很好,不可能寫(xiě)錯(cuò)。。好吧,我錯(cuò)了),而且只在局部用到,這時(shí)候用Lambda函數(shù)太棒了。Lambda函數(shù)是匿名函數(shù),沒(méi)有名字。

形式:>>>m=lambda a,b:a+b

>>>m(5,4)

9

lambda 參1,參2,...:表達(dá)式 (注意縮進(jìn),否則會(huì)出現(xiàn)unexcepted error)

幾個(gè)特殊的函數(shù)

1.filter(函數(shù),可迭代對(duì)象如列表等),他是個(gè)過(guò)濾器,列表中的符合函數(shù)規(guī)則的元素過(guò)濾出來(lái),以列表形式返回。

如:def mod1 (a):

return (a%2==0)

list2=filter(mod1,range(1,10))

print list2

--> [2, 4, 6, 8]

2.map(函數(shù),可迭代對(duì)象如列表等),其的作用是對(duì)整個(gè)列表的元素進(jìn)行檢查是否滿足函數(shù),并且以列表形式返回True或False

如 def mod1 (a):

return (a%2==0)

list3=map(mod1,range(1,10))

print list3

[False, True, False, True, False, True, False, True, False]

3.reduce(函數(shù),可迭代對(duì)象如列表等),其可以實(shí)現(xiàn)連續(xù)處理功能。其作用是先把列表中第一個(gè)值和第二個(gè)值當(dāng)參數(shù)傳給function,再把function的返回值和第三個(gè)值當(dāng)參數(shù)傳給function,然后只返回一個(gè)結(jié)果。

話不多說(shuō),給個(gè)例子吧

計(jì)算1+2+3+...+100

python里就一句話

a=reduce((lambda x, y:x+y),range(1,101))

print a

-->5050 (好吧,我錯(cuò)了,寫(xiě)了兩句。。)

首先將range(1,101)即列表(1,2,...,100)的第一個(gè)元素1,和第二個(gè)元素2,拿出來(lái)進(jìn)行+運(yùn)算,再把返回值3和列表中的第三個(gè)元素3相加,然后把返回值6再與列表中第四個(gè)元素4相加。。如此不斷下去,直至全部加完為止。如果用C的話,大概要十行吧。。

將上訴例子的+換成*就可以計(jì)算100!,very easy吧??梢栽囋囉?jì)算10000!來(lái)測(cè)試你的機(jī)器性能啊,我的機(jī)器只能算到1w!了,10w!等幾分鐘都不會(huì)出結(jié)果。。

這里有一個(gè)求素?cái)?shù)的代碼,如果是C/C++的話,起碼二十行吧,這里也是一行

0~100的素?cái)?shù)代碼:

print [x for x in range(1,101) if not [y for y in range(2,x/2+1)if x%y==0]]

異常

1.try和except

類似if和else,如果未發(fā)生錯(cuò)誤,先執(zhí)行完try塊中的代碼,并完全跳過(guò)except,若發(fā)生錯(cuò)誤,則跳到except塊開(kāi)始執(zhí)行代碼,稱為“異常被捕獲了”。注意:try代碼塊只執(zhí)行到第一句發(fā)生錯(cuò)誤的代碼

try:

①x=1/0.3

②print ''reciprocal of 0.3 is'',x

③x=1/0.0

④print ''receprocal of 0.0 is'',x

except:

⑤print ''error: no reciprocal''

⑥ ...

執(zhí)行順序:①②③⑤⑥

在try/except后可添加else塊,來(lái)告訴python在無(wú)異常時(shí)發(fā)生的事。

注意:只有try中所有代碼被正確執(zhí)行,才會(huì)執(zhí)行else塊中的代碼。

2.異常對(duì)象

python在引發(fā)一個(gè)異常后,會(huì)創(chuàng)建一個(gè)用于存放錯(cuò)誤信息的對(duì)象,可以在except中指定具體的異常

values=[-1,0,1]

for i in range(4):

try:

r=1.0/values[i]

print ''reciprocal of'',values[i],''at'',i,''is'',r

except IndexError:

print ’Index'',i,''out of range''

except ArithmeticError:

print ''unable to calculate reciprocal of'',values[i]

如果要知道具體的異常,可以把異常賦給變量

except IndexError,e:

print ''error:'',e

3.自己引發(fā)異常,通過(guò)raise

def divide(top,butttom):

if buttom==0:

raise ValueError(''divisor is zero'')

else:

return top/bottom

for i in range(-1,2):

try:

print divide(1,i)

except ValueError,e:

print ''Caught except for'',i

面向?qū)ο缶幊蘋(píng)OP

1.類中的方法至少有一個(gè)參數(shù)self,函數(shù)前都有def,沒(méi)有返回值類型,這一點(diǎn)太棒了,直接在末尾return 任何東西都可以,返回字符串啊,甚至是列表,還可以是一句話。。如果在C/C++中那肯定要跪,你肯定要寫(xiě)很多其他的東西才能實(shí)現(xiàn)該功能。

一些內(nèi)置函數(shù):

def __init__(self,a,b,c):

self.a=a

self.b=b

self.c=c

因?yàn)閜ython會(huì)自動(dòng)將對(duì)象本身的引用當(dāng)做參數(shù)傳給方法的第一個(gè)參數(shù),類似的還有

def __str__(self):

return ''...'' (此函數(shù)是類中的輸出函數(shù),最好用return把。。)

實(shí)例化直接傳參就可以了

如:time1=Time(10,2,45)

2.運(yùn)算法重載

python中的運(yùn)算符重載比C++中簡(jiǎn)單多了。。直接在類中傳遞一個(gè)self,還有另一個(gè)參數(shù)即可。適用于單目和雙目運(yùn)算符的重載

例如重載實(shí)例:

def __add__(self,other): #reload std return "%s : %s : %s" %(self.hour +other.hour,self.minute+other.minute,self.second+other.second)

def __lt__(self,other): # "<" pass

def __call__(self,index): # __builtin__ "()" reload

if (index=="Hour"):

print "~~"

else:

print ".."

def __getitem__(self,index): #__builtin__ "[]" reload return index *2

注意重載的運(yùn)算法只能在類的實(shí)例中使用

3.類的繼承

class People:

def __init__(self,num,name): #成員變量初始化函數(shù)

self.num=num

self.name=name

...

class Teacher(People):

def __init__(self,num,name,colledge):

People.__init__(self,num,name)

self.college=college 只有在很復(fù)雜的情況下才會(huì)用到私有繼承,默認(rèn)是共有繼承,直接把父類放入括號(hào)中,若有多個(gè)父類,用逗號(hào)隔開(kāi)

GUI圖形用戶界面

1. 利用 Tkinter 模塊

from Tkinter import *

import Tkinter as tk (這樣寫(xiě)后面的Tkinter就可以用tk替代)

import sys (用于導(dǎo)入退出程序的函數(shù)等,如sys.exit())

一些插件:

Button,Canvas,Checkbutton(復(fù)選框),Radiobutton(單選框),Entry(單行文本框),Text(多行文本框) Label(顯示文本的單個(gè)行),Listbox(下拉列表),Menu(下拉菜單),Message(顯示文本多個(gè)行)

======================================================================================================================== Label

Label是最簡(jiǎn)單的插件,顯示一小條文本,需置入父插件中

from Tkinter import *

window=Tk()

label=Label(window,text=''hello'').pack()

首先得先制造處窗口,通過(guò)tk.Tk()即可,然后所有的子插件都嵌套在window中。對(duì)window這個(gè)窗口可以進(jìn)行設(shè)置,通過(guò)

window.geometry("300x400+120+100") #windows'' scale and its positionwindow.title("This is just a window...")

注意geometry內(nèi)是字符串,第一個(gè)是length,第二個(gè)是width,之間用x(不是乘號(hào),而是字母x),接下來(lái)第三第四個(gè)是窗口左上角的位置坐標(biāo),用加號(hào)連接。

2.要注意插件的配置一旦確立,若要更改則需用config方法修改插件的很多屬性

這里有一個(gè)動(dòng)態(tài)顯示Label文本的方法

...

import time

...

label=Lable(window,text=''Hello'')

time.sleep(2)

label.config(text=''Kitty'')

3.要讓插件的值發(fā)生變化,可以用可變類型來(lái)實(shí)現(xiàn)

共有四種:IntVar(),StringVar(),BooleanVar(),DoubleVar()

可變類型的值是通過(guò)set和get方法來(lái)設(shè)置和獲取的。

from Tkinter import *

window=Tk()

data=StringVar()

data.set(''Data to display'') #設(shè)置初始值

label=Label(window,textvariable=data).pack()

window.mainloop()

4.上面的是把插件直接一股腦的丟進(jìn)window一個(gè)窗口上,為了更好的安排插件的位置,可以利用Frame(框架)來(lái)將一些插件置于frame內(nèi),其實(shí)就是在窗口畫(huà)出一個(gè)框來(lái)。

顯然,將插件置于frame框中只需將window改成frame即可

如:frame=Frame(window).pack()

first=Label(frame,text=''first Label'').pack()

有時(shí)候第一個(gè)說(shuō)明父插件的參數(shù)可以省略。默認(rèn)是window

5.可以將frame修改參數(shù)讓其可見(jiàn),修改boardwidth(默認(rèn)為0)值即可。同時(shí)可以更改樣式relief,改成‘ sunken’,‘raised’,‘groove’等,這些屬性在其他的一些插件如Entry,Text中也有。

6.一些其他的樣式處理

eg:

label=Label(window,text="hello",bg=''green'',fg=''white'',font=(''Curier'',14,''bold italic'').pack()

bg是background,設(shè)置背景顏色,fg是fontground ??設(shè)置字體顏色。bold是粗體,對(duì)應(yīng)的normal是細(xì),italic是斜體,roman是不傾斜的。

7.插件的布局

可以看到所有的插件都會(huì)有.pack(),當(dāng)然window就沒(méi)有了。pack函數(shù)是將子插件置入父插件中,父插件是傳入的第一個(gè)參數(shù),pack內(nèi)可傳入side=‘left’等參數(shù),從而確定該插件的具體安放位置。

另一中方法是grid(row=100,column=100),用于確定具體的網(wǎng)格以便與安放插件。

但兩種方法不可以混用。

8.函數(shù):更好的實(shí)現(xiàn)交互

為了實(shí)現(xiàn)某些插件(如按鈕等)的功能,需要用到函數(shù) .(...,command=函數(shù)名)即可。注意:等號(hào)后面的函數(shù)是不允許帶參數(shù)的,目的是以同一種方式調(diào)用他們。

如:

from Tkinter import *

window = Tk()

counter=IntVar()

counter.set(0) #設(shè)置計(jì)數(shù)器初值

def click(var,value):

var.set(var.get()+value)

frame=Frame(window)

frame.pack()

button1=Button(frame,text="Up",command=lambda:click(counter,1)).pack()

button1=Button(frame,text="Down",command=lambda:click(counter,-1)).pack()

label=Label(frame,textvariable=counter).pack()

window.mainloop()

上面的代碼功能:通過(guò)點(diǎn)擊“Up”和“Down”兩個(gè)按鈕來(lái)實(shí)現(xiàn)對(duì)計(jì)數(shù)器counter的加1或減1操作,并將counter的值傳給Lable的textvariable,從而在label中顯示。

在 click函數(shù)中,有兩個(gè)參數(shù),其中形參Var會(huì)由實(shí)參IntVar型的counter代替,value則會(huì)被1或-1代替。

在前面說(shuō)過(guò)command后面的函數(shù)是不帶參數(shù)的,故這里用lambda函數(shù),否則你就要寫(xiě)連個(gè)command=clickup,command=clickdown。lambda函數(shù)是沒(méi)有名字的函數(shù),常用于定義動(dòng)作,可以避免全局變量的使用。

9.其他一些插件

① Text

text=Text(frame,heigth=10,width=10).pack()

Text插件還有很多其他的方法,這里略去

②Checkbutton

checkbutton=Checkbutto(frame,text=''...'',variable=...).pack()

③ Radiobutton

Radiobutton(root, text = j, value = i,variable = food).pack()

④Scale 進(jìn)度條

scale = Scale(root , from_= 1, to = 20 ,resolution = 1 ,orient=''horizontal'',variable = speed)

scale.pack(side = "left")

注意:Scale插件中是 from_=下限,to=上限,resolution是精度,orient 來(lái)定義橫放豎放,默認(rèn)是豎放。

⑤ tkMessageBox

這是彈出一個(gè)新的對(duì)話框,前面需有import tkMessageBox

tkMessageBox.askquestion("Who is Naruto?"," A main role in a famous cantoon",icon = "warning")

最后附上自己寫(xiě)的第一個(gè)GUI程序源碼,第一次寫(xiě),雖然很挫,功能很少,有很多界面上的功能都是騙人的。。但還是不加修改的直接拿上來(lái)了,權(quán)當(dāng)紀(jì)念一下我的8天python之旅吧。。

# -*- coding:UTF-8 -*-

import Tkinter as tk

from Tkinter import *

import sys

某培訓(xùn)學(xué)員總結(jié)Python入門(mén)知識(shí)合集,厚著臉皮討要過(guò)來(lái)分享了!

import tkMessageBox

root=tk.Tk()

root.geometry(''300x440+200+330'')

root.title("Your Favorite Person")

_nameNum=IntVar()

wordsAC = StringVar()

points=StringVar()

wordsinput=StringVar()

def _chooseBox():

tkMessageBox.askquestion(" ","You should click OK not this button...",icon="warning")

print _nameNum.get()

def _wordAfterChoosing():

tkMessageBox.askquestion("Your choose",''Waw,I like the role too!'',icon="warning") #第一行是標(biāo)簽,第二行是輸出

def authorDisplay():

tkMessageBox.askquestion("Your choose",''Yan Chuan'',icon="warning")

def Advice():

tkMessageBox.askquestion("Advice",''Your advice have already sent to the Author Haha, I lied to you!'',icon="warning")

def Points():

print points.get()

def textBox():

print wordsinput.get()

tk.Label(fg=''purple'',text=''Who is your favorite?'').pack()

tk.Button(fg=''blue'', text=''please choose yours'',command=_chooseBox).pack()

namelist=[''Naruto'',''Sasuke'',''Sakura'',''Haku '',''Tsunade'',''Gaara '',''Itachi '',''Others'']

for i ,j in enumerate(namelist):

tk.Radiobutton(root,fg=''blue'',text=j,value=i,variable=_nameNum).pack()

tk.Button(fg=''red'',text=''OK'',command=_wordAfterChoosing).pack()

tk.Button(fg=''red'',text=''Author'',command=authorDisplay).pack(side=''left'')

tk.Button(fg=''blue'',text=''Advice'',command=Advice).pack(side=''left'')

tk.Label(fg=''red'',text="Please give a point for the software").pack()

scale=Scale(root,from_=1,to=5,resolution=1,orient=''horizontal'',variable=points).pack()

tk.Entry(relief="sunken",textvariable=wordsinput).pack()

Button(fg="blue",text="submit",command=textBox).pack()

tk.Button(fg="red",text=''exit'',command=sys.exit).pack()

tk.mainloop

最后如果發(fā)現(xiàn)錯(cuò)誤,還請(qǐng)大家提一下,畢竟水平有限。對(duì)了,忘記說(shuō)了,電腦同時(shí)可以安裝python2和python3的。。。你可以兩個(gè)同時(shí)玩。。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多