python內置函數和序列化

修改字符集

全局修改

點擊window
這裏寫圖片描述 python

針對某一個工程

右鍵,有一個屬性propertes
這裏寫圖片描述mysql

給某個文件,也就是前面加

也是右鍵屬性,這裏就不在說了
#模塊的和模塊的經常使用方法sql

  • 相當重要的__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-8
    def 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 1
re = foo()
print re
輸出:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
0
1
2
3
4
5
6
7
8
9
<generator object foo at 0x00000000030B8480>
def fool():
    yield 1
    yield 2
    yield 3
yield 4  
#他的執行過程是,第一從從yield 1 執行,下一次直接從yield2開始執行 
re = fool()
print re
#生成了一個生成器,每次遍歷只生成一條
for item in re :
print item
結果:
<generator object fool at 0x0000000003248480>
1
2
3
4
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 1
    1 2
    2 3
    3 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 + 100
    li = [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 True
    else:
        return False
    temp = 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 model
    print 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()判斷函數中是否含有相應的模塊json

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

import random
print random.random()
print random.randint(1,5)
#生成1-5之間的隨機整數
print random.randrange(1,3)
#生成大於等於1,小於3的隨機數
import random
code = []
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只申請一次dom

md5加密

#!/usr/bin/env python
#coding:utf-8
import hashlib
hash=hashlib.md5()
hash.update('admin')
print hash.hexdigest()
print hash.digest()
21232f297a57a5a743894a0e4a801fc3
!#/)zW��C�JJ�¬�
#md5不能反解

序列化和JSON

應用實例:(python 和python之間傳輸文件,單機遊戲實時保存)ide

爲何要序列化?

一個程序將列表存在一個程序中,另外一個程序使用這個文件的時候。使用序列化以後在讓另外一個程序去讀取的話,使兩個python程序之間內存數據之間的交換,兩個獨立的進程在內存中看,他們的內存空間不能互相訪問,若是兩個程序之間不只僅只是簡單的列表共享,還想其餘數據交換,數據可能比較複雜。並且硬盤只能存字符串類型的數據,只能經過系列化,存入文件,另外一個程序而後讀取文件的內容,而後將其反序列化以後,在加載到內存中
序列化:把一個對象或(一個列表、字典),把對象經過Python特有的機制序列化,序列化就是以特殊的形式以過二進制的方式給對象加密,而且序列化以後能夠反序列化。函數式編程

序列化

import pickle
li = ['axex',11,22,'ok','sb']
print pickle.dumps(li)
print type(pickle.dumps(li))
輸出結果:
(lp0
S'axex'
p1
aI11
aI22
aS'ok'
p2
aS'sb'
p3
a.
<type 'str'>
#是一個沒有規則的字符串類型

反序列化

import pickle
li = ['axex',11,22,'ok','sb']
dumpsed = pickle.dumps(li)
print type(dumpsed)
loadsed = pickle.loads(dumpsed)
print loadsed
print type(loadsed)
<type 'str'>
['axex', 11, 22, 'ok', 'sb']
<type 'list'>

將列表序列化到一個文件中

import pickle
li = ['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 json
    name_dic = {'name':'wupeiqi','age':23}
    print json.dumps(name_dic)
    輸出結果:所有變成字符串
    {"age": 23, "name": "wupeiqi"}

    這裏寫圖片描述爲何多個了U呢,由於在存入內存中使用Unicode,你本事是utf-8,而後反序列化以後又變成Unicode

相關文章
相關標籤/搜索