文章出處

Python自動化 【第三篇】:Python基礎-集合、文件操作、字符編碼與轉碼、函數

 

 

1.        集合

1.1      特性

集合是一個無序的,不重復的數據組合,主要作用如下:

  • 去重,把一個列表變成集合實現自動去重。
  • set可以看成數學意義上的無序和無重復元素的集合,因此,兩個set可以做數學意義上的交集、并集等操作。

1.2     常用操作:

s = set([3,5,9,10])     

# 創建一個數值集合 

t = set("Hello")       

# 創建一個唯一字符的集合 

a = t | s         

# 求 t 和 s 的并集 

b = t & s         

# 求 t 和 s 的交集 

c = t – s         

# 求差集(項在 t 中,但不在 s 中) 

d = t ^ s          

# 求對稱差集(項在 t 或 s 中,但不同時出現在二者中) 

 

 

 

 

 

 

 

 

 

 

1.3      基本操作:

t.add('x')           

# 添加一項 

s.update([10,37,42]) 

# 在 s 中添加多項 

t.remove('H') 

# 刪除一項

len(s)

#  s e t 的長度

x in s 

# 測試 x 是否是 s 的成員 

x not in s 

# 測試 x 是否不是 s 的成員 

s.issubset(t) 

s <= t 

# 測試是否 s 中的每一個元素都在 t 中 

s.issuperset(t) 

s >= t 

# 測試是否 t 中的每一個元素都在 s 中  

s.union(t) 

s | t 

# 返回一個新的 set 包含 s 和 t 中的每一個元素 

s.intersection(t) 

s & t 

# 返回一個新的 set 包含 s 和 t 中的公共元素 

s.difference(t) 

s - t 

# 返回一個新的 set 包含 s 中有但是 t 中沒有的元素 

s.symmetric_difference(t) 

s ^ t 

# 返回一個新的 set 包含 s 和 t 中不重復的元素  

s.copy() 

# 返回 set “s”的一個淺復制

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.       文件操作

2.1     文件操作流程

       

示例文件:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

games:x:12:100:games:/usr/games:/sbin/nologin

gopher:x:13:30:gopher:/var/gopher:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

nobody:x:99:99:Nobody:/:/sbin/nologin

dbus:x:81:81:System message bus:/:/sbin/nologin
View Code

2.2     基本操作

f = open('file.txt') 

# 打開文件

first_line = f.readline()

 

print('first line:',first_line)

# 讀一行

print('我是分隔線'.center(50,'-'))

 

data = f.read()

# 讀取剩下的所有內容,文件大時不要用

print(data) 

# 打印文件

f.close() 

# 關閉文件

 

 

 

 

 

 

 

 

 

 

 

2.3    打開文件的模式

  • r,只讀模式(默認)。

  • w,只寫模式。【不可讀;不存在則創建;存在則刪除內容;】

  • a,追加模式。【可讀;不存在則創建;存在則只追加內容;】

    "+" 表示可以同時讀寫某個文件

    > r+,可讀寫文件。【可讀;可寫;可追加】

    > w+,寫讀

    > a+,同a

    "b" 表示處理二進制文件

    > rb

    > wb

    > ab

2.4     with語句

為了避免打開文件后忘記關閉,可以通過管理上下文,即:

1

2

3

with open('log','r') as f:

     

    ...

 

 

 

 

3.      字符編碼與轉碼

3.1    字符編碼方式

3.1.1  ASCII編碼

ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統,并等同于國際標準ISO/IEC 646。

3.1.2   Unicode編碼

Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,所有的字符和符號最少(可能更多)由 16 位來表示(2個字節),即:2 **16 = 65536,這里還有個問題:字節數增加后使用空間會直接翻倍!舉例還說:同樣是ABCD這些字符存儲一篇相同的文章,使用ASCII碼如果是1M的話,那么Unicode存儲至少2M可能還會更多。

3.1.3   UTF-8編碼

是對Unicode編碼的壓縮和優化,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存... 通過這種可擴展的方式來存儲。

 

在2.x版本的Python中,解釋.py文件的時候,默認是給他一個編碼的就是ASCII碼,如果在2.x版本中不指定編碼并且在.py文件中寫了一個ASCII碼中沒有的字符就會顯示亂碼,不過這個問題在Python3中就不存在了,因為在Python3中默認就是Unicode編碼

3.2     Python編碼轉化

3.2.1   Python3中的編碼轉換

#在Python3中默認就是unicode編碼

#!/usr/bin/env python
#-*- coding:utf-8 -*-

name = '小岳岳'
#轉為UTF-8編碼
print(name.encode('UTF-8'))
#轉為GBK編碼
print(name.encode('GBK'))
#轉為ASCII編碼(報錯為什么?因為ASCII碼表中沒有‘小岳岳’這個字符集~~)
print(name.encode('ASCII'))
View Code

 

3.2.2   Pyton2.x中的編碼轉換

#因為在python2.x中默認是ASCII編碼,你在文件中指定編碼為UTF-8,但是UTF-8如果你想轉GBK的話是不能直接轉的,需要Unicode做一個轉接站點。

         

GBK轉換為UTF-8格式流程:

> 首先通過解碼(decode)轉換為Unicode編碼

> 然后通過編碼(encode)轉換為UTF-8編碼

UTF-8轉換為GBK格式流程:

> 首先通過解碼(decode)轉換為Unicode編碼

> 然后通過編碼(encode)轉換為GBK編碼

 

#!/usr/bin/env python
#-*- coding:utf-8 -*-
 
import chardet
name = '小岳岳'
print chardet.detect(name)
#先解碼為Unicode編碼,然后再從Unicode編碼為GBK
new_name = name.decode('UTF-8').encode('GBK')
print chardet.detect(new_name)
View Code

 

4.      函數

4.1    基本語法

函數是指將一組語句的集合通過一個名字(函數名)封裝起來,要想執行這個函數,只需調用其函數名即可。

特性:

  • 減少重復代碼
  • 使程序變的可擴展
  • 使程序變得易維護

語法:

def function_name():#函數名

    print("Hello, World!")

 

function_name() #調用函數

可以帶參數:

def calc(x,y):

    res = x**y

    return res #返回函數執行結果

 

c = calc(a,b) #結果賦值給c變量

print(c)

4.2      函數參數與變量

4.2.1   函數參數

形參是在函數被調用時才分配內存單元,調用結束時立即釋放所分配的內存單元,so,形參只在函數內部有效。

實參可以是常量、變量、表達式、函數等,實參在進行函數調用時必須有確,以便把這些值傳給形參。故應預先用賦值,輸入等辦法使參數獲得確定值。

       上述函數中x,y是形參,a,b是實參。

默認參數

Def stu_register(name,age,country=”CN”):

這樣,country參數在調用時不指定就是默認參數CN,指定了的話就是你指定的值。默認參數必須放在未指定默認值的后面。

關鍵參數

若給函數傳參是不想按順序的話可以指定關鍵字參數,只需指定參數名即可,但是,關鍵參數必須放在位置參數之后。

       語法:

              Stu_register(age=22,name=”poker”)

非固定參數

若函數定義時不確定用戶想出入多少個參數,可使用非固定參數

 

Def stu_register(name,age,*args)  #args會把多傳入的參數變成一個元組形式

       Print(name,age,args)

Stu_register(“poker”,22)

#輸出

Poker 22 ()  #后面這個空元組就是args,因為沒傳參所以空


 

Stu_register(“Tom”,28,”CN”,”Python”)

#輸出

Tom 28 (‘CN’,’Python’)


 

還有一個**kwargs

Def stu_register(name,age,*args,**kwargs): #kwargs會把多傳入的參數變成一個字典形式

       Print(name,age,kwargs)

Stu_register(‘poker’,22)

#輸出

#poker 22 () {} #后面這個{}就是kwargs,因為沒傳值,所以為空


 

Stu_register(“Tom”,28,”CN”,”Python”,sex=”Male”,school=”Qinghua”)

#輸出

#Tom 28 (‘CN’,’Python’) {‘school’:’Qinghua’,’sex’:’Male’}

4.2.2   全局與局部變量

在子程序中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。

全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。

當全局變量與局部變量同名時,在定義局部變量的子程序內,局部變量起作用;在其它地方全局變量起作用。

返回值

Return語句可以返回函數的返回值

> 函數執行時遇到return就會停止執行并返回結果,也代表著函數的結束

> 未指定return,函數返回None

遞歸

函數內部可以調用其他函數,若函數內部調用自身,該函數為遞歸函數。

def calc(n):

    print(n)

    if int(n/2) ==0:

        return n

    return calc(int(n/2))

 

calc(10)
View Code

輸出:

10

5

2

1

遞歸特性:

> 需明確結束條件

> 進入更深一層遞歸時,規模要比上次有所減少

> 遞歸效率不高,遞歸層次過多會導致棧溢出

高階函數

變量可以指向函數,函數的參數能接收變量,那么一個函數就可以接收另一個函數作為參數,這種函數就稱之為高階函數。

1

2

3

4

5

6

def add(x,y,f):

    return f(x) + f(y)

 

 

res = add(3,-6,abs)

print(res)

 

 

 

 

 

 


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()