python內建函數和序列化

來源:互聯網
上載者:User

標籤:ash   while   方法   儲存   右鍵   針對   不能   foo   file   

修改字元集全域修改

點擊window

針對某一個工程

右鍵,有一個屬性propertes

給某個檔案,也就是前面加

也是右鍵屬性,這裡就不在說了
#模組的和模組的常用方法

  • 至關重要的__init__.py
    如果想匯入成模組,一定要有這個檔案
  • 是否為主檔案__name
    if
    name == ‘\main__‘
    如果不是主檔案返回模組檔案路徑+檔案名稱
  • 當前檔案 :__doc__
    返回模組層級別的注釋,函數層級的注釋,是在函數下面加6個引號,中間寫注釋
  • __file__:輸出當前的路徑函數式編程
  • 參數 def Fun(arg,*args,**kergs)
  • 預設參數 print arg
  • 可變參數 print *args print **kergs
    一個是列表,一個是字典
  • 傳回值 return ‘success’
    #!/usr/bin/env python#coding:utf-8def login(username):if username == "alex":    print "登入成功"else:    print "登入失敗"if __name__ == "__main__":user = raw_input(‘username:‘)login(user)
    yield
print range(10)for item in xrange(10):    print item    #輸出的時候並沒有全部建立,他只是一個產生器,說明他沒有寫入記憶體中    #也就是說每一次建立就只建立一個整數def foo():    yield 1re = foo()print re輸出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]0123456789<generator object foo at 0x00000000030B8480>
def fool():    yield 1    yield 2    yield 3yield 4  #他的執行過程是,第一從從yield 1 執行,下一次直接從yield2開始執行 re = fool()print re#產生了一個產生器,每次遍曆只產生一條for item in re :print item結果:<generator object fool at 0x0000000003248480>1234
def ReadLines():    seek = 0    while True:        with open(‘E:/temp.txt‘,‘r‘) as f :            f.seek(seek)            date = f.readline()            if date:                seek = f.tell()                yield date            else:                return print ReadLines()for item in ReadLines():    print item    
三元運算和lambda運算式三元運算
  • 代碼執行個體:
    result = ‘gt’ if 1>3 else ‘it’
    print result
  • Lambda運算式()
    代碼執行個體:
    a = lambda x,y: x+y
    print a(1,2)
  • map函數()
    map (lambda x:x*2,range(10))
    意思就是將range的每個值賦給前邊內建函數
  • dir()列出當前檔案內建的變數或者方法名,只列出key
  • vars()和dir()不一樣的是列出key和value
  • type() 查看你所建立變數的類型
    a = [] ,本質上是調用一個類,去產生一個列表,本質上是建立了一個類的執行個體,像tuple就是一個類的名字
  • from file import demo
  • reload(demo)
    重新匯入
  • id()
    查看變數的資料
  • cmp()函數
    cmp(x,y) 函數用於比較 2 個對象,如果 x< y 返回 -1,如果 x==y 返回 0,如果 x>y 返回 1。
  • abs()取絕對值
  • bool()將結果換算成布爾值
  • divmod()
    計算結果,將商和餘數一元組的方式返回
  • max([]) 最大值
  • min([]) 最小值
  • sum([]) 求和
  • pow() 指數運算
  • len() 計算長度(如果是中文則表示位元組的長度)
  • all(可迭代的對象) 可迭代對象所有的都為真,則返回Ture,否則返回False
  • any(可迭代的對象) 有一個為真則返回Ture
  • chr(65) 查看字元
  • ord(‘a’) 查看ascall值
  • hex() 16進位
  • bin() 10進位
  • oct() 8進位
  • range()
  • xrange()
  • enumerate(
    for k,v in enumerate([1,2,3,4]):print k,v輸出:0 11 22 33 4
    #為程式增加一個序號li = [‘手錶‘,‘汽車‘,‘房‘]for item in enumerate(li,1):print item[0],item[1]#1為初始值1 手錶2 汽車3 房
  • apply執行函數和函數的調用
    def say():
    print ‘say in‘
    apply(say)
    輸出 ;say in
  • map函數() #遍曆後面每一個序列的函數
    map (lambda x:x*2,range(10))
    意思就是將range的每個值賦給前邊(可以是函數)
    lala = [];def foo(arg):return arg + 100li = [11,22,33]lala = map(foo,li)print lala結果:[111, 122, 133]#也可以使用 lala.append(item+100)temp = map (lambda arg:arg+100,li)
  • filter函數 #條件為真,將其加入序列中
    temp = []li = [11,22,33]def foo(arg):if arg <22:    return Trueelse:    return Falsetemp = filter(foo,li)print temp將li序列中滿足條件的返回temp序列中結果:11
  • reduce 累加(只能兩個參數)
    print reduce(lambda x,y:x+y,[1,2,3] )結果 6將前一次的計算結果,傳遞為第二次計算的第一個參數
  • zip 函數 #將列表中的第一個組成新的列表
    x = [1,2,3]
    y = [4,5,6]
    z = [4,5,6]
    print zip(x,y,z)
    結果:
    [(1, 4, 4), (2, 5, 5), (3, 6, 6)]
  • eval函數 #直接計算字串類型的運算
    a =‘8*8‘print eval(a)結果:64
    字串的格式化

    s = ‘i am {0},{1}‘
    print s.format(‘alex‘,‘xxx‘)
    i am alex,xxx

    反射 通過字串的形式匯入模組,並以字串的形式執行函數 (動態切換資料庫連接)

    不允許使用import os 匯入,用temp的方法匯入

    temp = ‘os‘model = __import__(temp)print modelprint model.path輸出:<module ‘os‘ from ‘D:\pycharm\lib\os.pyc‘><module ‘ntpath‘ from ‘D:\pycharm\lib\ntpath.pyc‘>


    getattr就是在mysqlhelper模組中尋找count函數
    Function就等於調用的count函數
    相應的有delattr()、hasattr()判斷函數中是否含有相應的模組

#使用random產生驗證碼
它使用的是ascall的值進行產生的

import randomprint random.random()print random.randint(1,5)#產生1-5之間的隨機整數print random.randrange(1,3)#產生大於等於1,小於3的隨機數
import randomcode = []for i in range(6):    if i == random.randint(1,5):        code.append(str(random.randint(1,5)))    else:        temp = random.randint(65,90)        code.append(chr(temp))print ‘‘.join(code)

#注意:join和+=的區別
join效率更高,+=每次都要在記憶體中請求一塊空間,join只申請一次

md5加密
#!/usr/bin/env python#coding:utf-8import hashlibhash=hashlib.md5()hash.update(‘admin‘)print hash.hexdigest()print hash.digest()21232f297a57a5a743894a0e4a801fc3!#/)zW??C?JJ???#md5不能反解
序列化和JSON

應用執行個體:(python 和python之間傳輸檔案,單機遊戲即時儲存)

為什麼要序列化?

一個程式將列表存在一個程式中,另一個程式使用這個檔案的時候。使用序列化之後在讓另一個程式去讀取的話,使兩個python程式之間記憶體資料之間的交換,兩個獨立的進程在記憶體中看,他們的記憶體空間不能互相訪問,如果兩個程式之間不僅僅只是簡單的列表共用,還想其他資料交換,資料可能比較複雜。而且硬碟只能存字串類型的資料,只能通過系列化,存入檔案,另一個程式然後讀取檔案的內容,然後將其還原序列化之後,在載入到記憶體中
序列化:把一個對象或(一個列表、字典),把對象通過Python特有的機制序列化,序列化就是以特殊的形式以過二進位的方式給對象加密,並且序列化之後可以還原序列化。

序列化
import pickleli = [‘axex‘,11,22,‘ok‘,‘sb‘]print pickle.dumps(li)print type(pickle.dumps(li))輸出結果:(lp0S‘axex‘p1aI11aI22aS‘ok‘p2aS‘sb‘p3a.<type ‘str‘>#是一個沒有規則的字串類型
還原序列化
import pickleli = [‘axex‘,11,22,‘ok‘,‘sb‘]dumpsed = pickle.dumps(li)print type(dumpsed)loadsed = pickle.loads(dumpsed)print loadsedprint type(loadsed)<type ‘str‘>[‘axex‘, 11, 22, ‘ok‘, ‘sb‘]<type ‘list‘>

將列表序列化到一個檔案中

import pickleli = [‘axex‘,11,22,‘ok‘,‘sb‘]pickle.dump(li,open(‘E:/temp.pk‘,‘w‘))result = pickle.load(open(‘E:/temp.pk‘,‘r‘))#將檔案中還原序列化

JSON:一種標準化的資料格式,把不同格式的資料JSON化。
##兩種序列化的區別

  • pickle只能在python中使用
  • JSON是所有的語言都支援的介面
  • pickle 不但可以dump常規的資料類型,比如,字典、列表、集合,還可以序列化類別、對象,基本上所有的類型都可以實現序列化,JSON只能序列化常規的資料類型。因為,在不同的語言中類的格式不同。
  • pickle 序列化的序列的資料不可讀,但是JSON的資料格式是用人眼可以看出來他的格式
    import jsonname_dic = {‘name‘:‘wupeiqi‘,‘age‘:23}print json.dumps(name_dic)輸出結果:全部變成字串{"age": 23, "name": "wupeiqi"}


    為什麼多個了U呢,因為在存入記憶體中使用Unicode,你本事是utf-8,然後還原序列化之後又變成Unicode

python內建函數和序列化

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.