python的變量與java的不一樣,java的變量是固定類型的,而python的變量也是對象引用。以下是小編為你整理的0基礎怎么自學python ?
首先是理解對象引用,對象引用就是映射關系 ?
比如,你在超市的儲物柜1號放了個包裹,那么你得到一張票據,上面寫著A ?
那么,這個A就是引用了這個格子 ?
標識符-等號-對象,比如,A = 123
?
那么,A是標識符,123是對象 ?
注意:標識符的大小寫是區(qū)分的,ABC與Abc與abc,是不同的標識符 ?
如果之前接觸過java,這個理解起來會有點不一樣,python的變量就是對象引用,與java的變量存儲在棧內存是不一樣 ?
比如A=1,B=A,那么結果是A和B都指向1 ?
假如這時候,A=2,那么A會指向2,B不會跟著改變,則還是指向1 ?
所以說,A指向另外一個引用的時候,是直接指向另外一個引用所引用的對象的 ?
換成代碼,則是下面這樣,首先A指向1號,然后B指向A,再把A的指向2號 ?
這樣的情況下,B不會跟著改變 ?
還有重要的一點,就是對象不會隨著沒有被引用而馬上消失,假設A和B都是指向1,然后A和B又指向2,那么1沒有被引用了,但是還是會存在的 ?
用代碼演示就是 ?
A=1,打印A的內存地址 ?
A=2,打印A的內存地址 ?
A=1,打印A的內存地址 ?
A=2,打印A的內存地址 ?
如果對象沒有被清除,那么4次打印內存地址,13次地址數值是相同的,24次也一樣 ?
底部的內存地址,即使對象再次被引用的時候,還是原來的地址。 ?
如何搭建環(huán)境學習爬蟲首先學習Python,建議通過**mooc和《笨方法學Python》來實現入門,那本書的內容可以有所取舍。通過這兩個途徑再上網上針對性地查找相關內容完全可以入門,重點在于理解“面向對象”。 ?
爬蟲入門首先要明白一些網絡技術,了解TCP/IP參考模型,并且對應用層的HTTP協(xié)議的方法和工作原理有一定的認識。爬蟲爬取網頁內容,大多數網頁服務由HTTP協(xié)議實現。 ?
正式學習爬蟲庫urllib和正則表達式,urllib靈活性很高,并且和你所學的網絡原理、HTTP原理非常貼合,利于新手學習,正則表達式看看內容,再看幾個實例就應該會用了,不推薦看亂七八糟的教程和MOOC(效果非常差,講的跨度太大),推薦書籍《精通Python網絡爬蟲 核心技術、框架與項目實戰(zhàn) 》(韋瑋)。同樣是選擇性的閱讀。 ?
學習完成之后,多加實踐,推薦實戰(zhàn)項目:1、爬取漫畫網上的一部漫畫的所有圖片,并用PowerPoint做成PDF 2、爬取電影下載網站上的所有電影下載鏈接并整理到Excel。能獨立完成這兩個實戰(zhàn)項目,恭喜你已經成功入門! ?
構造一個三維數組
import numpy as npa = np.random.rand(3,3,5) ?
np.floor是一個ufunc函數,它是一個一元函數——取整函數,可以做用于a里面的每一個數字,且保持數組結構不變,仍舊是三維的3*3*5的數組: ?
類似的一元ufunc函數還有很多,比如所有的初等數學函數: ?
print(np.sin(b),'n',np.cos(b)) ?
np.add是一個多元的ufunc函數: ?
b = np.add.reduce(a) ?
這里,reduce的作用,是把add函數作用于數組a的*層每一個子數組,計算這些元素的和。 ?
具體的作用結果是: ?
c = []for j in range(3): d = [] for i in range(5): #print(a[:,j,i],'t',sum(a[:,j,i])) d.append(sum(a[:,j,i])) c.append(d)print(np.array(c)) ?
b = np.add.reduce(a,axis = 1) ?
這里指定了add作用于a的第二層子數組,具體如下: ?
c = []for j in range(3): d = [] for i in range(5): #print(a[j,:,i],'t',sum(a[j,:,i])) d.append(sum(a[j,:,i])) c.append(d)print(np.array(c)) ?
b = np.add.reduce(a,axis = 2) ?
將add函數作用于a的第三層子數組: ?
print(sum(a[0,0]))
?
給出一個一維數組: ?
import numpy as npa = np.floor(np.random.rand(6)*10) ?
從左往右累計a里面的元素之和: ?
b = np.add.accumulate(a) ?
具體的類似于: ?
c = 0d = []for i in range(6): c = c+a[i] d.append(c) print(np.array(d))
云基礎設施
這年頭,不支持云平臺,不支持海量數據,不支持動態(tài)伸縮,根本不敢說自己是做大數據的,頂多也就敢跟人說是做商業(yè)智能(BI)。 ?
云平臺分為私有云和公有云。私有云平臺如日中天的 OpenStack,就是 Python 寫的。曾經的追趕者 CloudStack,在剛推出時大肆強調自己是 Java 寫的,比 Python 有優(yōu)勢。結果,搬石砸腳,2015 年初,CloudStack 的發(fā)起人 Citrix 宣布加入 OpenStack 基金會,CloudStack 眼看著就要壽終正寢。 ?
如果嫌麻煩不想自己搭建私有云,用公有云,不論是 AWS,GCE,Azure,還是阿里云,青云,在都提供了 Python SDK,其中 GCE 只提供 Python 和 JavaScript 的 SDK,而青云只提供 Python SDK??梢姼骷以破脚_對 Python 的重視。 ?
提到基礎設施搭建,不得不提 Hadoop,在今天,Hadoop 因為其 MapReduce 數據處理速度不夠快,已經不再作為大數據處理的*,但是 HDFS 和 Yarn——Hadoop 的兩個組件——倒是越來越受歡迎。Hadoop 的開發(fā)語言是 Java,沒有官方提供 Python 支持,不過有很多第三方庫封裝了 Hadoop 的 API 接口(pydoop,hadoopy 等等)。 ?
Hadoop MapReduce 的替代者,是號稱快上 100 倍的 Spark,其開發(fā)語言是 Scala,但是提供了 Scala,Java,Python 的開發(fā)接口,想要討好那么多用 Python 開發(fā)的數據科學家,不支持 Python,真是說不過去。HDFS 的替代品,比如 GlusterFS,Ceph 等,都是直接提供 Python 支持。Yarn 的替代者,Mesos 是 C++ 實現,除 C++ 外,提供了 Java 和 Python 的支持包。