python 集合、函數、文件操作


集合

一、集合的特性

無序,不重復

 

二、集合的創建方法

1. 大括號

>>> s = {11, 22, 33, 11}
>>> s
{33, 11, 22}

 

2.初始化函數set

>>> s = set((11,22,33,11))
>>> s
{33, 11, 22}

還可以使用set創建空集合

>>> s = set()
>>> s
set()

 

調用set()函數的時候相當於執行了python中 set類的__init__方法,同樣的使用s = {11,22,33}創建集合的時候也調用了set類的 __init__方法。

 

三、集合的方法

 

1.add方法

向集合中添加一個元素,如果該元素存在,則執行無效

>>> s
{33, 11, 22}
>>> s.add(44)
>>> s
{33, 11, 44, 22}
>>> s.add(11)
>>> s
{33, 11, 44, 22}

 

 2.clear方法

清空集合中的所有元素

>>> s
{33, 11, 44, 22}
>>> s.clear()
>>> s
set()

 

3.copy方法

獲得一個集合的副本,並且屬於淺拷貝。

>>> s
{33, 11, 22}
>>> s1=s.copy()
>>> s1
{33, 11, 22}
>>> id(s)
11997704
>>> id(s1)
11998376

 

4.difference方法

A.difference(B),在集合A中但不再集合B中

>>> s
{33, 11, 22}
>>> s1 = {22,33,44}
>>> s1
{33, 44, 22}
>>> s.difference(s1)
{11}

 

5. difference_update方法

A.difference_update(B),類似difference,區別是將結果復制給A.

>>> s
{33, 11, 22}
>>> s1
{33, 44, 22}
>>> s.difference_update(s1)
>>> s
{11}

 

6.discard方法

移除集合中的某個元素,如果該元素不在集合中,則什么也不做。

>>> s1
{33, 44, 22}
>>> s1.discard(22)
>>> s1
{33, 44}
>>> s1.discard(55)
>>> s1
{33, 44}

 

7.remove方法

移除集合中的某個元素,如果該元素不再集合中,則報錯

>>> s1
{33, 44, 22}
>>> s1.remove(22)
>>> s1
{33, 44}
>>> s1.remove(55)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 55

 

8.intersection方法

返回兩個集合的交集

>>> s
{33, 11, 22}
>>> s1
{33, 44, 22}
>>> s.intersection(s1)
{33, 22}

 

9.intersection_update方法

A.intersection_update(B),返回集合A和集合B的交集,並將結果賦值給A

>>> s
{33, 11, 22}
>>> s1
{33, 44, 22}
>>> s.intersection_update(s1)
>>> s
{33, 22}

 

10.symmetric_differece方法

返回兩個集合交集的補集

>>> s
{33, 11, 22}
>>> s1
{33, 44, 22}
>>> s.symmetric_difference(s1)
{11, 44}

 

11.symmetric_difference_update方法

A.symmetric_difference_update(B),返回兩個集合交集的補集,並將結果賦值給A

>>> s
{33, 11, 22}
>>> s1
{33, 44, 22}
>>> s.symmetric_difference_update(s1)
>>> s
{11, 44}

 

12.union 方法

返回兩個集合的並集

>>> s
{33, 11, 22}
>>> s1
{33, 44, 22}
>>> s.union(s1)
{33, 22, 11, 44}

 

13.upadate方法

A.update(B),以集合B擴展集合A

>>> s
{33, 11, 22}
>>> s1
{33, 44, 22}
>>> s.update(s1)
>>> s
{33, 22, 11, 44}

 

14.isdisjoint方法

如果兩個集合沒有交集的話返回True

>>> s
{33, 22}
>>> s1
{33, 44, 22}
>>> s2
{44, 55}
>>> s.isdisjoint(s1)
False
>>> s.isdisjoint(s2)
True

 

15.issubset方法

A.issubset(B),判斷集合A是不是集合B的子集

>>> s
{33, 22}
>>> s1
{33, 44, 22}
>>> s.issubset(s1)
True

 

16.issuperset方法

A.issuperset(B),判斷集合A是不是集合B的父集合

>>> s
{33, 22}
>>> s1
{33, 44, 22}
>>> s1.issuperset(s)
True

 

17.pop方法

隨機移除集合中的一個元素,並返回該元素

>>> s1
{33, 44, 22}
>>> s1.pop()
33

 

 

函數

函數就是最基本的一種代碼抽象的方式。

一、函數的定義

def 函數名(參數):
     . . .
     函數體
     . . . 
     返回值

定義函數有一下要點:

def     關鍵字

函數名 用於調用、標識和區別其他函數

函數體 函數中實現邏輯的地方

參數    為函數提供數據,是函數的應用場景更廣泛

返回值 函數執行完成后最后返回的值或者標識

 

二、 函數的參數

1、普通參數(位置參數)

def foo(name, passwd)
    print (name, passwd)

foo(xiaoming, 123)

foo(hanmeimei, 456)

函數普通參數,接收特定個數的參數,位置必須對應正確

 

2、默認參數

def foo(name, school='beida')
      return name in school


foo(xiaoming)

xiaoming in beida

foo(hanmeimei)

hanmeimei in beida

默認參數給予參數特定的默認值,函數調用時默認參數如果不指定參數值,則使用默認參數,如果指定參數值,則使用指定參數。

 

3、動態參數1-接收任意數量的位置參數

def foo(*args):
     print args 



foo(11,22,33,44,55,66)

11,22,33,44,55,66

 

4、動態參數2-接收任意數量的關鍵字參數

def foo(**kwargs):
     print kwargs

foo(name=xiaoming, age=18)

{name:xiaoming, age:18}

 

5、動態參數3-接收任意數量的位置參數和任意數量的關鍵字參數

def foo(*args, **kwargs):
     print args, kwargs

foo(11,22,33,44,name=xiaoming, age=18)

(11,22,33,44){'name':'xiaoming', 'age':18} 

 

三、 內置函數

1.abs()

返回一個數的絕對值。參數可以是整數或浮點數,如果參數是一個復數,將會返回它的模。

 

2.all(iterable)

如果 iterable(迭代器) 中所有元素都為 true (或者iterable 為空)則返回 True。

 

3.any(iterable)

假如iterable 里任意一個元素是True,則返回True。假如iterable是空, 返回 False。

 

4.ascii(object)

效果如同 repr(),返回一個可打印字符串,但是 repr() 返回的字符串中的非 ASCII 字符使用 \x, \u or \U 轉義字符進行了轉義。

 

5.bin(x)

將一個整數轉換成一個二進制字符串。結果是一個有效的Python表達式。假如 x 不是一個 Python int 類型的對象, 那它必須定義一個 __index__() 方法,方法的返回值是整數(integer)

 

6.bytes([source[, encoding[, errors]]])

返回一個新的“bytes”對象,它是一個由0 <= x < 256 范圍內的整數組成的不可變序列。

 

7.chr(i)

返回一個Unicode編碼是整數i的字符串,例如, chr(97)返回字符串 'a'這個功能與ord()相反。這個參數正確的范圍從0 到1,114,111 (十六進制表示是0x10FFFF ). 如果i超出這個范圍,將會觸發ValueError

 

8.ord(c)進行

給定一個代表Unicode編碼的字符,返回一個代表這個字符的整。

 

 

文件操作

 open函數

該函數生成一個打開的文件句柄,文件句柄很多方法,利用這些方法進行文件操作。

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

打開文件的模式有:

r 只讀(默認)

w 只寫,寫之前會清空文件,對文件進行truncate,不存在則創建。

x 只寫,不存在則創建,存在則報錯。

a 追加,在文件原有的基礎上追加新的內容。

 

+ 模式

r + 讀寫,用的最多,寫之前可以使用seek函數移動文件指針

w + 讀寫,寫之前會清空文件

x + 讀寫,如果文件存在則報錯

a + 讀寫,追加寫

 

b模式

rb 只讀,以二進制的方式讀文件

wb 只寫,以二進制的方式寫文件

ab 追加寫,以二進制的方式寫文件

xb 只寫,以二進制的方式寫文件

 

文件操作的方法

def close(self, *args, **kwargs): # real signature unknown
        關閉文件
        pass

    def fileno(self, *args, **kwargs): # real signature unknown
        文件描述符  
        pass

    def flush(self, *args, **kwargs): # real signature unknown
        刷新文件內部緩沖區
        pass

    def isatty(self, *args, **kwargs): # real signature unknown
        判斷文件是否是同意tty設備
        pass

    def read(self, *args, **kwargs): # real signature unknown
        讀取指定字節數據
        pass

    def readable(self, *args, **kwargs): # real signature unknown
        是否可讀
        pass

    def readline(self, *args, **kwargs): # real signature unknown
        僅讀取一行數據
        pass

    def seek(self, *args, **kwargs): # real signature unknown
        指定文件中指針位置
        pass

    def seekable(self, *args, **kwargs): # real signature unknown
        指針是否可操作
        pass

    def tell(self, *args, **kwargs): # real signature unknown
        獲取指針位置
        pass

    def truncate(self, *args, **kwargs): # real signature unknown
        截斷數據,僅保留指定之前數據
        pass

    def writable(self, *args, **kwargs): # real signature unknown
        是否可寫
        pass

    def write(self, *args, **kwargs): # real signature unknown
        寫內容
        pass

    def __getstate__(self, *args, **kwargs): # real signature unknown
        pass

    def __init__(self, *args, **kwargs): # real signature unknown
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass

    def __next__(self, *args, **kwargs): # real signature unknown
        """ Implement next(self). """
        pass

    def __repr__(self, *args, **kwargs): # real signature unknown
        """ Return repr(self). """
        pass

    buffer = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    closed = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    encoding = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    errors = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    line_buffering = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    name = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    newlines = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    _CHUNK_SIZE = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default

    _finalizing = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
View Code

 

管理上下文

with open('file1', 'r') as f1:
     for line in f1:
         . . . . .
      

with 語句可以自動關閉文件,在with語句快內操作文件

 

在Python 2.7 及以后,with又支持同時對多個文件的上下文進行管理,即:

with open('file1', 'r') as f1, with open('file2', 'r') as f2:
       for line1 in f1:
           for line2 in f2:
               . . . . . .

 

 

lambda表達式

lambda函數也叫匿名函數,即,函數沒有具體的名稱,而用def創建的方法是有名稱的。如下:

lambda語法如下:

lambda [arg1[,arg2,arg3....argN]]:expression

lambda語句中,冒號前是參數,可以有多個,用逗號隔開,冒號右邊的返回值。lambda語句構建的其實是一個函數對象。

如果沒有參數,則lambda冒號前面就沒有

如果有參數,則lambda冒號就有變量,可以是多個變量用逗號隔開

>>>f1 = lambda:'without canshu'
>>>f1()
'without canshu'

>>>f2 = lambda x,y: x * Y
>>>f2(2,3)
6

 


免責聲明!

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



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