【Python雜貨鋪】速學python基礎

2021-02-21 啤酒就辣條

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

基礎的運算

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

>>> 2+2
4

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

操作符操作例子值**指數2 ** 38%取模/取餘數22 % 86//整除/商數取整22 // 82/除法22 / 82.75*乘法3 * 515-減法5 - 23+加法2 + 24

由上面可以看出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

比較類型

表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安裝教程
    from CleveroadPython vs Ruby且學會python後運用python能極大地提高工作效率等等。今天就來教大家如何安裝python,走向新世界的大門!1.首先,我們在瀏覽器上搜索python,進入python官網。
  • python語法基礎
    學一門語言,基礎語法一定要紮實。很多入門的編程書籍,都會花大量的篇幅來介紹基礎語法,對於毫無編程經驗的新手而言,這樣的書籍無疑是很友好的,但是對於有編程經驗的開發者而言,很多的基礎語法是通用的, 只需花費較少的時間瀏覽下基礎語法,將精力集中在語言獨有的特徵上即可。
  • Python零基礎入門-03-Python基礎語法
    Python零基礎入門-03-Python基礎語法本節課的知識點:1,python系列教程的學習方法。2,熟悉Python的基礎語法內容。1,python系列課程學習方法由於python屬於腳本語言,如果單純的解釋語法沒有什麼實在的意義,所以我python系列的課程都是以視頻講解為主,至於這裡的文章,是給你複習用的。2. 基礎語法python的基礎語法都將以小例子作為驅動來講解。如果你有其他程式語言的基礎,那麼直接看文章就會很快上手。
  • Python基礎 | 大學小白如何入門Python程序設計
    二、如何進行自主學習其實python非常適合初學者入門。相比較其他不少主流程式語言,有更好的可讀性,因此上手相對容易。自帶的各種模塊加上豐富的第三方模塊,免去了很多「重複造輪子」的工作,可以更快地寫出東西。
  • python基礎學習教程:Python基礎語法
    在本章中我們將來學習 Python 的基礎語法,讓你快速學會 Python 編程。第一個 Python 程序交互式編程交互式編程不需要創建腳本文件,是通過 Python 解釋器的交互模式進來編寫代碼。>>> '''在學習過程中有什麼不懂得可以加我的python學習交流扣扣qun,934109170群裡有不錯的學習教程、開發工具與電子書籍。與你分享python企業當下人才需求及怎麼從零基礎學習好python,和學習什麼內容。'''
  • 學python?不是一個python入門教程就行,學之前你必須知道這些
    看重前景方向:那麼學python大數據分析或是python機器學習。其中大數據分析相對容易,python提供的是語言的環境,數據分析會有許多對應的工具包,會包含各種分析模型,隨著經驗積累會很熟練照到對應項目的分析模型。
  • Python基礎篇-10 Windows安裝Python(圖解)
    Hello,大家好,我是小777很多小白不知道Python基礎從哪裡開始學習,從今開始我每日會分享一篇從零基礎學Python編程基礎。還有很多不知道學Python能幹什麼?在這裡我會為大家一一分享,我感覺還是很有意思的。雖然對於那些會的人不難,但是對於小白來說這確實是很好的一種學習思路。
  • python入門書籍,輕鬆學python
    全民學python的熱潮已經開啟,然而,對於這種情況,還是有很多小夥伴私信我python到底該怎麼入門?沒接觸過編程能學會嗎?
  • 【Python基礎】python使用python-docx操作word
    1、python-docx庫介紹該模塊兒可以創建、修改Word(.docx)文件;python-docx使用官網:python-docx官網我們在安裝此模塊兒使用的是pip install python-docx,但是在導入的時候是import docx;2、Python讀取Word文檔內容注意:每進行一個操作,必須保存一下,否則等於白做;1)word文檔結構介紹在這裡插入圖片描述2)python-docx
  • Python很難學嗎?幾張圖教你速成Python(建議收藏)
    一、什麼是python?隨著人工智慧的興起,近幾年Python的受歡迎程度可謂是扶搖直上,當然了學習的人也是愈來愈多,同時Python比較簡單,容易學習和掌握,學了不容易頭涼,對於沒有編程基礎的人來說比較容易上手,python的高薪也吸引著很多人。
  • 如何從零開始學Python
    如何從零開始學python?書聲琅琅教育番茄老師介紹,零基礎的朋友學python相對來講難度要大,但是很多python大牛都是從零基礎上來的,對於這些python大牛來講,參加合理的培訓指導和有一套python學習路線是分不開的,有目標有計劃的學習才能更加高效。
  • 開課吧:Python是什麼意思?為什麼有那麼多人學Python?
    python非常容易上手,而且能幹很多事情,WEB開發,機器學習人工智慧,數據分析,量化投資,爬蟲等,基本可以應用到各行各業,而且大家都在做基於PYTHON的庫,使得PYTHON語言變成一門直接拿來就能用的語言,更像一種工具了,比如機器學習,可能理論很複雜,但是實際在PYTHON中僅僅幾行代碼就能實現,不用花太多時間用在碼代碼上面,python 現在是越來越火
  • 2天學全Python面試基礎(1)
    通過列出30個python面試問題和答案,本文涵蓋在Python面試中經常問到的問題。如果您是該行業的新手,本基礎篇將極大地幫助您。我們衷心希望這篇文章在準備面試時會有所幫助。Python的需求量很大,必須與成千上萬擁有與python技能的申請人競爭,才能在就業市場中找到工作。
  • Python基礎篇-13 Python不是內部或外部命令的解決方法
    公眾號關注「專攻python」,設為「星標」重磅文章,第一時間送達!!
  • 資源 | 全機器學習和Python的27個速查表(完整版)
    這裡只包括所發現的最全面的速查表。神經網絡架構(NeuralNetwork Architectures)來源:http://www.asimovinstitute.org/neural-network-zoo/
  • 學python能找到女朋友嗎(python基礎教程)
    編者按:學習python近兩年,談談我對於python的一點小理解,也從一些方面談談自己微薄的想法,本文會介紹如何學習Python。實現一個微型的HTTP服務程序來說是很簡單的事情,在Python下,只需要一個命令行,為了提高大家的編程效率,那就趕快關注本文吧!
  • Python視頻教程網課編程零基礎入門數據分析網絡爬蟲全套Python...
    教程大合集,包含python所有就業方向,每套課程均來自市面上主流培訓機構的原版教程,價值都在數百元以上 每套課程均包含:視頻課程+課件+原始碼 重要:建議根據自己工作方向和需求,重點選擇2到3套課程學精,吃透,然後在工作 重要:零基礎小白建議先選擇零基礎全能篇的一套課程學精,然後再根據自 己的需求和規劃選擇學習其他方向課程,學完後一定要多實踐
  • Python基礎
    usr/bin/python#coding=utf-8print("hello world!");Python 基礎語法$ python test.py以下劃線開頭的標識符是有特殊意義的。python中單行注釋採用 # 開頭。python 中多行注釋使用三個單引號(''')或三個雙引號(""")。縮進相同的一組語句構成一個代碼塊,我們稱之代碼組。
  • 人生苦短,我用Python,那麼問題來了,普通人要學python嗎?
    最近娃他爸去幼兒教育店集中地兒瞎晃悠,震驚的發現這年頭六歲娃兒都要學編程了,當時我的表情是這樣的。   話說麼哥在金融和IT行當混跡了多年,python一直是被我隨手拿來當個小工具用用,有時候偷懶用python弄個excel自動化整理工具,有時候拿來上各種網站爬蟲搜集點信息,有時候也會拿來寫點量化小工具。那麼到底什麼是python?
  • 可能是史上最全機器學習和Python速查表(附下載連結)
    當我開始刷新這個主題時,我遇到了各種「速查表」,這裡僅列出了需要知道的給定主題的所有要點。 最後,我收集了與機器學習相關的速查表。有些我經常參考,並且認為其他人也可能從中受益。因此, 這篇文章把我從網上發現的很好的27個速查表分享出來,以供大家參考。後臺回復關鍵詞「速查表」下載27個速查表。