對(duì)只用一種語(yǔ)言來(lái)構(gòu)建某個(gè)項(xiàng)目的情況而言,Javascript和它的框架是非常有用的。Angular.js可以控制展示給用戶(hù)的網(wǎng)站前端。Node.js將作為管理網(wǎng)站所有內(nèi)容的網(wǎng)絡(luò)服務(wù)器。Express.js在前端和服務(wù)器兩者之間運(yùn)行,對(duì)信息的來(lái)去進(jìn)行導(dǎo)向。以下是小編為你整理的如何學(xué)好python開(kāi)發(fā) ?
MongoDB作為存儲(chǔ)中心,用于存儲(chǔ)從用戶(hù)處獲取的數(shù)據(jù)。MEAN(Mongo/Express/Angular/Node)——一個(gè)有助于構(gòu)建你在一個(gè)Web應(yīng)用中所需要的一切東西的結(jié)構(gòu)化框架——是一套目前被大量初創(chuàng)公司所喜好的編程語(yǔ)言。這是一個(gè)完備的組件,它包含了基于單一語(yǔ)言來(lái)Web化地構(gòu)建所有事物的技術(shù)。 ?
Python可讀性和靈活性都非常好,最近它成為*院校在教授計(jì)算機(jī)專(zhuān)業(yè)時(shí)選擇的入門(mén)語(yǔ)言之一。
?
對(duì)于玩轉(zhuǎn)數(shù)據(jù)以及用它的共通模塊來(lái)完成各種你以前認(rèn)為不可能的精巧工作來(lái)說(shuō)——例如抓取完整的網(wǎng)頁(yè)和進(jìn)行高級(jí)科學(xué)計(jì)算,Python都是絕佳的。我是在Learn Python上開(kāi)始學(xué)習(xí)Python的,它非常符合我“邊做邊學(xué)”的學(xué)習(xí)風(fēng)格。 ?
Java(以及其他更緊密地與計(jì)算機(jī)硬件交互的語(yǔ)言)對(duì)人類(lèi)理解來(lái)說(shuō)會(huì)稍難一些,盡管對(duì)于幫助你理解“代碼的實(shí)際運(yùn)行過(guò)程”和“程序員與計(jì)算機(jī)的交互過(guò)程”的絕大部分知識(shí)而言,它們是很棒的。 ?
Java也用于在Android系統(tǒng)上的移動(dòng)應(yīng)用開(kāi)發(fā),而這將會(huì)是一直有需求的領(lǐng)域。 ?
如果我們想簡(jiǎn)捷地將知識(shí)轉(zhuǎn)換成金錢(qián),那么,我曾見(jiàn)到業(yè)界對(duì)IOS開(kāi)發(fā)者有著大量需求,而開(kāi)發(fā)IOS應(yīng)用所使用的Objective-C和Swift也并不那么難學(xué)習(xí)。 ?
Ruby——尤其是當(dāng)它與Rails一起使用時(shí)——是一種因其并不陡峭的學(xué)習(xí)曲線(xiàn)而被大量初創(chuàng)公司在初創(chuàng)時(shí)所用的語(yǔ)言(事實(shí)上,有一本叫Children's Book for Ruby的書(shū))。 ?
str結(jié)構(gòu)__str__()方法: ?
如果要把一個(gè)類(lèi)的實(shí)例變成 str,就需要實(shí)現(xiàn)特殊方法__str__()。 ?
Python 定義了__str__()和__repr__()兩種方法,__str__()用于顯示給用戶(hù),而__repr__()用于顯示給開(kāi)發(fā)人員。一般定義__repr__()的快捷辦法是直接: ?
__repr__ = __str__ ?
那么怎么定義__str__()呢? ?
Class Person(Object): ?
def __init__(self,name,gender): ?
self.name = name ?
self.gender = gender ?
def __str__(self): ?
return '(Person: %s, %s)' % (self.name, self.gender) ?
__repr__ = __str__ ?
__cmp__()方法: ?
對(duì) int、str 等內(nèi)置數(shù)據(jù)類(lèi)型排序時(shí),Python的 sorted() 按照默認(rèn)的比較函數(shù) cmp 排序,但是,如果對(duì)一組 Student 類(lèi)的實(shí)例排序時(shí),就必須提供我們自己的特殊方法 __cmp__()。__cmp__用實(shí)例自身self和傳入的實(shí)例進(jìn)行比較,如果實(shí)例自身self 應(yīng)該排在前面,就返回 -1,如果傳入的實(shí)例應(yīng)該排在前面,就返回1,如果兩者相當(dāng),返回 0。 ?
舉例: ?
Class Student(Object): ?
def __init__(self,name,gender,score): ?
self.name = name ?
self.gender = gender ?
def __str__(self): ?
return '(Student: %s, %s, %s)' % (self.name, self.gender, self.score) ?
__repr__ = __str__ ?
def __cmp__(self, s): ?
if self.name < s.name: ?
return -1 ?
elif self.name > s.name: ?
return 1 ?
else: ?
return 0 ?
L = [Student('Tim', 99), Student('Bob', 88), Student('Alice', 77)] ?
print sorted(L) ?
注意:上面粗體部分也可以直接使用簡(jiǎn)寫(xiě)方式: ?
return cmp(self.name, s.name) ?
__len__()方法: ?
如果一個(gè)類(lèi)表現(xiàn)得像一個(gè)list,要獲取有多少個(gè)元素,就得用 len() 函數(shù)。 ?
def __len__(self): ?
return len(self.names) ?
@property:Python內(nèi)置的@property裝飾器就是負(fù)責(zé)把一個(gè)方法變成屬性調(diào)用的; ?
一個(gè)類(lèi)實(shí)例也可以變成一個(gè)可調(diào)用對(duì)象,只需要實(shí)現(xiàn)一個(gè)特殊方法__call__()。 ?
__slots__的目的是限制當(dāng)前類(lèi)所能擁有的屬性 ?
類(lèi)的繼承
如果已經(jīng)定義了Person類(lèi),需要定義新的Student和Teacher類(lèi)時(shí),可以直接從Person類(lèi)繼承: ?
class Person(object): ?
def __init__(self, name, gender): ?
self.name = name ?
self.gender = gender ?
定義Student類(lèi)時(shí),只需要把額外的屬性加上,例如score: ?
class Student(Person): ?
def __init__(self, name, gender, score): ?
super(Student, self).__init__(name, gender) ?
self.score = score ?
一定要用 super(Student, self).__init__(name, gender) 去初始化父類(lèi),否則,繼承自 Person 的 Student 將沒(méi)有 name 和 gender。 ?
函數(shù)super(Student, self)將返回當(dāng)前類(lèi)繼承的父類(lèi),即 Person ,然后調(diào)用__init__()方法,注意self參數(shù)已在super()中傳入,在__init__()中將隱式傳遞,不需要寫(xiě)出(也不能寫(xiě))。 ?
?
python中判斷類(lèi)型: ?
函數(shù)isinstance()可以判斷一個(gè)變量的類(lèi)型,既可以用在Python內(nèi)置的數(shù)據(jù)類(lèi)型如str、list、dict,也可以用在我們自定義的類(lèi),它們本質(zhì)上都是數(shù)據(jù)類(lèi)型。 ?
在繼承鏈上,一個(gè)父類(lèi)的實(shí)例不能是子類(lèi)類(lèi)型,因?yàn)樽宇?lèi)比父類(lèi)多了一些屬性和方法。一個(gè)實(shí)例可以看成它本身的類(lèi)型,也可以看成它父類(lèi)的類(lèi)型。 ?
class Person(object): ?
def __init__(self, name, gender): ?
self.name = name ?
self.gender = gender ?
class Student(Person): ?
def __init__(self, name, gender, score): ?
super(Student, self).__init__(name, gender) ?
self.score = score ?
t = Teacher('Alice', 'Female') ?
print isinstance(t,Person) ?
print isinstance(t,Student) ?
print isinstance(t,Teacher) ?
print isinstance(t,object) ?
如何輸出程序
輸入:line = input() print(line)
注:意思是,等待鍵盤(pán)輸入,然后回車(chē)把輸入的字符,傳遞給line,然后打印出來(lái) ?
然后在控制面板輸入,這時(shí)候程序還在運(yùn)行的,右上角的綠色按鈕有個(gè)綠點(diǎn),這個(gè)表示程序還在運(yùn)行 ?
當(dāng)鍵盤(pán)輸入數(shù)據(jù),回車(chē)之后,那么等待鍵盤(pán)輸入的語(yǔ)句就結(jié)束了,到下面的打印語(yǔ)句 ?
打印語(yǔ)句運(yùn)行完之后,程序結(jié)束,可以看右上角的按鈕的沒(méi)有綠點(diǎn)了,代表程序可以運(yùn)行 ?
在input的括號(hào)中,輸入一段字符串 ?
那么這段字符串,是作為控制臺(tái)輸入的提示語(yǔ)句 ?
文件輸出與輸入
file = open('a.txt', 'w')file.write('abcde') ?
注:上行意思是,以寫(xiě)入方式('w')打開(kāi)一個(gè)文件('a.txt'),下行意思是,寫(xiě)入一句話(huà)(‘a(chǎn)bcde’) ?
首先在txt文件上,寫(xiě)上一行內(nèi)容 ?
file = open('a.txt', 'r')print(file.readline()) ?
注意:上行意思是,打開(kāi)‘a(chǎn).txt’文件,以讀取方式打開(kāi)('r'),下行意思是,讀取一行內(nèi)容('file.readline()')