【Python雜貨鋪】速學python基礎

「人生苦短,我學python」是編程屆的名言。用python寫小腳本的便捷性,讓不少其餘語言的學習者把python看成輔助語言。擁有了某一個語言的功底,再來學習另一種語言應該是十分快速的。編程理念都十分類似,只是看看語言的差別性。帶着Java的基礎,學習Python,準備上路了。html

基礎的運算

安裝好python環境後,運行win+R,輸入python直接進入python的交互頁面,這邊能夠進行數學運算。java

>>> 2+2
4
複製代碼

表1 數學操做符,優先級從高到低python

操做符 操做 例子
** 指數 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進行*操做,字符串會進行復制。bash

變量名

這邊插一段,在java中進行變量聲明的時候,須要指定變量類型,在python中不須要,可是python變量名也須要必定的規則。多線程

  1. 只能是一個詞。
  2. 只能包含字母、數字和下劃線。
  3. 不能以數字開頭。

類型轉化

爲了讓int型的5能夠轉化成字符串類型,從而和字符串拼接,python提供了一些內置函數。
表2 一些python內置函數app

函數 做用 示例
str() 轉化類型爲字符串 str(5)
int() 轉化類型爲整數 int('5')
float() 轉化類型爲浮點數 float('5')
print() 打印函數
input() 讀取用戶輸入數據 myName = input()
len() 內容長度 len(myName)

控制流

布爾值

如今引入第四個數據類型,布爾值。python的布爾值也是有真或者假,可是python中的真爲True(注意T必須大寫),假爲False(F也必須爲大寫),一樣的布爾類型不能與其餘類型相比較。dom

>>> 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 複製代碼

比較類型

表3 比較類型編程語言

操做符 含義
== 等於
!= 不等於
< 小於
> 大於
<= 小於等於
>= 大於等於

同時python也可使用二元操做符 andornot同java中的與、或、非。

條件與代碼塊

你前面看到的布爾表達式能夠當作是條件,它和表達式是一回事。「條件」只是在 控制流語句的上下文中更具體的名稱。條件老是求值爲一個布爾值,True 或 False。控制 流語句根據條件是 True 仍是 False,來決定作什麼。幾乎全部的控制流語句都使用條件。

代碼塊

python沒有java中那種{}來區分代碼塊,python中全部的代碼塊都是經過縮進進行的。

  1. 縮進增長時,代碼塊開始。
  2. 代碼塊能夠包含其餘代碼塊。
  3. 縮進減小爲零,或減小爲外面包圍代碼塊的縮進,代碼塊就結束了。
>>> 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、一、二、三、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']
複製代碼

列表結合某些關鍵字和方法

  1. 刪除某列表中的某元素,能夠直接用del關鍵字。

  2. 也能夠結合for循環

>>> supplies = ['pens', 'staplers', 'flame-throwers', 'binders']
>>> for i in range(len(supplies)):
print('Index ' + str(i) + ' in supplies is: ' + supplies[i])
複製代碼
  1. 利用 in 、not in 直接判斷某元素是否在列表中
>>> 'howdy' in ['hello', 'hi', 'howdy', 'heyas']
True
>>> spam = ['hello', 'hi', 'howdy', 'heyas']
>>> 'cat' in spam
False
複製代碼
  1. index()方法判斷某元素在列表中的第一次出現的下標,沒有的話就報錯。
>>> spam = ['Zophie', 'Pooka', 'Fat-tail', 'Pooka']
>>> spam.index('Pooka')
1
複製代碼
  1. 用 append()和 insert()方法在列表中添加值
    append()方法調用,將參數添加到列表末尾。insert()方法能夠在列表任意下標處插入一個值。insert()方法的第一個參數是新值的下標,第二個參數是要插入的新值。

  2. 用remove()方法從列表中刪除值

  3. 用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!'
複製代碼

一些字符串內建方法

  1. upper() 字符串所有變大寫
  2. lower() 字符串所有變小寫
  3. isupper()字符串至少有一個字母,而且全部字母都是大寫
  4. islower()字符串至少有一個字母,而且全部字母都是小寫
  5. isalpha()字符串只包含字母,而且非空
  6. isalnum()字符串只包含字母和數字,而且非空
  7. isdecimal()字符串只包含數字字符,而且非空
  8. isspace()字符串只包含空格、製表符和換行,而且非空
  9. startswith()字符串以該方法傳入的字符串開始
  10. endswith()字符串以該方法傳入的字符串結束
  11. join()拼接字符串,可指定分隔符
  12. split()經過某值切割字符串
  13. rjust()左填充,若是輸出數據不足,補充空格
  14. ljust()右填充,若是輸出數據不足,補充空格
  15. 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 的解析器)

結束。

相關文章
相關標籤/搜索