ThridWeek_FirstDay

python學習筆記整理

## 封裝和解構

一、封裝:
在程序設計中,封裝(Encapsulation)是對具體對象的一種抽象,即將某些部分隱藏起來,在程序外部看不到,其含義是其他程序無法調用。

二、為什么要封裝:
封裝數據的主要原因是:保護隱私(把不想別人知道的東西封裝起來)

封裝方法的主要原因:隔離復雜度

提示:在編程語言里,對外提供的接口(接口可以理解為一個入口),就是函數,稱為接口函數,這與接口的概念還不太一樣,接口代表一組接口函數的集合體。

三、封裝的兩個層面
1、第一個層面的封裝:什么都不用做,創建類和對象會分別創建二者的名稱空間,我們只能用類名.或者obj.的方式去訪問里面的名字,這本身就是一種封裝。

2、類中把某些屬性和方法隱藏起來(或者說定義為私有的),只在類的內部使用、外部無法訪問,或者留下少量接口(函數)供外部訪問。

封裝:
1、將多個值使用逗號分割,組合在一起
2、本質上,返回一個元組,省略小括號

model:

t1 = (1,2) #定義為元組
t2 = 1,2 #將1和2封裝成元組

In [5]: t1 = (1,2)

In [6]: type(t1)
Out[6]: tuple

In [7]: t2 = 1,2

In [8]: type(t2)
Out[8]: tuple
model:
a = 4
b = 5
temp = a
a = b
b = temp
等價于
a,b = b,a
等號右邊使用了封裝,左邊使用了解構

解構:
1、把線性的元素解開,并順序的賦給其它變量
2、左邊接納的變量數要和右邊解開的元素個數一致

model:
In [9]: lst = [3,5]

In [10]: first,second = lst

In [11]: print(first,second)
3 5

解構例子:
a,b = 1,2
a,b = (1,2)
a,b = [1,2]
a,b = {1,2}
a,b = {‘a’:19,’b’:20} #非線性解構也可以解構

In [14]: a,*b = { 1,2,3,4,5}

In [15]: a
Out[15]: 1

In [16]: b
Out[16]: [2, 3, 4, 5]

In [17]: [a,b] = (1,2)

In [18]: a
Out[18]: 1

In [19]: b
Out[19]: 2

Python3的解構:
1、使用*變量名接收,但不可單獨使用
2、被*變量名收集后組成一個列表

model:
In [25]: lst = list(range(1,101,2))
In [26]: head,*middle,tail = lst
In [28]: *body,tail = lst

In [29]: head,*tail = lst

丟棄變量:
1、這事一個慣例,是一個不成文的約定,不是標準
2、如果不關心一個變量,就可以改變變量的名字為_
3、_是一個合法的標識符,也可以作為一個有效的變量使用,但是定義成下劃線就是希望不要被使用,除非你明確知道這個數據需要使用

model:
In [30]: lst = [9,8,7,20]

In [31]: first,*second = lst

In [32]: head,*_,tail = lst

In [33]: print(head,tail,first)
9 20 9
# _是合法的標識符,看到下劃線就知道這個變量就是不想被使用

model:
In [34]: lst = [9,8,7,20]

In [35]: first,*second = lst

In [36]: _,*_,tail =lst

In [37]: print(_,tail,_)
[8, 7] 20 [8, 7]

## 總結:
1、_這個變量本身無任何語義,沒有任何可讀性,所以不是用來給人使用的
2、Python中很多庫,都使用這個變量,使用十分廣泛。請不要在不明確變量作用域的情況下,使用_導致和庫中_沖突
# 集set

約定:
1、set翻譯為集合,或者說集
2、collection翻譯為集合類型,是一個大概念

set:
可變的、無序的、不重復的元素集合

詳細介紹:
Python的set是一個無序不重復元素集,基本功能包括關系測試和消除重復元素,集合對象還支持并、交、差、對稱差等。
set支持x in set、len(set)、和for x in set。作為一個無序的集合,sets不記錄元素位置或插入點。因此,sets不支持indexing,slicing,或者其它類序列(sequence-like)的操作。

set定義 初始化
set()-> new empty set object
set(iterable)->new set object

s1 = set()
s2 = set(range(5)
s3 = set(list(range(10)))
s5 = {9,10,11} #set
s6 = {(1,2),3,’a’}

注:s4 = {},這樣定義的話,s4的類型則為dict字典

set的元素:
1、set的元素要求必須可以hash
2、目前學過的不可hash的類型有列表(list)、set
3、元素不可以索引
4、set可以迭代

基本操作:
一、增加
add(elem)
1、增加一個元素到set中
2、如果元素存在,什么都不做

model:
In [50]: a = [1,2,3,4,5]

In [51]: a_set = set(a)

In [52]: a
Out[52]: [1, 2, 3, 4, 5]

In [53]: type(a)
Out[53]: list

In [54]: a_set
Out[54]: {1, 2, 3, 4, 5}

In [55]: a_set.add(‘Eric’)

In [56]: a_set
Out[56]: {1, 2, 3, 4, 5, ‘Eric’}

備注:一次只能添加一個元素,否則會報錯

2、update(*others)
合并其他元素到set集合中來
參數others必須是可迭代對象就地修改

In [58]: b = [9,8,6,5,1]

In [59]: b_set = set(b)

In [60]: b_set
Out[60]: {1, 5, 6, 8, 9}

In [61]: b_set.update(’88’,’Eric’,’dashen’)

In [62]: b_set
Out[62]: {1, ‘d’, 5, 6, ‘h’, 8, 9, ‘E’, ‘r’, ‘c’, ‘8’, ‘s’, ‘a’, ‘n’, ‘e’, ‘i’}

刪除:
remove
從set中移除一個元素
元素不存在,拋出KeyError異常
In [65]: b_set.remove(‘E’)

In [66]: b_set.remove(‘c’)

In [67]: b_set.remove(‘i’)

In [68]: b_set.remove(‘r’)

備注:一次只能刪除一個元素
discard(elem)
從set中移除一個元素
元素不存在,什么都不做

In [1]: a = [1,2,3,4,5]

In [2]: a_set = set(a)

In [3]: a_set.discard(5)

In [4]: a_set.discard(6)
In [6]: a_set
Out[6]: {1, 2, 3, 4}

有的話刪除后并返回一個None,沒有的話,不抱錯,也只會返回一個None

pop() ->item
移除并返回任意的元素
空集返回KeyError異常

In [1]: a_set = {1,2,3}

In [2]: a_set.pop()
Out[2]: 1

In [3]: a_set.pop()
Out[3]: 2

In [4]: a_set.pop()
Out[4]: 3

In [5]: a_set.pop()
—————————————————– ———————-
KeyError Traceback (most recent call last)
<ipython-input-5-e21c77f61fc4> in <module>()
—-> 1 a_set.pop()

KeyError: ‘pop from an empty set’

clear():
移除所有元素

set修改、查詢

修改:
要么刪除,要么插入新的元素

查詢:
非線性結構,無序無法索引

遍歷:
可以迭代所有元素

成員運算符:
in和not in判斷元素是否在set中
效率是最高的

set和線性結構:
1、線性結構的查詢時間復雜度是O(n),即隨著數據規模的增大而增加
2、set、dict等結構,內部使用hash值作為key,時間復雜度可以做到O(1),查詢時間和數據規模無關

可hash:
數值型int、float、complex
布爾型True、False
字符串string、bytes
tuple
None
以上都是不可變類型,成為可哈希類型,hashable

set的元素必須是可以hash的

集合:
基本概念
全集:
所有元素的集合。例如實數集,所有實數組成的集合就是全集。

字集subset和超集superset
一個集合A所有元素都在另一個集合B內,A是B的字集,B是A的超集

真子集和真超集:
A是B的子集,且A不等于B,A就是B的真子集,B是A的真超集

并集:
多個集合合并的結果

交集:
多個集合的公共部分

差集:
集合中除去和其他集合公共部分

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/87714

(0)
泰谷子泰谷子
上一篇 2017-10-09 19:22
下一篇 2017-10-09

相關推薦

  • 基礎指令的使用篇3 Linux版

    / /boot /bin /sbin /lib.modules /lib64 /etc/redhat-release /etc/centos-release /home/zczx /mnt /media /misc /proc/meminfo /proc/cpuinfo /proc/partition /sya /opt /tmp /usr/local/ /…

    Linux干貨 2016-08-04
  • zabbix+grafana ——小于初始,大于勤拙@時雨擾擾,幾多悵惘,幾多憂思

    前邊一點小總結,純屬回顧啟動大腦所用,畢竟we are no computer! 一個監控系統必須包括4個功能 1)采集數據 2)存儲數據 3)故障報警 4)數據可視化顯示 zabbix作為一個監控系統,當讓也就包含了以上四種zabbix-server-mysql,zabbix-agent,zabbix-get,zabbix-sender,zabbix-we…

    2017-10-09
  • 文件查找工具

    文件查找     我們常常需要知道哪個文件放在哪里,才能夠對該文件進行一些修改或維護等動作。 有些時候某些軟件配置文件的文件名是不變的,但是各發行版 放置的目錄則不同。 此時就得要利用一些搜尋指令將該配置文件的完整文件名捉出來,這樣才能修改。     比較實用的兩個文件查找工具l…

    Linux干貨 2016-08-21
  • DHCP簡單闡述及配置實現方法

    DHCP是什么…… DHCP是Dynamic Host Configuration Protocol的縮寫,它是TCP/IP協議簇中的一種,主要是用來給網絡客戶機分配動態的IP地址。 其主要功能是: 用于內部網絡或網絡服務供應商自動分配IP地址給用戶 用于內部網絡管理員作為對所有電腦作中央管理的手段 直接點就是,這些被…

    Linux干貨 2016-12-05
  • LINUX命令幫助

    命令幫助 在維護和使用Linux系統時,常常會遇到忘記命令的使用方法,遇到一個比較陌生的命令,又或者想知道這個命令是什么的情況可以查看命令使用幫助。 LINUX命令使用幫助可參考:程序自身的幫助文檔、官方文檔、官方站點、LINUX的發行版官方文檔、其他網站或者搜索引擎 LINUX命令分為內部命令(shell內置的命令)和外部命令,內部命令和外部命令…

    Linux干貨 2017-05-28
  • centos下nginx啟動腳本和chkconfig管理

    在安裝完nginx后,要用/usr/local/nginx/sbin/nginx來啟動nginx,顯然十分不方便。如果能像apache一樣,直接通過腳本進行管理就方便多了。 vim /etc/init.d/nginx 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…

    Linux干貨 2017-09-27
欧美性久久久久