認識Python——基礎編程(入門這些就夠)

 

目 錄

1 Python規範——無規矩不成方圓

2 基礎介紹——入門必備的乾糧

    集合,切片,字符串,基本數據處理,輸入輸出,自定義函數,控制流,正則表達式

 3 深入學習——更上一層樓

   文件編程,網絡編程,多線程

4 豐富模塊探索——介紹黑客常用的

   sys,os,optparse


1 Python規範——無規矩不成方圓

1)縮進

Python對代碼縮進是硬性要求,嚴格使用縮進來體現代碼的邏輯從屬關係。一般以4個空格(或一個TAB)爲一個縮進單位,並且相同級別的代碼塊應具有相同的縮進量。

2)空格與空行

在每個類、函數定義或一段完整的功能代碼之後增加一個空行,在運算符兩側各增加一個空格,逗號後面增加一個空格,讓代碼適當鬆散一點,不要過於密集。

3)續行

儘量不要寫過長的語句,應儘量保證一行代碼不超過屏幕寬度。如果語句確實太長而超過屏幕寬度,最好在行尾使用續行符“\”表示下一行代碼仍屬於本條語句,或者使用圓括號把多行代碼括起來表示是一條語句

4)註釋

有兩種常用的註釋形式:#和三引號。井號#用於單行註釋,表示本行中#符號之後的內容不作爲代碼運行;三引號常用於大段說明性文本的註釋,也可以用於界定包含換行符的長字符串。

2 基礎介紹——入門必備的乾糧

2.1 集合

1)列表:https://www.w3school.com.cn/python/python_lists.asp

列表的所有元素放在一對方括號中,相鄰元素之間使用逗號分隔。同一個列表中元素的數據類型可以各不相同,可以同時包含整數、實數、複數、字符串等基本類型的元素,也可以包含列表、元組、字典、集合、函數或其他任意對象。

2)元組:https://www.w3school.com.cn/python/python_tuples.asp

  • 可以通過把若干元素放在一對圓括號中創建元組,如果只有一個元素的話則需要多加一個逗號,例如(3,)
    • 可以使用tuple()函數把列表、字典、集合、字符串以及range對象、map對象、zip對象或其他類似對象轉換爲元組。
    • 元組是不可變的,不能直接修改元組中元素的值,也不能爲元組增加或刪除元素。

3)字典:https://www.w3school.com.cn/python/python_dictionaries.asp

4)集合:https://www.w3school.com.cn/python/python_sets.asp

Python集合是無序可變的容器對象,所有元素放在一對大括號中,元素之間使用逗號分隔,同一個集合內的每個元素都是唯一的,不允許重複

集合中只能包含數字、字符串、元組等不可變類型的數據,而不能包含列表、字典、集合等可變類型的數據,包含列表等可變類型數據的元組也不能作爲集合的元素。

集合中的元素是無序的,元素存儲順序和添加順序並不一致。

集合不支持使用下標直接訪問特定位置上的元素,也不支持使用random中的choice()函數從集合中隨機選取元素,但支持使用random模塊中的sample()函數隨機選取部分元素。

2.2 切片

是用來獲取列表、元組、字符串等有序序列中部分元素的一種語法。在形式上,切片使用2個冒號分隔的3個數字來完成。

[start:end:step]

其中第一個數字start表示切片開始位置,默認爲0;第二個數字end表示切片截止(但不包含)位置(默認爲列表長度);第三個數字step表示切片的步長(默認爲1),省略步長時還可以同時省略最後一個冒號。當step負整數時,表示反向切片,這時start應該在end的右側。

2.3 字符串

Python 中的字符串是表示 unicode 字符的字節數組。但是,Python 沒有字符數據類型,單個字符就是長度爲 1 的字符串。

方括號可用於訪問字符串的元素。( a[1])

字符串屬於不可變對象,所有方法都是返回處理後的字符串或字節串,不對原字符串進行任何修改。

        創建:單引號=雙引號;三引號(多行文本)

        常用方法

        format

1.作爲拼接字符串進行使用

      '{}'.format(變量)

2. 保留小數

    '{:.2f}'.format(12.333)        
    '{0:.4f}'.format(10/3)
# 0表示format()方法的參數下標,對應於第一個參數,.4f表示格式化爲實數,保留4位小數

3.百分比格式

    print('{0:>10.2%}'.format(1/3))
# 格式化爲百分數字符串,總寬度爲10,保留2位小數,>表示右對齊

4.進制轉換

    print("{0:,} in hex is: {0:#x}, in oct is {0:#o}".format(5555555))
# 逗號表示在數字字符串中插入逗號作爲千分符,#x表示格式化爲十六進制數

5.對齊方式

    '{a:<10}'.format(a=12.3,b=13.44)          左對齊,長度爲10
    '{a:0>10}'.format(a=12.3,b=13.44)        右對齊...
    '{a:0^10}'.format(a=12.3,b=13.44)        居中對齊...
    '{a:0<10}'.format(a=12.3,b=13.44)        數字補x (填充左邊)

6.轉義{和}符號
 
    '{{ hello{0}  }}'.format('python’)         
    f = ' hello {0} '.format
    f('python’)       

2.4 基本數據處理

(1)int()、float()、complex()

(2)bin()、oct()、hex()    把整數轉換爲二進制,八進制,十六進制

(3)ord()、chr()、str()    返回字符的ASCII碼,

(4)list()、tuple()、dict()、set()

(5)eval()

2.5 輸入輸出

(1)內置函數input

內置函數input()用來接收用戶的鍵盤輸入,不論用戶輸入什麼內容,input()一律作爲字符串對待,
必要的時候可以使用內置函數int()、float()或eval()對用戶輸入的內容進行類型轉換。

(2)內置函數print

內置函數print()用於以指定的格式輸出信息,語法格式爲:
print(value1, value2, ..., sep=' ', end='\n')
其中,sep參數之前爲需要輸出的內容(可以有多個);sep參數用於指定數據之間的分隔符,如果不指定則默認爲空格;
end參數表示輸出完所有數據之後的結束符,如果不指定則默認爲換行符。

2.6 自定義函數

lambda 函數是一種小的匿名函數。lambda 函數可接受任意數量的參數,但只能有一個表達式。

表達式————lambda arguments : expression    
     實例————x = lambda x: x+2

def name(data):return data
必選參數 (data)
默認參數 (data,p=2)
可變參數 (*args)
關鍵字參數 (**args)

補充:模塊

每一個後綴爲.py的文件都被視作一個Python模塊,可以被其它Python程序調用(import)。

每個Python腳本在運行時都有一個__ name__ 屬性, 通過它可以識別程序的使用方式,即程序是在作爲模塊被導入,還是在獨立運行。

           如果是在作爲模塊被導入,那麼__name__ 屬性的值就被自動設置爲模塊名;

           如果是在獨立運行,那麼__ name__ 屬性的值會被自動設置爲字符串“_main_“

 2.7 控制流

if

if else
if elif else

for

for i in list
for i in range(a,b)
[i++ for i in list if i >2]

 2.8 正則表達式

查詢 findall(pattern,string,flags)
替換 sub(pattern,replace,string,count,flags)
分割 split(pattern,string,maxsplit,flags)

 3 深入學習——更上一層樓

3.1 文件編程

流程化:

1. 調用open函數打開文件,並創建一個File對象: f = open(方式,路徑)
2. 調用File對象的read()或write()等方法,對文件的內容進行讀或寫操作。
3. 調用File對象的close()方法,關閉保存文件

 

1 打開文件open與with

open()方法,必須在用完後使用close()關閉文件

open(file, mode='r', buffering=-1, encoding=None,  errors=None, newline=None, closefd=True, opener=None)

f = open('test.txt', 'r')
f.read()
f.close()

關於open()的mode參數:

‘r’ 只讀
‘w’ 只寫
‘a’ 追加內容
‘r+’ == r+w 可讀可寫,文件若不存在就報錯(IOError)
‘w+’ == w+r 可讀可寫,文件若不存在就創建
‘a+’ ==a+r 可追加可寫,文件若不存在就創建

對應的,如果是二進制文件,就都加一個b就好啦:‘rb’ ‘wb’ ‘ab’ ‘rb+’ ‘wb+’ ‘ab+’

 with方法,自動調用close()方法關閉文件

with open('/path/to/file', 'r') as f:

    f.read()

2 read()、readline() 、 readlines()、seek()方法

    read() 每次讀取整個文件。

    readlines() 與read() 一樣讀取整個文件,readlines() 自動將文件內容分析成一個行的列表,該列表可以由 for循環進行迭代。

    readline() 每次只讀取一行。

    seek()可以控制指針

3 write() 和 writelines()方法

    write()方法和read()方法對應,是將字符串寫入到文件中。

    write()方法不寫/n

writelines()方法和readlines()方法對應,也是針對列表的操作。它接收一個字符串列表作爲參數,將他們寫入到文件中,換行符不會自動的加入,因此,需要顯式的加入換行符。

4  remove()

刪除文件

3.2 網路編程

Import socket

socket.setdefaulttimeout(2)
S = Socket.socket()
s.connect((“192.168.1.12”,21))
ans = s.recv(1024)
print (ans)

Python 提供了兩個級別訪問的網絡服務:

    低級別的網絡服務支持基本的 Socket,它提供了標準的 BSD Sockets API,可以訪問底層操作系統Socket接口的全部方法。

    高級別的網絡服務模塊 SocketServer, 它提供了服務器中心類,可以簡化網絡服務器的開發。

Socket又稱"套接字",應用程序通常通過"套接字"向網絡發出請求或者應答網絡請求:

格式:socket.socket([family[, type[, protocal]]])

參數

    family: 套接字家族可以使AF_UNIX或者AF_INET

    type: 套接字類型可以根據是面向連接的還是非連接分爲SOCK_STREAM或SOCK_DGRAM

    protocol: 一般不填默認爲0

函數

https://img-blog.csdnimg.cn/20190606160608875.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hsc2oyMjg=,size_16,color_FFFFFF,t_70

3.3 多線程

當進程被創建時,操作系統會自動爲之創建一個線程,稱爲主線程,主線程再根據需要動態創建其它子線程。通過threading模塊中的Thread()類可以創建和管理線程對象。   

 import threading

threading.Thread(target=None, name=None,  args=())

參數

    target 是函數名字,需要調用的函數。

    name 設置線程名字。

    args 函數需要的參數,以元祖( tuple)的形式傳入

函數

    run(): 用以表示線程活動的方法。

    start():啓動線程活動。

    join(): 等待至線程中止。

    isAlive(): 返回線程是否活動的。

    getName(): 返回線程名。

    setName(): 設置線程名。

4 豐富模塊探索——介紹黑客常用的

4.1 sys

sys.argv變量是一個字符串的列表。

當我們執行"python using_sys.py a b c "的時候,後面跟着的內容被作爲參數傳遞給程序,Python爲我們把它存儲在sys.argv變量中。

(1)參數獲取

腳本文件‘using_sys.py'是sys.argv[0]

                                 'a'是sys.argv[1]

                                'b'是sys.argv[2]

                                'c'是sys.argv[3]

sys.argv是輸出所有參數

sys.startswith() 是用來判斷一個對象是以什麼開頭的

(2)sys.exit()退出程序。

sys.exit()會引發一個異常:SystemExit,如果這個異常沒有被捕獲,那麼python解釋器將會退出。如果有捕獲此異常的代碼,那麼這些代碼還是會執行。捕獲這個異常可以做一些額外的清理工作。

注意,os._exit()會直接將python程序終止,之後的所有代碼都不會繼續執行。

sys.exit(1), 退出當前程序,並返回SystemExit異常。0爲正常退出,其他數值(1-127)爲不正常,可拋異常事件供捕獲。

sys. exit(0),正常退出。

sys. exit(“程序退出”),顯示一段提示信息退出。

4.2 os

os模塊提供了訪問操作系統服務的功能。它最常用的是os. system()方法。

1)系統相關:

os.sep可以取代操作系統特定的路徑分隔符。windows下爲 “\\”
os.name字符串指示你正在使用的平臺。比如對於Windows,它是'nt',而對於Linux/Unix用戶,它是'posix'。
os.getcwd()函數得到當前工作目錄,即當前Python腳本工作的目錄路徑。
os.getenv()獲取一個環境變量,如果沒有返回none
os.putenv(key, value)設置一個環境變量值
os.listdir(path)返回指定目錄下的所有文件和目錄名。
os.remove(path)函數用來刪除一個文件。
os.system(command)函數用來運行shell命令。
os.linesep給出當前平臺使用的行終止符。例如,Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'。
os.curdir:返回當前目錄('.')
os.chdir(dirname):改變工作目錄到dirname

2)文件相關

os.getcwd() #獲取當前工作目錄,即當前python腳本工作的目錄路徑
os.chdir("dirname") #改變當前腳本工作目錄;相當於shell下cd
os.curdir   #返回當前目錄: ('.')
os.pardir   #獲取當前目錄的父目錄字符串名:('..')
os.makedirs('dir1/dir2')    #可生成多層遞歸目錄
os.removedirs(‘dirname1’)   #遞歸刪除空目錄(要小心)
os.mkdir('dirname') #生成單級目錄
os.rmdir('dirname') #刪除單級空目錄,若目錄不爲空則無法刪除並報錯
os.listdir('dirname')   #列出指定目錄下的所有文件和子目錄,包括隱藏文件
os.remove('filename')   #刪除一個文件
os.rename("oldname","new")  #重命名文件/目錄
os.stat('path/filename')    #獲取文件/目錄信息
os.path.abspath(path)   #返回path規範化的絕對路徑
os.path.split(path) #將path分割成目錄和文件名二元組返回
os.path.dirname(path)   #返回path的目錄。其實就是os.path.split(path)的第一個元素
os.path.basename(path)  #返回path最後的文件名。如果path以/或\結尾,那麼就會返回空值。
os.path.exists(path或者file)  #如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path) #如果path是絕對路徑,返回True
os.path.isfile(path)    #如果path是一個存在的文件,返回True。否則返回False
os.path.isdir(path) #如果path是一個存在的目錄,則返回True。否則返回False
os.path.join(path1[, path2[, ...]]) #將多個路徑組合後返回,第一個絕對路徑之前的參數將被忽略
os.path.getatime(path)  #返回path所指向的文件或者目錄的最後存取時間
os.path.getmtime(path)  #返回path所指向的文件或者目錄的最後修改時間
os.path.getsize(filename)   #返回文件包含的字符數量

參考:https://docs.python.org/3.7/library/os.html?highlight=os#module-os

4.3 optparse

from optparse import OptionParser

usage="python  -f <target file> -p/-P <target ports>"  #用於顯示幫助信息
parser=OptionParser(usage)  #創建對象實例
parser.add_option('-f','--file',type='string',dest='filename')   ##需要的命令行參數
parser.add_option('-P','-p',type='string',help='target ports' ,default="20,21",dest='Ports')  ## -p/-P 都可以
(options,args)=parser.parse_args()

print(options.filename)
print(options.Ports)

利用add_ option()方法添加選項。-f和--file分別表示長短選項名,長選項可以省略。type指定了 參數類型,默認爲string, dest指定將參數賦值給哪個變量。
利用parse_ args()方法來獲取定義的選項和參數,parse_ args()方法返回兩個值, 其中options對象保存了所傳遞進來的參數值。
通過options. filename和options.address的方式調用參數值。

 

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