Python學習筆記(一)


[TOC]

 

簡介

Python是一種解釋型面向對象動態數據類型的程序設計語言

 

Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。

  • 解釋型語言: 這意味着開發過程中沒有編譯這個環節。類似於PHP和Perl語言。
  • 交互式語言: 這意味着,您可以在一個 Python 提示符 >>> 后直接執行代碼。
  • 面向對象語言: 這意味着Python支持面向對象的風格或代碼封裝在對象的編程技術。

——————————————————————————————————————————

Python 特點

1.易於學習:Python有相對較少的關鍵字,結構簡單,和一個明確定義的語法,學習起來更加簡單。

2.易於閱讀:Python代碼定義的更清晰,偽代碼本質

3.易於維護:Python的成功在於它的源代碼(開源免費)是相當容易維護的。

4.一個廣泛的標准庫:Python的最大的優勢之一是豐富的庫,跨平台的,在UNIX,Windows和Macintosh兼容很好。

5.互動模式:互動模式的支持,您可以從終端輸入執行代碼並獲得結果的語言,互動的測試和調試代碼片斷。

6.可移植:基於其開放源代碼的特性,Python已經被移植(也就是使其工作)到許多平台。

7.可擴展:如果你需要一段運行很快的關鍵代碼,或者是想要編寫一些不願開放的算法,你可以使用C或C++完成那部分程序,然后從你的Python程序中調用。

8.數據庫:Python提供所有主要的商業數據庫的接口。

9.GUI編程:即用戶圖形界面,Python支持GUI可以創建和移植到許多系統調用。

10.可嵌入: 你可以將Python嵌入到C/C++程序,讓你的程序的用戶獲得"腳本化"的能力。

———————————————————————————————————————————

一、環境搭建

  • 使用Anaconda3的jupyter notebook進行開發,官網下載,安裝配置環境,打開cmd或prompt,輸入jupyter notebook。

注:IE瀏覽器進入WebUI需要token,token只有通過prompt命令行啟動時才有——其他瀏覽器不需要

anaconda-navigator #導航視窗
jupyter notebook  #開發本本
  • 默認的工作空間是用戶目錄,現在進行修改
#生成jupyter的配置文件
jupyter notebook --generate-config 
#打開生成的jupyter_notebook_config.py,配置工作空間位置
c.NotebookApp.notebook_dir = 'D:\JupyterProject'
  • 確保中文不亂碼
# coding=utf-8   指定編碼支持中文,3.x無需

工程結構:

  • Python工程結構

    • 模塊(module)

    • 一個Python文件就是一個模塊

      • .py source code
      • .pyc compiled bytecode
      • .pyo optimized bytecode
  • 包(package)

  • 包含多個Python文件

    • __init__.py ——必須要由,不然就是一個普通目錄而不是py包
  • 部分導入

    • from xx import path

二、一般特性

!!!編程規范:PEP8

變量:

  1. _或字母開頭,_ 、字母和數字組成
  2. 弱類型,類型不是必須指定、類型不固定
  3. 大小寫敏感
  4. 不能使用關鍵字
import keyword
keyword.kwlist #查看關鍵字列表

注釋:

  1. 單行注釋:#號
  2. 多行注釋:三個單或雙引號 ,字符串賦值。也可做為注釋

內置函數:

  1. type() :返回對象類型
  2. dir() :函數不帶參數時,返回當前范圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表
  3. input()/print() : 輸入/打印 輸出
  4. id() :返回對象的地址 ,一般用來判斷兩個變量是否引用了同一個值

———————————————————————————————————————————

三、數據類型

1、數值類型

a)數值類型:int 、float、complex復數

  • int型式沒有大數限制的
  • 可以用下划線來標記位數,但是在小數點前后不能使用_

1565077138926

b)操作符

操作符 說明 操作符 說明
x + y 加法 int(x) 轉換成整數
x - y 減法 float(x) 轉換成浮點數
x * y 乘法 complex(re, im) 創建一個復數
x / y 除法 c.conjugate() 返回復數的共軛復數
x // y 除后取整 divmod(x, y) 返回一個包含商和余數的元組
x % y 除后取余 pow(x, y) 返回x的y次方
-x 負數 x y** 返回x的y次方
abs(x) 取絕對值 round(x[, n]) 方法返回浮點數x的四舍五入

序列Seq

2、列表 list[]

a)特點

  • 有序,可使用位置索引
  • 表長度和元素都是可變
  • 可儲存不同類型的數據

b)使用

  • 創建:['one', 2, [3, 4], (5, 6)]
  • 獲取:兩套下標,從0起始,從左往右下標為正,從右往左下標為負
  • 判斷:in 和 not in

——————————————————————————————————————————

3、元組

a)特點

  • 有序

  • 長度和元素都不可變,安全級別較高的場景應用

    • (元素的引用地址不能變,但地址內的值可變)
  • 可以存儲不同類型

b)使用

  • 創建 : (1,”box",3.62) 、1,”box",3.62、tuple([1,”box",3.62])
  • 獲取:兩套下標,x[0], x[2], x[-1], x[-3]
  • 判斷:in 和 not in

———————————————————————————————————————————

4、列表&元組的操作

a)切片

  • 通過切片獲得子集

    • [start​ : end : ​step]

      • start:起始索引,從0開始,-1表示結束,缺省則為0
      • end:結束索引,不被包括,缺省則為長度,
      • step:步長,end-start,步長為正時,從左向右取值。步長為負時,反向取值。缺省為1
  • 正向取偶數下標子集:x[0::2]、x[::2]

  • 反向取間隔下標子集:x[-1:0:-2]

     

b)遍歷

#使用縮進代表子代碼塊
for x in list:
	print(x)

 

c)混合

將可迭代的對象作為參數,將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的對象

//zip 拉鏈
matrix = [[1, 2, 3, 4],[5, 6, 7, 8],[9, 10, 11]]
//最短原則
list(zip(*matrix))    # result: [(1, 5, 9), (2, 6, 10), (3, 7, 11)]
//元組補空
t = (1,2,3,4)
list(zip(t))

———————————————————————————————————————————

5、range類型

a)特性

  • 一段不可變數字序列
  • 經常被用作for里面來指定循環次數

b)使用

  • 創建:range(start, stop, step)

    • start 起始值,默認為0
    • stop 終止值,不包括在內
    • step 步長,默認為1,可為負,從右往左
  • 切片: x[1:-1:1],中括號[]代替小括號,語法規則同創建。

  • 遍歷:for v in range(0,10,1):print(v)

 

———————————————————————————————————————————

6、列表、元組、range轉換

  • 列表元組可以互轉:tuple(lst) | list(tup)
  • range到列表元組:list(r) | tuple(r)

———————————————————————————————————————————

7、pack & unpack

a)pack ——打包

  • 變量轉序列

    t=1,2,3
    #t=(1,2,3) 
    s='x','y','z'
    #s=('x','y','z')
    

b)unpack ——解包

  • 序列轉變量

    a,b,c=t
    #a=1,b=2,c=3
    
  • 使用*號代表出現0次或多次

    a,*b=t
    #a=1,b=[2,3]
    
    #超長時
    *a,c,d,e=t
    #t中只有三個元素,因此a=[]
    
    
  • swap交換: a,b=b,a

 

8、常見序列操作

  • 數據:s = [1,2,3] t = [4,5,6] n = 2
操作符 說明
s+t 拼接:[1,2,3,4,5,6]
s * n or n * s 乘法:[1,2,3,1,2,3] ,重復序列
len(s) 計算序列的長度3
min(s) 獲得序列中的最小值:1
max(s) 獲得序列中的最大值:1
s.index(x[, i[, j]]) 獲得第1個x元素的索引 (索引值在i和j之間),指定范圍內搜索元素值的下標
s.count(x) 序列x元素出現的次數

 

  • 可變序列支持的操作(List) ——元組和range都不支持
操作符 說明
s[i] = x 更新指定索引的值
s[i:j] = t 使用序列t替換s中的i到j的值
del s[i:j] 等同於s[i:j] = []
s[i:j:k] = t 使用序列t中的值替換s[i:j:k]的值
del s[i:j:k] 刪除s[i:j:k]的值
s.append(x) 將值x添加到序列的末尾
s.clear() 清空序列,相當於del s[:]
s.copy() 創建一個s的淺拷貝
s.extend(t) 使用序列t擴展序列s
s.insert(i, x) 在序列s的i索引處插入值x
s.pop(i) 返回序列s中索引為i的值,並將該值從序列中移除
s.remove(x) 將序列中<第一個>值為x的元素移除
s.reverse() 將序列s倒序排列

9、集合 Set

a)特性

  • 數據唯一不重復
  • 無序,沒有索引下標

b)創建 :

空集合 s=set()

非空集合 s={1,2,3,4,5}

c)操作:

並集:s1|s2|s3

交集:s1&s2&s3

差集:s1-s2-s3

對等差分 :s1^s2^s3 並集減交集

d)判斷

超集:issupperset()

子集:issubset()

相交: isdisjoint()

10、字典(Dict)

性質類似於Map映射

a)特性

  • 通過鍵值對(key-value)來儲存數據
  • 儲存的數據是無序的,可使用鍵索引
  • 鍵是必須唯一,但值可以不唯一
  • 鍵的類型只能是字符串、數字或元組,值可以是任何

b)創建

#空Dict
empty_dict = {} 
#鍵值對
dict_1 = {1:'one', 2:'two', 3:'three'}
#構造函數
dict_2 = dict(one=1, two=2, three=3)

c)獲取

x=d[1]
x=d['one']
x=d.get(1,"缺省值") #當get的key值不存在時,返回缺省值

d)遍歷

#遍歷字典的鍵
for k in x: #默認是Dict的鍵值集合,x.keys()
    print(k)
#遍歷字典的值
for v in x.values():
    print(v)
#遍歷字典的鍵和值
for k,v in x.items():
    print(k,v)

 

11、字符串

a )定義 :

單引號 雙引號 三引號(允許字符串換行)

#單引號 
str1 = 'allows embedded "double" quotes'
#雙引號 
str2 = "allows embedded 'single' quotes"
#三引號
str3= '''Three single quotes,
	span multiple lines'''
str4="""Three double quotes,  
	span multiple lines"""

b)操作

字符串操作 說明 舉例
string[n:m] 字符串切片 string='Hello World\n' string[0] string[:-1] string[3:5]
int() 字符串轉數值類型 int("123") float("123")
str() 數值類型轉字符串 str(123)str(123.456)
ord() 字符轉Unicode碼 ord('A')
chr() Unicode碼轉字符 chr(65)
lower() 轉成小寫字符串 "WELCOME".lower()
upper() 轉成大寫字符串 "welcome".upper()
split() 分割字符串 N'] words = "WELCOME TO PYTHON".split(' TO ') print(words)# ['WELCOME', 'PYTHON']
join() 將序列中的元素以指定的字符連接生成一個新的字符串 s = '++' list=['1', '2', '3'] s.join(list) #result is '1++2++3' s.join('why') #result is 'w++h++y'
strip()lstrip()rstrip() 用於移除字符串頭尾/頭/尾指定的字符(默認為空格或換行符)或字符序列 s = ' "hi\\ \n\tPython" ' s.strip()# result is '"hi\ \n\tPython"' s.strip(' "no') # result is 'hi\ \n\tPyth'
in 判斷是否為子串 'or' in 'toronto or orlando' # True
find() 返回子串開始的索引值,找不到子串時返回-1 s = 'toronto or orlando's.find('or') # return index 1 s.find('or', 2, 8) # return -1, meaning not found
index() 返回子串開始的索引值,找不到子串時拋出異常 s = 'toronto or orlando's.index('or') # return index 1 s.index('or', 2, 8) # throw ValueError: substring not found
count() 統計字符串里某個字符出現的次數 s = 'toronto or orlando' s.count('or') # return 3 s.count('or', 2) # return 2 s.count('or', 2, 9) # return 0
replace() 方法把字符串中的 舊字符串替換成新字符串 s = 'toronto or orlando's.replace('or', '/x\')# result: t/x\onto /x\ /x\lando s.replace('or', '/x\', 2)# result: t/x\onto /x\ orlando
startswith() 檢查字符串是否是以指定子字符串開頭 s = 'toronto or orlando' s.startswith('or') # return False s.startswith('or', 1) # return True s.startswith(('or', 'tor')) # return True
endswith() 檢查字符串是否是以指定子字符串結尾 s = 'toronto or orlando' s.endswith('and') # return False s.endswith('and', 1, -1) # return True s.endswith(('and', 'do')) # return True
maketrans() translate() 字符串轉換,maketrans() 設置轉換模式,一一替換,translate()執行轉換操作。可以一次定義多個模式 s = 'toronto or orlando' # define a translation table: table=s.maketrans('on', '.N') # o change to . # n change to N # translate using above table s.translate(table) # result: 't.r.Nt. .r .rlaNd.'

 

12、布爾值與空值

空值: None ,特殊常量,表示空值,注意大小寫

布爾值:True or False

  • 有多種表示形式,只有字典和集合時以空集為True
True False
不為0的數值 0, 0.0, 0+0j
非空字符串 空字符串
非空列表 空列表
空字典 非空字典
空集合 非空集合
- None

布爾操作:or 、and、not

 

13、比較操作符

操作符 解釋
< 小於
<= 小於等於
> 大於
>= 大於等於
== 等於
!= 不等於
is 判斷兩個標識符是不是引用自一個對象
is not 判斷兩個標識符是不是引用自不同對象

 

14、流程控制語句

  • 條件選擇語句 if
if guess > secret : 
    print("too large")
elif guess < secret :	# elif is optional
    print("too small")
else :			# else is optional
    print("equals")

  • 循環語句

    • Python中循環也有else語句,當循環條件不再滿足時即循環結束時執行
while  guessed != secret :
     guessed = int(input("Guess a number: "))
else : 	 # else is optional
     print("Congratulation!")

for   i   in  range(0, 8, 2) :
     print(i)
else : 		# else is optional
     print("Done!")

  • break\continue\pass

    • break 將跳出循環語句,else也不會被執行
    • continue,同
    • pass ,占位語句,啥也不干
  • 三元表達式: val1 if bool else val2 ,bool為真時返回val1,為假時返回val2

     

 

15、列表生成式 (重點)

  • 列表生成式 : 輸出表達式 循環條件 判斷語句
[x**2  for  x  in  range(10) ]  #1~10的數平方列表

[x  for  x  in range(2,100)  if  x % 2 == 0]  #2~100的偶數列表

from math import pi
[str(round(pi, i))  for  i  in  range(1, 10)]  #Π的位數梯級表

[[1 if r==c or r+c==3 else 0 for c in range(4)]for r in range(4)]  #矩陣列表

sentence = 'what is this'
{ c  for  c  in  sentence  if c != ' ' }  #生成集合

sentence = 'what is this'
(w for w in sentence.split() if 'i' in w)  #生成生成器

sentence = 'what is this'
{ w:{c for c in w if c not in 'aeiou'} for w in sentence.split() } #生成字典

 

16、enumerate函數

將可遍歷的有序對象(列表,元組,字符串)組合為一個有索引號的序列,同時返回下標和數據

for  i, v  in enumerate('ABCDEFG') :
    print(i, v)

 

四、變量作用域

1、全局變量:

  • 定義在模塊中的變量,全局變量在整個模塊中可見
  • globals()函數:返回所有定義在改模塊中的全局變量
  • 修改全局變量時,要先使用global關鍵字聲明變量
msg = 'created in module'
def outer() :
    def inner() :
        global msg
        msg = 'changed in inner'
    inner()
outer()
print(msg)

2、局部變量

  • 定義在函數中的變量

  • 局部變量僅在定義的函數中中可見

  • locals()函數:返回所有定義在函數中的局部變量

  • 自由變量:在函數中使用,但未定義在該函數中的非全局變量。

    • 自由變量:修改時要先使用nonlocal關鍵字聲明變量
def outer_1() :
    msg = 'created in outer'
    def inner() :
        print(msg)	# msg is a Free variable
    inner()
outer_1()

3、作用域規則LEGB

  • 使用 LEGB 的順序來查找一個符號對應的對象
  • Local -> Enclosed -> Global -> Built-in
  • Local:一個函數或者類方法內部
  • Enclosed:嵌套函數內
  • Global:模塊層級
  • Built-in:Python內置符號


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM