“人生苦短,我學(xué)python”是編程屆的名言。用python寫小腳本的便捷性,讓很多其他語言的學(xué)習(xí)者把python當(dāng)作輔助語言。擁有了某一個語言的功底,再來學(xué)習(xí)另外一種語言應(yīng)該是十分快速的。

基礎(chǔ)的運(yùn)算
安裝好python環(huán)境后,運(yùn)行win+R,輸入python直接進(jìn)入python的交互頁面,這邊可以進(jìn)行數(shù)學(xué)運(yùn)算。
>>> 2+2
4
復(fù)制代碼
表1 數(shù)學(xué)操作符,優(yōu)先級從高到低
操作符 操作 例子 值 ** 指數(shù) 2 ** 3 8 % 取模/取余數(shù) 22 % 8 6 // 整除/商數(shù)取整 22 // 8 2 / 除法 22 / 8 2.75 * 乘法 3 * 5 15 - 減法 5 - 2 3 + 加法 2 + 2 4
由上面可以看出python前兩個基礎(chǔ)類型 整數(shù)、 浮點(diǎn)類型。這兩個和java中的概念差不多。
這里多說一句,小編是一名python開發(fā)工程師,這里有我自己整理的一套最新的python系統(tǒng)學(xué)習(xí)教程,包括從基礎(chǔ)的python腳本到web開發(fā)、爬蟲、數(shù)據(jù)分析、數(shù)據(jù)可視化、機(jī)器學(xué)習(xí)等。想要這些資料的可以關(guān)注小編,并在后臺私信小編即可領(lǐng)取。
字符串
作為基礎(chǔ)的類型,當(dāng)然少不了字符串了,和java一樣,字符串可以進(jìn)行拼接操作。例如:
>>> 'AAA' + 'BBB'
'AAABBB'
>>> 'CCC'+25
Traceback (most recent call last):
? File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> 'DEF'*3
'DEFDEFDEF'
復(fù)制代碼
如上,‘AAA’+'BBB'可以直接進(jìn)行字符串的拼接。但是與java不同的是 python不會進(jìn)行類型強(qiáng)制轉(zhuǎn)化,所以當(dāng)用字符串‘CCC’+int型的25的時候就會報錯。對python進(jìn)行*操作,字符串會進(jìn)行復(fù)制。
變量名
這邊插一段,在java中進(jìn)行變量聲明的時候,需要指定變量類型,在python中不需要,但是python變量名也需要一定的規(guī)則。
只能是一個詞。
只能包含字母、數(shù)字和下劃線。
不能以數(shù)字開頭。
類型轉(zhuǎn)化
為了讓int型的5可以轉(zhuǎn)化成字符串類型,從而和字符串拼接,python提供了一些內(nèi)置函數(shù)。
表2 一些python內(nèi)置函數(shù)
函數(shù) 作用 示例 str() 轉(zhuǎn)化類型為字符串 str(5) int() 轉(zhuǎn)化類型為整數(shù) int('5') float() 轉(zhuǎn)化類型為浮點(diǎn)數(shù) float('5') print() 打印函數(shù) 略 input() 讀取用戶輸入數(shù)據(jù) myName = input() len() 內(nèi)容長度 len(myName)
控制流
布爾值
現(xiàn)在引入第四個數(shù)據(jù)類型,布爾值。python的布爾值也是有真或者假,但是python中的真為True(注意T必須大寫),假為False(F也必須為大寫),同樣的布爾類型不能與其他類型相比較。
>>> True
True
>>> true
Traceback (most recent call last):
? File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined
>>> True = 1
? File "<stdin>", line 1
SyntaxError: can't assign to keyword
復(fù)制代碼
比較類型
表3 比較類型
操作符 含義 == 等于 != 不等于 < 小于 > 大于 <= 小于等于 >= 大于等于
同時python也可以使用二元操作符 and、or、not同java中的與、或、非。

條件與代碼塊
你前面看到的布爾表達(dá)式可以看成是條件,它和表達(dá)式是一回事?!皸l件”只是在 控制流語句的上下文中更具體的名稱。條件總是求值為一個布爾值,True 或 False。控制 流語句根據(jù)條件是 True 還是 False,來決定做什么。幾乎所有的控制流語句都使用條件。
代碼塊
python沒有java中那種{}來區(qū)分代碼塊,python中所有的代碼塊都是通過縮進(jìn)進(jìn)行的。
縮進(jìn)增加時,代碼塊開始。
代碼塊可以包含其他代碼塊。
縮進(jìn)減少為零,或減少為外面包圍代碼塊的縮進(jìn),代碼塊就結(jié)束了。
>>> if 'a'=='b':
...? ? print('真')
... else:
...? ? print('假')
...
假
復(fù)制代碼
以上是一個if else 的控制流,條件后面加上冒號,并且代碼塊需要縮進(jìn)方式。
while循環(huán)的格式如下:
spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1
復(fù)制代碼
另外 python 也有break 和continue 關(guān)鍵字可以使用。
for循環(huán)
for循環(huán)單另兒拿出來以示尊重,for循環(huán)的格式如下:
for 關(guān)鍵字;
一個變量名;
in 關(guān)鍵字;
調(diào)用 range()方法,最多傳入 3 個參數(shù);
冒號;
從下一行開始,縮退的代碼塊(稱為 for 子句)。
for i in range(5):
? ? print('Jimmy Five Times (' + str(i) + ')')
復(fù)制代碼
i分別執(zhí)行0、1、2、3、4.
range()方法其實有三個參數(shù),只是可以省略其中兩個。range(start、end、gap),可以指定開始、結(jié)束和步長。
>>> for i in range(0,10,3):
...? ? print(i)
...
0
3
6
9
復(fù)制代碼
函數(shù)
導(dǎo)入模塊
Python 程序可以調(diào)用一組基本的函數(shù),這稱為“內(nèi)建函數(shù)”,包括你見到過的print()、input()和 len()函數(shù)。Python 也包括一組模塊,稱為“標(biāo)準(zhǔn)庫”。每個模塊都是一個 Python 程序,包含一組相關(guān)的函數(shù),可以嵌入你的程序之中。例如,math模塊有數(shù)學(xué)運(yùn)算相關(guān)的函數(shù),random 模塊有隨機(jī)數(shù)相關(guān)的函數(shù),等等。
利用import或者from import語句
自定義函數(shù)
除了內(nèi)建函數(shù),大部分的函數(shù)都是自定義的。(即使從模塊中導(dǎo)入的函數(shù)也是別人自定義好的,讓你使用的)
def hello(name):
print('Hello ' + name)
復(fù)制代碼
def 函數(shù)名(參數(shù)):
函數(shù)體
None
在Python中有一個值稱為None,它表示沒有值。None是NoneType數(shù)據(jù)類型的唯一值(其他編程語言可能稱這個值為null、nil或 undefined)。就像布爾值True和False一樣,None必須大寫首字母 N。
異常處理
def temp_convert(var):
? ? try:
? ? ? ? return int(var)
? ? except ValueError, Argument:
? ? ? ? print "參數(shù)沒有包含數(shù)字\n", Argument
復(fù)制代碼
類似于java,python捕獲處理一場用的是try,except,只不過在except后面除了可以跟異常類(比如例子中的ValueError),還可以跟上引發(fā)一場的參數(shù)(比如例子中的Argument,其實就是try中的var)
列表
列表可以看作java中的數(shù)組集合,可以存放一些元素,比如>>> spam = ['cat', 'bat', 'rat', 'elephant']。我們可以通過index獲取某個元素,比如spam[0]=‘cat’,同時可以從后往前拿數(shù)據(jù),比如spam[-1]='elephant'。
切片
除了直接操作index,獲取某個元素之外,還可以通過切片獲得一段子列表。
>>> spam[1:3]
['bat', 'rat']
>>> spam[0:-1]
['cat', 'bat', 'rat']
復(fù)制代碼
列表的拼接與復(fù)制
與java不同的是,python的列表可以自由的拼接復(fù)制。
>>> [1, 2, 3] + ['A', 'B', 'C']
[1, 2, 3, 'A', 'B', 'C']
>>> ['X', 'Y', 'Z'] * 3
['X', 'Y', 'Z', 'X', 'Y', 'Z', 'X', 'Y', 'Z']
復(fù)制代碼
列表結(jié)合某些關(guān)鍵字和方法
刪除某列表中的某元素,可以直接用del關(guān)鍵字。
也可以結(jié)合for循環(huán)
>>> supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
>>> for i in range(len(supplies)):
print('Index ' + str(i) + ' in supplies is: ' + supplies[i])
復(fù)制代碼
利用 in 、not in 直接判斷某元素是否在列表中
>>> 'howdy' in ['hello', 'hi', 'howdy', 'heyas']
True
>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> 'cat' in spam
False
復(fù)制代碼
index()方法判斷某元素在列表中的第一次出現(xiàn)的下標(biāo),沒有的話就報錯。
>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1
復(fù)制代碼
用 append()和 insert()方法在列表中添加值
append()方法調(diào)用,將參數(shù)添加到列表末尾。insert()方法可以在列表任意下標(biāo)處插入一個值。insert()方法的第一個參數(shù)是新值的下標(biāo),第二個參數(shù)是要插入的新值。
用remove()方法從列表中刪除值
用sort()方法將列表中的值排序
元組
在java中,我們知道String 是被final修飾的,所以String本身是不能修改的,如果對String進(jìn)行修改,其實是在內(nèi)存中新建了一個新的String。類似的python中也有一個不可修改的數(shù)據(jù)類型——元組。元組和列表差不多,很多方法都是共通的。只不過,元組是用"()"表示,并且元組內(nèi)的元素不能被修改,也不能對元組進(jìn)行增加刪除操作。
元組和列表的轉(zhuǎn)化
函數(shù)list()和tuple()將返回傳遞給它們的值的列表和元組版本。
>>> tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
>>> list(('cat', 'dog', 5))
['cat', 'dog', 5]
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
復(fù)制代碼
引用與引用函數(shù)
>>> spam = [0, 1, 2, 3, 4, 5]
>>> cheese = spam
>>> cheese[1] = 'Hello!'
>>> spam
[0, 'Hello!', 2, 3, 4, 5]
>>> cheese
[0, 'Hello!', 2, 3, 4, 5]
復(fù)制代碼
看上面的代碼,非常好理解,spam將引用復(fù)制給cheese,而不是復(fù)制的對象,所以對某個引用操作,都會改變那唯一的對象。如果想為cheese引用生成一個新的對象,就需要用到拷貝函數(shù)copy()和deepcopy()。其實就是java中的淺拷貝和深拷貝。
>>> import copy
>>> spam = ['A', 'B', 'C', 'D']
>>> cheese = copy.copy(spam)
>>> cheese[1] = 42
>>> spam
['A', 'B', 'C', 'D']
>>> cheese
['A', 42, 'C', 'D']
復(fù)制代碼
deepcopy()深拷貝是指,不僅生成一個與spam一樣新的對象,連spam內(nèi)部的數(shù)據(jù)也一起復(fù)制一堆新的對象出來。就好比說把'A','B'這種元素分別換成一個個子列表,淺拷貝不會對他們復(fù)制,而深拷貝會對這些對象進(jìn)行復(fù)制。
字典
像列表一樣,“字典”是許多值的集合。但不像列表的下標(biāo),字典的索引可以使用許多不同數(shù)據(jù)類型,不只是整數(shù)。字典的索引被稱為“鍵”,鍵及其關(guān)聯(lián)的值稱為“鍵-值”對。所以可以說字典就是java中的Map。
myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
復(fù)制代碼
與列表不同的是,字典沒有順序的概念,所以不能通過操作index獲取某元素,不能使用切片,不能使用排序函數(shù)。
操作字典
基本操作
所以操作字典,就需要另辟蹊徑,使用函數(shù)keys()、values()和 items()。顧名思義,分別是獲取字典的key值們,val值們,和鍵值對本身們。
>>> spam = {'color': 'red', 'age': 42}
>>> for v in spam.values():
? ? ? ? print(v)
red
42
>>> for k in spam.keys():
? ? ? ? print(k)
color
age
>>> for i in spam.items():
? ? ? ? print(i)
('color', 'red')
('age', 42)
復(fù)制代碼
值得一提的是 spam.keys()獲得的是元組,如果希望的到對應(yīng)的列表就需要用list函數(shù)轉(zhuǎn)化。
檢查字典中是否存在鍵或值
可以利用in 或者not in 關(guān)鍵字判斷數(shù)據(jù)是否在字典中。
>>> spam = {'name': 'Zophie', 'age': 7}
>>> 'name' in spam.keys()
True
>>> 'Zophie' in spam.values()
True
>>> 'color' in spam.keys()
False
>>> 'color' not in spam.keys()
True
>>> 'color' in spam
False
復(fù)制代碼
get()和setdefault()方法
get()可以通過key值找到相對應(yīng)的value值。get有兩個參數(shù),第一個參數(shù)是key值,第二個參數(shù)是在鍵值對不存在(或者說key不存在)的時候,給予的默認(rèn)值。
>>> picnicItems = {'apples': 5, 'cups': 2}
>>> 'I am bringing ' + str(picnicItems.get('cups', 0)) + ' cups.'
'I am bringing 2 cups.'
>>> 'I am bringing ' + str(picnicItems.get('eggs', 0)) + ' eggs.'
'I am bringing 0 eggs.'
復(fù)制代碼
setdefault()有兩個參數(shù),第一個是要插入鍵值對的key值,第二個是默認(rèn)值。當(dāng)原字典中有這個key值,就什么也不做,如果原字典中沒有這個key值,就將默認(rèn)值作為value,同key一起拼成鍵值對插入到字典中。
>>> spam = {'name': 'Pooka', 'age': 5}
>>> spam.setdefault('color', 'black')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}
>>> spam.setdefault('color', 'white')
'black'
>>> spam
{'color': 'black', 'age': 5, 'name': 'Pooka'}
復(fù)制代碼
字符串操作
我們早已經(jīng)知道了字符串和其基本操作了,當(dāng)我們又學(xué)習(xí)了列表、元組、字典之后再來看一下更加豐富的處理字符串的方法。

轉(zhuǎn)移字符和原始字符
和java一樣,python也是用 \ 對特殊字符進(jìn)行轉(zhuǎn)義。同時,還有原始字符 r??梢栽谧址_始的引號之前加上r,使它成為原始字符串?!霸甲址蓖耆雎运械霓D(zhuǎn)義字符,打印出字符串中所有的倒斜杠。
>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.
復(fù)制代碼
注釋與多行字符
python單行注釋可以使用特殊字符#,同時多行注釋可以使用""".
# 這是一行注釋
"""
這是多行注釋
這是多行注釋
這是多行注釋
"""
復(fù)制代碼
有時候我們在使用print函數(shù)的時候,打印的字符串很長很長,為了頁面好看,可以使用'''將大字符串拆分成好幾行。
print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob''')
復(fù)制代碼
字符串下標(biāo)和切片
一個字符串也可以當(dāng)作列表來處理,其中元素可以看作是一個個字符。所以就可以對字符串進(jìn)行下標(biāo)操作或者切片操作。同樣的就可以利用in、not in判斷某字符是否在字符串內(nèi)了。
>>> spam = 'Hello world!'
>>> spam[0]
'H'
>>> spam[4]
'o'
>>> spam[-1]
'!'
>>> spam[0:5]
'Hello'
>>> spam[:5]
'Hello'
>>> spam[6:]
'world!'
復(fù)制代碼
一些字符串內(nèi)建方法
upper() 字符串全部變大寫
lower() 字符串全部變小寫
isupper()字符串至少有一個字母,并且所有字母都是大寫
islower()字符串至少有一個字母,并且所有字母都是小寫
isalpha()字符串只包含字母,并且非空
isalnum()字符串只包含字母和數(shù)字,并且非空
isdecimal()字符串只包含數(shù)字字符,并且非空
isspace()字符串只包含空格、制表符和換行,并且非空
startswith()字符串以該方法傳入的字符串開始
endswith()字符串以該方法傳入的字符串結(jié)束
join()拼接字符串,可指定分隔符
split()通過某值切割字符串
rjust()左填充,如果輸出數(shù)據(jù)不足,補(bǔ)充空格
ljust()右填充,如果輸出數(shù)據(jù)不足,補(bǔ)充空格
center()字符串居中,左右數(shù)據(jù)不足,補(bǔ)充空格
結(jié)束
學(xué)以致用,寫爬蟲也是我學(xué)習(xí)python的一個動力,寫了一個小腳本爬取豆瓣電影TOP250.(好像這個是爬蟲入門經(jīng)典案例吧,哈哈)代碼貼一下
import requests as rq
from bs4 import BeautifulSoup
import pandas as pd
def get_data(url):
? ? print(url)
? ? html = rq.get(url).content.decode("utf-8")
? ? soup = BeautifulSoup(html,"lxml")
? ? divItems = soup.find_all("div","item")
? ? for item in divItems:
? ? ? ? name = item.find('span',{'class':'title'}).text
? ? ? ? rating_num = item.find('span',{'class':'rating_num'}).text
? ? ? ? number = item.find('em').text
? ? ? ? imgUrl = item.find("img").attrs['src']
? ? ? ? print("----------->")
? ? ? ? print("number:"+number)
? ? ? ? numbers.append(number)
? ? ? ? print("name:"+name)
? ? ? ? names.append(name)
? ? ? ? print("rating_num:"+rating_num)
? ? ? ? rating_nums.append(rating_num)
? ? ? ? print("imgUrl:"+imgUrl)
? ? ? ? imgUrls.append(imgUrl)
? ? ? ? print("----------->")
data_df = pd.DataFrame()
numbers = []
names = []
rating_nums = []
imgUrls = []
for num in range(0,10):
? ? get_data("https://movie.douban.com/top250?start={}&filter=".format(int(num)*25))
data_df["序列"] = numbers
data_df["名稱"] = names
data_df["評分"] = rating_nums
data_df["海報"] = imgUrls
writer = pd.ExcelWriter('movie_top250.xlsx')
data_df.to_excel(writer, 'page_1', float_format='%.5f')? # float_format 控制精度
writer.save()
復(fù)制代碼
當(dāng)然,提前需要install的模塊 requests
BeautifulSoup4
pandas
openpyxl
lxml(BeautifulSoup4 的解析器)
結(jié)束。
本文章素材來源于網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系刪除。