“人生苦短,我學python”是編程屆的名言,用python寫小腳本的便捷性,讓很多其他語言的學習者把python當作輔助語言,擁有了某一個語言的功底,再來學習另外一種語言應該是十分快速的,編程理念都十分相似,只是看看語言的差異性,帶著Java的基礎,學習Python,準備上路了,
基礎的運算
安裝好python環境后,運行win+R,輸入python直接進入python的互動頁面,這邊可以進行數學運算,
>>> 2+2
4
表1 數學運算子,優先級從高到低
| 運算子 | 操作 | 例子 | 值 |
|---|---|---|---|
| ** | 指數 | 2 ** 3 | 8 |
| % | 取模/取余數 | 22 % 8 | 6 |
| // | 整除/商數取整 | 22 // 8 | 2 |
| / | 除法 | 22 / 8 | 2.75 |
| * | 乘法 | 3 * 5 | 15 |
| - | 減法 | 5 - 2 | 3 |
| + | 加法 | 2 + 2 | 4 |
由上面可以看出python前兩個基礎型別 整數、 浮點型別,這兩個和java中的概念差不多,
字串
作為基礎的型別,當然少不了字串了,和java一樣,字串可以進行拼接操作,例如:
>>> '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'
如上,‘AAA’+'BBB'可以直接進行字串的拼接,但是與java不同的是 python不會進行型別強制轉化,所以當用字串‘CCC’+int型的25的時候就會報錯,對python進行*操作,字串會進行復制,
變數名
這邊插一段,在java中進行變數宣告的時候,需要指定變數型別,在python中不需要,但是python變數名也需要一定的規則,
- 只能是一個詞,
- 只能包含字母、數字和下劃線,
- 不能以數字開頭,
型別轉化
為了讓int型的5可以轉化成字串型別,從而和字串拼接,python提供了一些內置函式,
表2 一些python內置函式
| 函式 | 作用 | 示例 |
|---|---|---|
| str() | 轉化型別為字串 | str(5) |
| int() | 轉化型別為整數 | int('5') |
| float() | 轉化型別為浮點數 | float('5') |
| print() | 列印函式 | 略 |
| input() | 讀取用戶輸入資料 | myName = input() |
| len() | 內容長度 | len(myName) |
控制流
布林值
現在引入第四個資料型別,布林值,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
在這里說一下 光理論還是不夠的,重點還是要實戰,如果你沒有最新的python入門到實戰教程,可以去小編的Python解答交流群:1148633274 免費領取,相互討論學習
比較型別
表3 比較型別
| 運算子 | 含義 |
|---|---|
| == | 等于 |
| != | 不等于 |
| < | 小于 |
| > | 大于 |
| <= | 小于等于 |
| >= | 大于等于 |
同時python也可以使用二元運算子 and、or、not同java中的與、或、非,
條件與代碼塊
你前面看到的布爾運算式可以看成是條件,它和運算式是一回事,“條件”只是在 控制流陳述句的背景關系中更具體的名稱,條件總是求值為一個布林值,True 或 False,控制 流陳述句根據條件是 True 還是 False,來決定做什么,幾乎所有的控制流陳述句都使用條件,
代碼塊
python沒有java中那種{}來區分代碼塊,python中所有的代碼塊都是通過縮進進行的,
- 縮進增加時,代碼塊開始,
- 代碼塊可以包含其他代碼塊,
- 縮進減少為零,或減少為外面包圍代碼塊的縮進,代碼塊就結束了,
>>> if 'a'=='b':
... print('真')
... else:
... print('假')
...
假
以上是一個if else 的控制流,條件后面加上冒號,并且代碼塊需要縮進方式,
while回圈的格式如下:
spam = 0
while spam < 5:
print('Hello, world.')
spam = spam + 1
另外 python 也有break 和continue 關鍵字可以使用,
for回圈
for回圈單另兒拿出來以示尊重,for回圈的格式如下:
for 關鍵字;
一個變數名;
in 關鍵字;
呼叫 range()方法,最多傳入 3 個引數;
冒號;
從下一行開始,縮退的代碼塊(稱為 for 子句),
for i in range(5):
print('Jimmy Five Times (' + str(i) + ')')
i分別執行0、1、2、3、4.
range()方法其實有三個引數,只是可以省略其中兩個,range(start、end、gap),可以指定開始、結束和步長,
>>> for i in range(0,10,3):
... print(i)
...
0
3
6
9
函式
匯入模塊
Python 程式可以呼叫一組基本的函式,這稱為“內建函式”,包括你見到過的print()、input()和 len()函式,Python 也包括一組模塊,稱為“標準庫”,每個模塊都是一個 Python 程式,包含一組相關的函式,可以嵌入你的程式之中,例如,math模塊有數學運算相關的函式,random 模塊有亂數相關的函式,等等,
利用import或者from import陳述句
自定義函式
除了內建函式,大部分的函式都是自定義的,(即使從模塊中匯入的函式也是別人自定義好的,讓你使用的)
def hello(name):
print('Hello ' + name)
def 函式名(引數):
函式體
None
在Python中有一個值稱為None,它表示沒有值,None是NoneType資料型別的唯一值(其他編程語言可能稱這個值為null、nil或 undefined),就像布林值True和False一樣,None必須大寫首字母 N,
例外處理
def temp_convert(var):
try:
return int(var)
except ValueError, Argument:
print "引數沒有包含數字\n", Argument
類似于java,python捕獲處理一場用的是try,except,只不過在except后面除了可以跟例外類(比如例子中的ValueError),還可以跟上引發一場的引數(比如例子中的Argument,其實就是try中的var)
串列
串列可以看作java中的陣列集合,可以存放一些元素,比如>>> spam = ['cat', 'bat', 'rat', 'elephant'],我們可以通過index獲取某個元素,比如spam[0]=‘cat’,同時可以從后往前拿資料,比如spam[-1]='elephant',
切片
除了直接操作index,獲取某個元素之外,還可以通過切片獲得一段子串列,
>>> spam[1:3]
['bat', 'rat']
>>> spam[0:-1]
['cat', 'bat', 'rat']
串列的拼接與復制
與java不同的是,python的串列可以自由的拼接復制,
>>> [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']
串列結合某些關鍵字和方法
-
洗掉某串列中的某元素,可以直接用del關鍵字,
-
也可以結合for回圈
>>> supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
>>> for i in range(len(supplies)):
print('Index ' + str(i) + ' in supplies is: ' + supplies[i])
- 利用 in 、not in 直接判斷某元素是否在串列中
>>> 'howdy' in ['hello', 'hi', 'howdy', 'heyas']
True
>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> 'cat' in spam
False
- index()方法判斷某元素在串列中的第一次出現的下標,沒有的話就報錯,
>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1
復制代碼
-
用 append()和 insert()方法在串列中添加值
append()方法呼叫,將引數添加到串列末尾,insert()方法可以在串列任意下標處插入一個值,insert()方法的第一個引數是新值的下標,第二個引數是要插入的新值, -
用remove()方法從串列中洗掉值
-
用sort()方法將串列中的值排序
元組
在java中,我們知道String 是被final修飾的,所以String本身是不能修改的,如果對String進行修改,其實是在記憶體中新建了一個新的String,類似的python中也有一個不可修改的資料型別——元組,元組和串列差不多,很多方法都是共通的,只不過,元組是用"()"表示,并且元組內的元素不能被修改,也不能對元組進行增加洗掉操作,
元組和串列的轉化
函式list()和tuple()將回傳傳遞給它們的值的串列和元組版本,
>>> tuple(['cat', 'dog', 5])
('cat', 'dog', 5)
>>> list(('cat', 'dog', 5))
['cat', 'dog', 5]
>>> list('hello')
['h', 'e', 'l', 'l', 'o']
參考與參考函式
>>> 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]
看上面的代碼,非常好理解,spam將參考復制給cheese,而不是復制的物件,所以對某個參考操作,都會改變那唯一的物件,如果想為cheese參考生成一個新的物件,就需要用到拷貝函式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']
deepcopy()深拷貝是指,不僅生成一個與spam一樣新的物件,連spam內部的資料也一起復制一堆新的物件出來,就好比說把'A','B'這種元素分別換成一個個子串列,淺拷貝不會對他們復制,而深拷貝會對這些物件進行復制,
字典
像串列一樣,“字典”是許多值的集合,但不像串列的下標,字典的索引可以使用許多不同資料型別,不只是整數,字典的索引被稱為“鍵”,鍵及其關聯的值稱為“鍵-值”對,所以可以說字典就是java中的Map,
myCat = {'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
復制代碼
與串列不同的是,字典沒有順序的概念,所以不能通過操作index獲取某元素,不能使用切片,不能使用排序函式,
操作字典
基本操作
所以操作字典,就需要另辟蹊徑,使用函式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)
值得一提的是 spam.keys()獲得的是元組,如果希望的到對應的串列就需要用list函式轉化,
檢查字典中是否存在鍵或值
可以利用in 或者not in 關鍵字判斷資料是否在字典中,
>>> 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
get()和setdefault()方法
get()可以通過key值找到相對應的value值,get有兩個引數,第一個引數是key值,第二個引數是在鍵值對不存在(或者說key不存在)的時候,給予的默認值,
>>> 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.'
setdefault()有兩個引數,第一個是要插入鍵值對的key值,第二個是默認值,當原字典中有這個key值,就什么也不做,如果原字典中沒有這個key值,就將默認值作為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'}
字串操作
我們早已經知道了字串和其基本操作了,當我們又學習了串列、元組、字典之后再來看一下更加豐富的處理字串的方法,
轉移字符和原始字符
和java一樣,python也是用 \ 對特殊字符進行轉義,同時,還有原始字符 r,可以在字串開始的引號之前加上r,使它成為原始字串,“原始字串”完全忽略所有的轉義字符,列印出字串中所有的倒斜杠,
>>> print(r'That is Carol\'s cat.')
That is Carol\'s cat.
注釋與多行字符
python單行注釋可以使用特殊字符#,同時多行注釋可以使用""".
# 這是一行注釋
"""
這是多行注釋
這是多行注釋
這是多行注釋
"""
有時候我們在使用print函式的時候,列印的字串很長很長,為了頁面好看,可以使用'''將大字串拆分成好幾行,
print('''Dear Alice,
Eve's cat has been arrested for catnapping, cat burglary, and extortion.
Sincerely,
Bob''')
字串下標和切片
一個字串也可以當作串列來處理,其中元素可以看作是一個個字符,所以就可以對字串進行下標操作或者切片操作,同樣的就可以利用in、not in判斷某字符是否在字串內了,
>>> spam = 'Hello world!'
>>> spam[0]
'H'
>>> spam[4]
'o'
>>> spam[-1]
'!'
>>> spam[0:5]
'Hello'
>>> spam[:5]
'Hello'
>>> spam[6:]
'world!'
一些字串內建方法
- upper() 字串全部變大寫
- lower() 字串全部變小寫
- isupper()字串至少有一個字母,并且所有字母都是大寫
- islower()字串至少有一個字母,并且所有字母都是小寫
- isalpha()字串只包含字母,并且非空
- isalnum()字串只包含字母和數字,并且非空
- isdecimal()字串只包含數字字符,并且非空
- isspace()字串只包含空格、制表符和換行,并且非空
- startswith()字串以該方法傳入的字串開始
- endswith()字串以該方法傳入的字串結束
- join()拼接字串,可指定分隔符
- split()通過某值切割字串
- rjust()左填充,如果輸出資料不足,補充空格
- ljust()右填充,如果輸出資料不足,補充空格
- center()字串居中,左右資料不足,補充空格
結束
嗚呼,python的基礎語法就算過了一遍,當然這只是基礎中的基礎,像python怎么處理多執行緒、類的概念、記憶體管理等內容有時間再看吧,不忘初心,最開始學習python只是把它當作輔助語言,寫寫小腳本什么的,不打算研究太深,畢竟時間有限,java還有很多東西要去研究,并且,除了編程,這個世界還有很多美好的事情等待我去體驗,學以致用,寫爬蟲也是我學習python的一個動力,寫了一個小腳本爬取豆瓣電影TOP250.(好像這個是爬蟲入門經典案例吧,哈哈)代碼貼一下
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()
當然,提前需要install的模塊 requests
BeautifulSoup4
pandas
openpyxl
lxml(BeautifulSoup4 的決議器)
結束,
在這里說一下 光理論還是不夠的,重點還是要實戰,如果你沒有最新的python入門到實戰教程,可以去小編的Python解答交流群:1148633274 免費領取,相互討論學習
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/392.html
標籤:Python
下一篇:python 基礎練習題
