文章目錄
- 基礎入門
- 菜鳥提升
- 基礎晉級
- 高手之路
- 內置包庫
- 奇技淫巧
基礎入門
1 python
即在命令列輸入python,進入Python的開發環境,
2 x = 1+2*3-4/5+6**2
加減乘除四則混合運算,可以當作計算器用了,其中**表示乘方,
3 print(x)
即輸出x的值,如果感覺麻煩,可以直接輸入x,然后回車,也能看到x的值,
4 if x>5 : print(x)
簡單的判斷,如果x>5,則列印x,
5 for i in range(10): print(i)
簡單的回圈,其中range(10)表示創建一個可迭代的自然序列,range(10)表示0,1,2...10,
6 'hello '+"world"
python中可以用單引號或雙引號表示字串,+可以拼接兩個字串,
7 def addOne(x):return x+1
python中通過def來宣告函式,函式名稱和函式主體之間用:分隔,宣告上式之后可以直接在命令列中呼叫,
>>> def addOne(x):return x+1
...
>>> addOne(1)
2
8 x = [1,2,'abc',3,2]
python中可通過[]來創建一個串列,串列中的成員可以為任意資料型別,
>>> x = [1,2,'abc',3,2]
>>> x
[1, 2, 'abc', 3, 2]
9 x[0]
python中通過方括號和冒號來進行索引,且索引從0開始,
>>> x[0]
1
10 y = set(x)
set為集合,集合中不允許存在相同的元素,所以將一個串列轉成集合之后,會洗掉串列中的重復元素,
>>> y = set(x)
>>> y
{1, 2, 3, 'abc'}
菜鳥提升
11 pip install numpy
在命令列中運行pip命令,進行python相關包的安裝,安裝之后,再運行python進入python環境,
12 import numpy as np
匯入numpy包,并給與其np的標識,從而我們可以通過np.的形式來呼叫numpy中的函式,
13 x = np.arange(10)
生成一個自然序列,與range,但是np.arange得到的可進行運算的陣列(array),
>>> x = np.arange(10)
>>> x
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
14 x**2
沒什么好說的,只是演示以下array可以使用運算子,
>>> x**2
array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81], dtype=int32)
15 x.tolist()**2
這是一行錯誤的代碼,其中x.tolist()是將x從array轉成list,然后再算其平方,然而串列(list)這種資料格式在python中是不能直接進行計算的,所以報了錯,
>>> x.tolist()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> x.tolist()**2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for ** or pow(): 'list' and 'int'
16-18
>>> if len(x)==5:print(x)
... elif len(x)==10: print(x.tolist()+x)
... else: print(x[0])
...
[ 0 2 4 6 8 10 12 14 16 18]
len表示獲取x的長度,python中通過==來判斷二者是否相等,上式表示,如果x的長度等于5,則列印x;或者x的長度為10,則列印x.tolist()+x;如果x的長度為其他值,則列印x[0],
由于x的長度是10,所以執行了第2行代碼,而且我們發現,python非常智能地按照array的規則計算了x.tolist()+x,這說明,當運算式中同時存在array和list的時候,python會自動將list轉為array,
19-20
>>> d = {"a":1,"b":2,"c":3}
>>> d["a"]
1
d即為字典,可通過鍵值對的形式進行索引,案例中,"a","b","c"為鍵(key),1,2,3為值(value),通過key來索引value,非常便利,
基礎晉級
21 a = 1,2,3
逗號分隔的變數會默認組成元組,元組會根據等號左邊變數的個數來進行賦值,
>>> a = 1,2,3
>>> a
(1, 2, 3)
22 a,b = 1,2
元組可以通過元素對應的位置來進行一一賦值,由此而帶來的便利就是可以更快速地交換兩個變數的值,
>>> a,b = 1,2
>>> a
1
>>> b
2
>>> b,a = a,b
>>> b
1
>>> a
2
23 print(f"a={a}")
在python中,字串前面可有四種前綴,其中f代表字串格式化,即format,在f字串中,大括號內部會自動轉換為變數,
>>> print(f"a={a}")
a=2
24 a = False if a==2 else True
在Python中,False和True為bool型的兩個值,
在python中,可通過if...else構成三元運算式,上式可等價為回應的C語言a = a==2 ? 0 : 1,
>>> a = False if a==2 else True
>>> a
False
25 x = [i for i in range(10)]
在python中,可通過for回圈來創建元組、串列以及字典,
>>> x = [i for i in range(10)]
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
26-30
def fac(n):
if n == 0:
return 1
else:
return n*fac(n-1)
這是一個階乘演算法,在pyhton中,代碼塊以空格的形式存在,
高手之路
31 fac = lambda n : 1 if n==0 else n*fac(n-1)
這同樣是一個階乘演算法,與26-30表示的是同一個函式,此即lambda運算式,可以更加方便地創建函式,
32 op = {"add":lambda a,b:a+b, "minus":lambda a,b:a-b}
Python中沒有switch..case運算式,而字典+lambda運算式可以彌補這一點,上式中,op["add"]表示呼叫函式lambda a,b:a+b,即加法;op["minus"]表示呼叫函式lambda a,b:a-b,即減法,
正因lambda運算式并不需要命名,所以也稱匿名函式,
>>> op = {"add":lambda a,b:a+b, "minus":lambda a,b:a-b}
>>> op["add"](3,4)
7
>>> op["minus"](3,4)
-1
33-34
while a<5:a+=1
else: print(f"a={a}")
while回圈大家都十分了解,即當a<5時執行a+=1的程式,else表示當a<5不滿足時執行的代碼,
>>> while a<5:a+=1
... else: print(f"a={a}")
...
a=5
35-37
xs = []
for x in range(10): xs.append(x)
else : print(xs)
和while..else相似,for也有和else的組合,其語意也很雷同,表示當執行完for回圈之后執行else的陳述句,
>>> xs = []
>>> for x in range(10): xs.append(x)
... else : print(xs)
...
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
38-40
from matplotlib import pyplot as plt
plt.plot(np.random.rand(10))
plt.show()
from...import表示從matplotlib中匯入pyplot,matplotlib是python中最常用的畫圖包,功能非常強大,
plt.plot是最常用的繪圖函式,python在執行繪圖函式之后,會將圖片放入記憶體,當使用plt.show()之后,才會將其顯示到螢屏上,
>>> from matplotlib import pyplot as plt
>>> plt.plot(np.random.rand(10))
[<matplotlib.lines.Line2D object at 0x00000232FA511B10>]
>>> plt.show()

41-48
class person:
def __init__(self,name):
self.name = name
def selfIntro(self):
print(f"my Name is {self.name}")
@staticmethod
def say(string):
print(string)
盡管python主打函式式,但在python中,一切皆物件,而class則可以宣告一個類,
在類中,通過self來宣告類成員,類似有些語言中的this.,
__init__為python內置的初始化函式,在類實體化之后,會首先運行這個函式,
@staticmethod為靜態類標識,靜態類可以不經實體而使用,
>>> class person:
... def __init__(self,name):
... self.name = name
... def selfIntro(self):
... print(f"my Name is {self.name}")
... @staticmethod
... def say(string):
... print(string)
...
>>> person.say("hello")
hello
>>> person.selfIntro()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: person.selfIntro() missing 1 required positional argument: 'self'
>>> Li = person("Li")
>>> Li.selfIntro()
my Name is Li
>>>
49 xs=[i for i in range(10) if i%2==0]
通過推導式來快速通過篩選來創建串列,
>>> xs=[i for i in range(10) if i%2==0]
>>> xs
[0, 2, 4, 6, 8]
50 d = dict([[1,2],[4,5],[6,7]])
通過dict可將串列轉為字典,前提是串列中的元素必須為二元組,
>>> d = dict([[1,2],[4,5],[6,7]])
>>> d
{1: 2, 4: 5, 6: 7}
內置包庫
51 time.time()
當然前提是要匯入import time,這其實是個很常用的函式,以時間戳的形式回傳當前的時間,
詳情可查看python內置時間模塊.
>>> import time
>>> time.time()
1634558595.5172253
52 calendar.prmonth(2021,10)
可列印日歷,,,
>>> import calendar
>>> calendar.prmonth(2021,10)
October 2021
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
>>>
53 os.listdir(r"c:\Windows")
可回傳檔案夾內部的檔案和子檔案夾,其中r標識字串中的\不用于轉義,
>>> import os
>>> os.listdir(r"c:\Windows")
['addins', 'appcompat', 'apppatch', 'AppReadiness', 'assembly', 'bcastdvr', 'bfsvc.exe', ...
54 glob.glob(r"c:\Windows\*.ini")
可通過通配符回傳檔案夾內部的檔案,
>>> import glob
>>> glob.glob(r"c:\Windows\*.exe")
['c:\\Windows\\bfsvc.exe', 'c:\\Windows\\explorer.exe', 'c:\\Windows\\HelpPane.exe', 'c:\\Windows\\hh.exe', 'c:\\Windows\\notepad.exe', 'c:\\Windows\\py.exe', 'c:\\Windows\\pyw.exe', 'c:\\Windows\\regedit.exe', 'c:\\Windows\\splwow64.exe', 'c:\\Windows\\Wiainst64.exe', 'c:\\Windows\\winhlp32.exe', 'c:\\Windows\\write.exe']
>>>
55-56 urllib
response = urllib.request.urlopen('https://blog.csdn.net/')
html = response.read()
urllib是python內置的http決議請求庫,是大多數爬蟲學習者接觸的第一個工具,
其中,read()用于讀取網頁資料,當然,得到的網頁資料是未解碼資料,
import urllib.request
response = urllib.request.urlopen('https://blog.csdn.net/')
html = response.read()
57-58 正則運算式re
content = html.decode('utf-8')
cn = re.findall(r"[\u4e00-\u9fa5]+", content)
此為正則運算式的簡單應用,re.findall表示從字串content中篩選出符合r"[\u4e00-\u9fa5]+"要求的值,所以第一步,是通過utf-8對content進行解碼,
而在utf-8中,漢字的序號為\u4e00-\u9fa5;在正則運算式中,[]表示符合條件的集合,+表示出現任意多個符合條件的字符,
>>> import re
>>> content = html.decode('utf-8')
>>> cn = re.findall(r"[\u4e00-\u9fa5]+", content)
>>> cn[:20]
['博客', '專業', '技術發表平臺', '博客為中國軟體開發者', '從業人員', '初學者打造交流的專業', '技術發表平臺', '全心致力于幫助開發者通過互聯網分享知識', '讓更多開發者從中受益', '一同和', '開發者用代碼改變未來', '頭部', '廣告', '頻道首頁右側', '打底', '頭部', '廣告', '題目征集', '你出我答', '做']
>>>
59-60 創建視窗程式tkinter
frame = tkinter.Tk()
frame.mainloop()
其中frame即為tkinter創建的視窗,而mainloop表示進入視窗的訊息回圈,

>>> import tkinter
>>> frame = tkinter.Tk()
>>> frame.mainloop()
奇技淫巧
61 judge = lambda a,b,f1,f2 : (f1 if a>b else f2)(a,b)
表示,如果a>b則執行f1(a,b),否則執行f2(a,b)
62 eval('[a,b,c]')
eval函式會把字串轉為可執行的運算式,
63 list(zip(*lst))
zip可以像拉鏈一樣將陣列中對應的值縫合起來,以元組的形式重新存盤,根據這個特性,可完成串列的"轉置",
>>> lst = [[1,2], [3,4], [5,6]]
>>> list(zip(*lst))
[(1, 3, 5), (2, 4, 6)]
64 max(set(lst),key=lst.count)
其中lst為串列,count(i)是串列的內置函式,表示統計i出現的個數,set表示將lst轉為集合,從而剩排除重復值,
max(set(lst),key=lst.count)表示通過lst.count這個指標來得到set(lst)中出現次數最多的那個值——即求眾數,
65 dict(zip(myDict.values(),myDict.keys()))
通過zip實作字典的字串互換操作,
66 [*a,*b]
*可以取出串列中的元素,所以[*a,*b]可以起到合并串列的作用,
>>> a = [1,2,3]
>>> b = [4,5,6]
>>> [*a,*b]
[1, 2, 3, 4, 5, 6]
但星號索引的用途不止于此,在函式傳參時也有意想不到的后果
>>> addd = lambda a,b,c : a+b+c
>>> addd(*a)
6
67 {**a,**b}
雙星號可以取出字典中的元素,實作字典合并的功能,
>>> a = {"b":1,"c":2}
>>> b = {"d":3,"e":4}
>>> {**a,**b}
{'b': 1, 'c': 2, 'd': 3, 'e': 4}
同樣,雙星號索引的用途也不止于此
>>> addd(3,**a)
6
68 s == s[::-1]
在python中,對串列或者字串采用:進行索引,例如a:b指的是從a到b的資料;當采用雙引號::時,引號間的值的意義就發生了變化,例如a:b:c表示從a到b,間隔為c的資料,
據此,可以得到::-1表示將字串顛倒過來,據此可以判斷一個字串是否為回文結構,
盡管這些代碼還沒涉及到多執行緒等功能(主要是行數比較多),也沒涉及到和類相關的一些功能(也是因為行數多),但如果您全都一目了然或者曾經用過,那么我愿稱君為高手!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325876.html
標籤:python
