Python學習-基礎篇(三)

前言

由於我現在暫時用不到面向對象程序設計,所以暫且先不學習Python的面向對象程序設計。
本篇包含:字符串及正則表達式、函數、模塊

五、字符串及正則表達式

1、字符串

1.字符串常用操作

(1)拼接字符串

字符串1+字符串2 = 字符串1 字符串2

字符串不可以直接和數值類型相加
(2)計算字符串的長度
字符串的長度,即字符串所佔字節數。
A-Za-z0-9._空格等佔一個字節
中文漢字佔2~4字節:UTF-8佔3個;GBK(gb2312)佔2個
1)計算字符串字符的個數

len(string)
#len()函數獲取字符的個數,不管中文還是英文都按一個字符計算

2)計算字符串所佔字節數

len(string.encode()) #計算UTF-8編碼字符長度
len(string.encode("gbk")) #計算GBK編碼字符長度

(3)截取字符串
字符串屬於序列。所以:
1)獲取字符可以使用索引

string[索引值]

2)截取字符串可以使用切片

string[start:end:step]

(4)分割、合併字符串
1)分割字符串:split()

listname = str.split(sep,maxsplit)
#sep指定分隔符,默認值是空白符,如:空格、\n、\t。
#maxsplit分隔次數,-1表示沒有限制
>>> str1 = "你  有 多 自信,\n世界 就有 多 相信你"
>>> str1.split()
['你', '有', '多', '自信,', '世界', '就有', '多', '相信你']
>>> str1.split(" ")
['你', '', '有', '多', '自信,\n世界', '就有', '多', '相信你']
>>> str1.split(" ",5)
['你', '', '有', '多', '自信,\n世界', '就有 多 相信你']
>>> str1.split("\n")
['你  有 多 自信,', '世界 就有 多 相信你']
str1 = "@lemon @qwzf @未完成的歌 @chumen007"
list1 = str1.split(' ') #用空格分隔字符串
for item in list1:
    print(item[1:]) #輸出好友,並去掉@

在這裏插入圖片描述
2)合併字符串:join()

strnew = string.join(iterable)
#string合併時的分隔符
#iterable可迭代對象
list1 = ["lemon","qwzf","未完成的歌","chumen007"] #好友列表
str1 = " @".join(list1) #用空格和@連接
str2 = "@" + str1
print("你要@的好友:",str2)

在這裏插入圖片描述
(5)檢索字符串
檢索一個字符串在另一個字符串出現的次數:count()
檢索是否包含子字符串:find()index()in關鍵字
檢索是否以指定字符串開頭和結尾:startswith()endswith()

str.count(sub[,start[,end]])
#sub指定要檢索的子字符串
#start指定檢索的起始位置
#end指定檢索的結束位置

str.find(sub[,start[,end]])
#找到返回首次檢索到子字符串的索引值;沒找到返回-1
#find從左往右找,rfind從右往左找
str.index(sub[,start[,end]])
#找到返回首次檢索到子字符串的索引值;沒找到返回異常
#index從左往右找,rindex從右往左找

str.startswith(prefix[,start[,end]])
str.endswith(prefix[,start[,end]])
#prefix指定要檢索的字符串
#是,返回True;否,返回False

(6)字母的大小寫轉換
1)大寫轉小寫:str.lower()
2)小寫轉大寫:str.upper()
(7)去除字符串中的空格和特殊字符
特殊字符:\t\r\n
去除字符串左右兩端的空格和特殊字符:str.strip([chars])
去除字符串左側和右側的空格和特殊字符:str.lstrip([chars])str.rstrip([chars])
(8)格式化字符串
1)使用%操作符

'%[-][+][0][m][.n]格式化字符'%exp
#[-]表示左對齊,正數前沒有符號;負數的前加上負號
#[+]表示右對齊,正數前加上正號;負數的前加上負號
#[0]表示右對齊,正數前沒有符號;負數的前有負號,填充空白處,一般和[m]一起使用
#[m]數值所佔寬度
#[0][m]不夠寬度前補0
#[.n]小數點後保留n位數
#格式化字符 格式化成字符串s 格式化成十進制整數d 格式化成浮點數f
#exp要轉換的項
>>> template = '編號:%09d\t 公司名稱:%s\t 官網:http://www.%s.com' #定義模板
>>> item = (6,"百度","baidu") #要轉換內容
>>> print(template%item)
編號:000000006	 公司名稱:百度	 官網:http://www.baidu.com

2)使用字符串對象的format()方法(推薦)

str.format(args)
#str模板
#{[index][:[[fill]align][sign][#][width][.precision][type]}
#index設置索引位置
#fill指定空白處填充字符
#align對齊方式:<內容左對齊;>右對齊;=內容左對齊,符號放填充內容的最右側;^內容居中
#sign指定有無符號數
##指定2、8、16進制是否加前綴
#width指定所佔寬度
#.precision指定保留小數位數
#type要格式化字符的類型:s、d、f

#args要轉換的項
>>> template = '編號:{:0>9d}\t 公司名稱:{:s}\t 官網:http://www.{:s}.com' #定義模板
>>> print(template.format(7,"百度","baidu"))
編號:000000007	 公司名稱:百度	 官網:http://www.baidu.com

在這裏插入圖片描述
在這裏插入圖片描述

2.字符串編碼轉換

ASCII、GBK/GB2312、UTF-8
str:Unicode字符 如:“拼搏到感動自己”
bytes:二進制數據 如:b’\xd2\xb0’和b’mr’
(1)使用encode()方法編碼
將字符串轉換成二進制數據,即str->bytes

str.encode([encoding="utf-8"][,errors="strict"])
#strict遇到非法參數拋出異常
#ignore忽略非法字符
#replace用?替換非法字符
#xmlcharrefreplace使用xml的字符引用

(2)使用decode()方法解碼
bytes->str

str.decode([encoding="utf-8"][,errors="strict"])
str1 = "拼搏到感動自己"
byte1 = str1.encode("GBK")
byte2 = str1.encode("utf-8")
str01 = byte1.decode("GBK")
str02 = byte2.decode("utf-8")
print("原字符串:",str1)
print("GBK編碼:",byte1)
print("UTF-8編碼:",byte2)
print("GBK解碼:",str01)
print("UTF-8解碼:",str02)

在這裏插入圖片描述

2、正則表達式

1.正則表達式

(1)行定位符
^表示開始
$表示結束
(2)元字符
常用的除^$外,還有:
在這裏插入圖片描述
(3)限定符
在這裏插入圖片描述
(4)字符類[]
如:匹配元音字母[aeiou]、匹配漢字[\u4e00-\u9fa5]
(5)排除字符^
^放到[]中表示排除,如[^a-zA-Z]
(6)選擇字符|
如:[a-z]|[0-9]匹配a-z或0-9
(7)轉義字符\
(8)分組()
如:(\.[0-9]{1,3}){3}對分組匹配3次
補充:原生字符串,如:'\\bm\\w*\\b'寫成原生字符串r'\bm\w*\b'

2.使用re模塊實現正則表達式操作

(1)匹配字符串
1)re.match 只是從頭開始匹配

re.match(pattern,string,[flags])
#pattern模式字符串
#string要進行匹配的字符串
#flags指定標誌位
#標誌位控制匹配方式:re.I:不區分字母大小寫,re.A:讓\w不匹配漢字
import re
pattern = r'qw_\w*' #模式字符串
string = 'QW_PYTHON qw_python' #要匹配的字符串
match = re.match(pattern,string,re.I) #匹配字符串
print(match)
print("起始位置:",match.start())
print("結束位置:",match.end())
print("匹配數據:",match.group())

在這裏插入圖片描述
2)re.search 匹配包含

re.search(pattern,string,[flags])
import re
pattern = r'qw_\w*' #模式字符串
string = '項目QW_PYTHON qw_python' #要匹配的字符串
match = re.search(pattern,string,re.I) #匹配字符串
print(match)
print("起始位置:",match.start())
print("結束位置:",match.end())
print("匹配數據:",match.group())

在這裏插入圖片描述
3)re.findall 把所有匹配到的字符放到以列表中的元素返回

re.findall(pattern,string,[flags])
import re
pattern = r'qw_\w*' #模式字符串
string = '項目QW_PYTHON qw_python' #要匹配的字符串
match = re.findall(pattern,string,re.I) #匹配字符串
print("匹配到字符串列表:",match)
print("匹配到的字符串:")
for item in match:
    print(item)

在這裏插入圖片描述
(2)替換字符串
re.sub 匹配字符並替換

re.sub(pattern,repl,string,count,flags)
#repl用來進行替換的字符串
#count替換的最大次數,默認值0替換所有
import re
pattern = r'1[3-8]\d{9}' #模式字符串
string = '中獎號碼:888999 聯繫電話:13866666611' #要匹配的字符串
result = re.sub(pattern,"1xxxxxxxxxx",string) #替換字符串
print(result)

在這裏插入圖片描述
(3)分割字符串
re.split 以匹配到的字符當做列表分隔符

re.split(pattern,string,[maxsplit],[flags])
#maxsplit最大拆分次數
import re
pattern = r'[?|&]' #分隔符
string = "http://www.xxx.com/login.php?user='qwzf'&pwd='qwzf'" #要匹配的字符串
result = re.split(pattern,string) #分割字符串
print(result)

在這裏插入圖片描述
補充re.fullmatch 全部匹配

六、函數

1、函數的創建和調用

#創建函數
def functionname([參數]):
    '''函數說明'''
    函數體

#調用函數
functionname([參數])

2、參數傳遞

1.瞭解形式參數和實際參數
值傳遞和引用傳遞
值傳遞->不可變對象->不改變形式參數的值
引用傳遞->可變對象->改變形式參數的值
在這裏插入圖片描述
在這裏插入圖片描述
2.位置參數
位置參數是必須按照定義時的個數和順序進行參數傳遞,也稱必備參數。
3.關鍵字參數
關鍵字參數是指使用形式參數的名字來確定輸入的參數值。

def functionname(p1,p2,p3):
    函數體
functionname(p1=v1,p2=v2,p3=v3)
functionname(p1=v1,p3=v3,p2=v2)

4.爲參數設置默認值

def functionname(...,[參數名=默認值]):
    函數體
#默認值參數必須放在所有參數的最後
如:
def functionname(p2,p3,p1=v1):
    函數體

#查看默認值
print(functionname,__defaults__)

爲參數設置默認值時,參數必須指向不可變對象。遇到可變對象,參數默認值可以設置爲None。
5.可變參數
個數不固定的參數->0、1、2…n個參數
(1)*parameter
接收任意多個實參,並把它們放到元組中
也可接收列表

def coffee(*name):
    print("\n咖啡有:")
    for item in name:
        print(item) #輸出咖啡名稱
coffee("卡布奇諾","藍山","拿鐵")
list1 = ["卡布奇諾","藍山","拿鐵"]
coffee(*list1)

在這裏插入圖片描述
(2)**parameter
接收任意多個類似關鍵字參數一樣顯式賦值的實參,並將其放到一個字典中
也可接收字典

def sign(**sign):
    print()
    for key,value in sign.items(): #遍歷字典
        print(key,"的漢字是",value)
sign(chi='吃',kan='看')
dict1 = {'zi':'字','dian':'典'}
sign(**dict1)

在這裏插入圖片描述

3、返回值

return [value]
#不指定return或沒有value,返回None
def functionname(p1,p2,p3):
    函數體
    return r1,r2......
result = functionname(v1,v2,v3)
#只有一個返回值result保存的是返回值
#有多個返回值result保存的是元組

4、變量的作用域

變量的作用域是指程序代碼能夠訪問該變量的區域,如果超出該區域,再訪問時就會出現錯誤。
根據變量有效範圍:局部變量和全局變量
函數體內修改全局變量:
在函數體內定義一個全局變量,使用global關鍵字將局部變量變成全局變量

string = "我學Python"
def demo():
    global string #定義全局變量
    string = "我被修改了!" #修改全局變量
    print("函數內全局變量",string)
demo()
print("函數外全局變量",string)

在這裏插入圖片描述

5、匿名函數(lambda)

Python中使用lambda表達式來實現匿名函數。

result = lambda [arg1[,arg2,...,argn]]:expression
#arg1參數
#expression實現具體功能的表達式,不能出現for或while等
import math
r = 10 #半徑
result = lambda r:math.pi*r*r
print("半徑爲",r,"的圓面積爲:",result(r))

在這裏插入圖片描述

七、模塊

1、模塊概述

模塊是Python程序
模塊->*.py
把能夠實現某一特定功能的代碼放置在一個文件中作爲一個模塊,從而方便其他程序和腳本導入並使用。
使用模塊的四點好處:
(1)可以避免函數名和變量名衝突
(2)更容易查找代碼
(3)提高代碼的可重用性
(4)有選擇的使用

2、自定義模塊

模塊可包含:函數、變量、類、可執行代碼
1.創建模塊
模塊名.py->文件名
模塊名不能是Python自帶的標準模塊名稱。

#calculate.py
def add(a,b): #加法
    return round(a+b,1)
#demo.py
import calculate #導入模塊
x = 0.2
y = 0.3
print(calculate.add(x,y))

在這裏插入圖片描述
2.使用import語句導入模塊

import modulename [as alias]
#alias別名
#使用as關鍵字爲模塊指定別名
#指定別名之後,可以通過別名引用模塊

import語句導入模塊->命名空間
3.使用from…import語句導入模塊

from modulename import member
#member變量、函數、類
#導入模塊全部定義,使用*
#dir()函數打印模塊的全部定義
#calculate.py
def add(a,b): #加法
    return round(a+b,1)
def sub(a,b): #減法
    return round(a-b,1)
def mul(a,b): #乘法
    return round(a*b,1)
#demo.py
from calculate import add #導入模塊中add()函數
x = 0.2
y = 0.3
print(add(x,y))

在這裏插入圖片描述
:導入兩個包括同名函數的模塊,使用import語句導入。
4.模塊搜索目錄
導入模塊時查找模塊的順序是:
1)先從內存中,已經存在的模塊中查找
2)內置的模塊
3)自定義模塊
4)環境變量sys.path中找
(1)臨時添加
臨時目錄只在當前執行的窗口有效

#F:\Python\temp\calculate.py
def add(a,b): #加法
    return round(a+b,1)
#F:\Python\demo\demo.py
import sys       #導入內置模塊
sys.path.append('F:/Python/temp') #添加臨時目錄
import calculate #導入自定義模塊
print(sys.path)
x = 0.2
y = 0.3
print(calculate.add(x,y))

在這裏插入圖片描述
(2)增加.pth文件(推薦)
只在當前Python版本有效
在這裏插入圖片描述

#F:\Python\demo\demo.py
import sys       #導入內置模塊
import calculate #導入自定義模塊
print(sys.path)
x = 0.2
y = 0.3
print(calculate.add(x,y))

在這裏插入圖片描述
(3)在PYTHONPATH環境變量中添加
在多個Python版本有效
在這裏插入圖片描述
在這裏插入圖片描述

3、以主程序的形式執行

由於Python沒有統一的程序入口,從第一行開始執行。會出現一些問題。解決方法:以主程序的形式執行

if __name__ == '__main__'
#__name__記錄模塊名稱的變量。
#當程序在頂級模塊運行時,返回的值就是__main__;被導入其他文件時,返回的值是模塊名稱
#calculate.py
str1 = "我學Python"
def string():
    str2 = "沒有什麼不可能"
    return str2
print("__name__運行測試:",__name__)
if __name__ == '__main__':
    print("以主程序的形式執行")
    print(str1)

在這裏插入圖片描述

#main.py
import calculate #導入模塊
print("導入模塊後輸出:",calculate.str1)

在這裏插入圖片描述

4、Python中的包

包->文件夾->__init__.py
規範代碼
模塊:避免函數名和變量名重名引發的衝突
包:避免模塊名重名引發的衝突
1.Python程序的包結構
文件夾下包含__init__.py,則這個文件夾就是個包
2.創建和使用包
(1)創建包
1)創建文件夾
2)在文件夾下,創建__init__.py
3)在文件夾下,創建模塊
(2)使用包
1)import + 完整包名 + 模塊名
如:

import settings.size
print(settings.size.width)

2)from + 完整包名 + import + 模塊名
如:

from settings import size
print(size.width)

3)from + 完整包名 + .模塊名 + import + 定義名
如:

from settings.size import width
print(width)

5、引用其他模塊

1.標準模塊
標準模塊可查看官方說明文檔:python37/Doc/python373.chm:The Python Standard Library
中文版參考:Python3.x標準模塊庫目錄
2.第三方模塊的下載與安裝
(1)下載網站:

https://pypi.org/
http://pypi.python.org/pypi

(2)pip

pip <command> [modulename]
#command包括:install、uninstall、list
#install安裝第三方模塊
#uninstall卸載第三方模塊
#list顯示已經安裝的第三方模塊

導入模塊順序:標準模塊->第三方模塊->自定義模塊
常用pip命令:
1)不同Python版本使用pip:

python3 -m pip <command> [modulename]

2)pip源臨時更換到國內鏡像:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple [modulename]

將pip源更換到國內鏡像
(3)通過setup.py安裝

打開cmd 到達安裝目錄
python setup.py build
python setup.py install

後記

學習完字符串及正則表達式、函數、模塊後,掌握了字符串的操作、正則表達式模式串的編寫、函數相關知識和模塊的使用。繼續學習@_@

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章