“人生苦短扬霜,我學(xué)python”是編程屆的名言。用python寫小腳本的便捷性而涉,讓很多其他語言的學(xué)習(xí)者把python當(dāng)作輔助語言畜挥。擁有了某一個語言的功底,再來學(xué)習(xí)另外一種語言應(yīng)該是十分快速的婴谱。
基礎(chǔ)的運算
安裝好python環(huán)境后蟹但,運行win+R,輸入python直接進(jìn)入python的交互頁面谭羔,這邊可以進(jìn)行數(shù)學(xué)運算华糖。
>>> 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ù)瘟裸、 浮點類型客叉。這兩個和java中的概念差不多。
這里多說一句,小編是一名python開發(fā)工程師兼搏,這里有我自己整理的一套最新的python系統(tǒng)學(xué)習(xí)教程卵慰,包括從基礎(chǔ)的python腳本到web開發(fā)、爬蟲佛呻、數(shù)據(jù)分析裳朋、數(shù)據(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)行類型強制轉(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)化類型為浮點數(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á)式是一回事寡键。“條件”只是在 控制流語句的上下文中更具體的名稱锥惋。條件總是求值為一個布爾值昌腰,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é)運算相關(guān)的函數(shù)凤优,random 模塊有隨機數(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蛮寂,使它成為原始字符串蔽午。“原始字符串”完全忽略所有的轉(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ù)不足瘾腰,補充空格
ljust()右填充皆的,如果輸出數(shù)據(jù)不足,補充空格
center()字符串居中蹋盆,左右數(shù)據(jù)不足费薄,補充空格
結(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)系刪除凳厢。