1. 程式人生 > >復習 文件類型

復習 文件類型

復習 字符類型

1.3.python的文件類型

1.創建一個文件:

vim 1.py

#!/usr/bin/python (由python的解釋器解釋)

print 'Hello World'

2.如何獲得輸出?

python 1.py

或者

chmod +x 1.py (添加執行權限)

./1.py

3.源代碼

python的源代碼文件以.py為擴展名,由Python程序解釋,不需要編譯

4.字節代碼

python的源碼文件經過編譯後生成的擴展名為.pyc的文件

所以,以.py和.pyc為結尾的文件都是python的腳本

*.pyc 文件內是字節代碼,由源碼文件編譯後生成的,經過編譯後,.pyc不是源碼文件了

5.編譯方法:

使用python的模塊 py_compile 來編譯

6.插入模塊:

import py_compile

經查詢,這個模塊的方法為:

py_compile.compile('***.py')

舉例:

vim 2.py

#!/usr/bin/python

import py_compile

py_compile.compile('./1.py') [此處可以寫全名,表示當前目錄;或者寫絕對路徑都可以]

完成後執行

python 2.py

ls 查看當前目錄

發現多出一個 1.pyc 的文件

技術分享圖片

file 1.pyc 查看文件類型

技術分享圖片

如圖,顯示這個文件是“字節編譯”文件

這個文件不是“文本文件”了,變成了“二進制文件”,打開後,顯示如圖:

技術分享圖片


文件 1.pyc 如何執行?

同 *.py 文件

也是

# python 1.pyc

技術分享圖片

7.優化代碼:

經過優化的源碼文件,擴展名為:.pyo ,比.pyc 文件更優化一些

# python -O 【表示優化】 -m 【調用模塊】 py_compile 1.py

執行完成會多出個1.pyo的文件,如何執行?

# python 1.pyo

技術分享圖片


文件 1.pyo 也不是“文本文件”了,打開後也是亂碼,如圖:

技術分享圖片

1.pyo 比 1.pyc 更優化

通常我們更多的時候都寫成 源碼,假如你寫的源碼不想讓別人看,可以編譯成 .pyc 或者 .pyo 的文件, .pyc或 .pyo的文件是不需要 源碼(.py) 文件存在的



1.4.python的變量

變量是計算機內存中一塊區域,變量可以存儲規定範圍內的值,而且值可變。

python 下變量是對一個數據的引用

變量名相當於是個標簽,通過標簽來讀內存中這塊數據

給變量賦值相當於標簽指向了內存中的另外一塊區域

變量命名:

由字母、數字、下劃線組成

不能以數字開頭

不可以用關鍵字

例如:a a_1 _a3

變量的賦值:

a = 1

id(a) id是內置函數,可以查看a在內存的哪個區域

python運算符號:

賦值運算符

算數運算符

關系運算符

邏輯表達式


1.5. Python的數值和字符串

整數分為正數和負數

int的範圍:

-2**31 --- (2**31)-1

字符串是個序列,序列的操作有“索引”和“切片”

可以通過索引操作

a = 'abcde'

a[0] = a

連接符

a[0]+a[1] = ab

分片:

a[0:2] = ab = a[:2]

a[1:2] = b

a[1:] = bcde

a[:-1] = abcd

a[:] = abcde

步長:

a[::1] = abcde

a[::2] = ace

例:

a[-4:-2] = bc

a[-2:-4:-1] = dc (-1代表方向步長)


1.6.元組

序列包括:字符串、列表、元組

序列兩個特點:索引操作符和切片操作符

索引操作符:可以從序列中抓取一個特定項目

切片操作符:可以獲取序列的一個切片,即一部分序列

序列的基本操作

1.len() 序列長度

2.+ 連接兩個序列

3.* 重復序列元素

4.in 判斷元素是否在序列中

5.max() 返回最大值

6.min() 返回最小值

7.cmp(x,y) 比較兩個序列是否相等(x<y返回負數,x==y 返回0,x>y返回正數)

元組

元組與列表相似

元組和字符串一樣是不可變的

元組可以存儲一系列的值

元組通常用在用戶定義的函數能夠安轉的采用一組值的時候,即被使用的元組的值不會改變。

元組的操作

元組和字符串一樣屬於序列,可以索引和切片

元組值不可變

元組拆分

t = (1,2,3)

a,b,c = t

這樣

a = 1

b=2

c=3

元組的兩個方法:

t.count(value) #如果value在元組裏,返回1,否則,返回0;

t.index(value) #這個value的值的索引,是個整數;如果元組裏面有很多重復的值

會顯示第一個值的索引。


1.7 列表

列表用[]定義

是序列的一種,是可變類型的有序的序列

列表創建(3種例子):

list1=[]

list2=list()

list3=['a',1,2,(3,),['aaa',22,'3']]

list1.append() 追加

(list1+list2) * 2 乘法

取值

切片和索引

添加

list.append()

刪除

del list[0] #del 還能刪除變量,被刪掉的變量返回 "沒有定義"

list.remove([list[0]]) # 如果列表內有重復元素的默認只刪除1第一個元素

修改

list[] = x

查找

var in list

插入

list.insert(1,'cccc')

排序

list.sort() #升序排序

反序排序

list.reverse() #反序排序

刪除列表的元素,並返回值

list.pop() #默認刪除最後一個,如果給索引,刪除後會返回這個值

追加可叠代對象

list.extend() #從可叠代的對象裏面取元素放到列表中去

舉例:

list3.extend(range(5))

list3.extend('abcdefg')

list3.extend(('aa','bb'))


1.8 字典

list1 = ['name', 'age']

list2 = ['tom', '20']

zip函數:(作用:合並列表)

zip(list1, list2) = [('name', 'tom'), ('age', '20')]

字典 { }

字典的對象是可變的,跟列表一樣,可以去改變值,可以增加刪除

字典的key是不能變的

key和value是一對

value可以變,但是key不能變

dic = {} 空字典

dic = {'a':1, 1:123}

字典是無序的

len(dic) = 2 表示字典的長度,即有幾個元素

dic.keys() 打印出所有的key

dic.values() 打印出字典裏面的value

help(dic.get)

dic['a'] = 1 可以通過下標來訪問

dic.get('a') = 1 正常用 .get() 訪問

dic['a'] = 2 將key為‘a’的值改為 2

dic.get('a', 'linan') = 'linan'

dic.get 如果給定key的value,那麽打印給定的value

判斷字典中有沒有指定的key:

方法一:

a in dic => True

b in dic => False

方法二:

dic.has_key('a') => True

dic.has_key('b') => False

items方法:將字典變成列表,一個key和value是一個元素

dic.items()

[('a', 2), (1, 23)]

變成列表後就可以‘索引’和’切片‘了

copy方法:

dic1 = dic.copy()

dic1 就變成了和 dic 一樣的字典了

clear方法:

清除字典內的元素

pop方法:

dic = {'a':1, 1:123}

dic.pop(1) 刪除key為1的字典元素

結果 :dic = {'a' : 1}

字典就剩下一個元素了

help(dic.update)

dic.update() 將兩個字典更新為一個字典

例子:

dic1 = {'c' : 12 , 3:345}

dic = {'a':1, 1:123}

dic.update(dic1) = {'a':1, 1:123, 'c' : 12 , 3:345 }

dict 將列表等變成字典:(工廠函數)

list1 = ['name', 'age']

list2 = ['tom', '20']

zip(list1, list2) = [('name', 'tom'), ('age', '20')]

dict(zip(list1, list2)) = {'name': 'tom', 'age': '20'}

這樣就把列表改為字典了

同理:

dict(a = 10 ,b = 20) => { 'a'=10, 'b'=20 }

fromkeys方法:

技術分享圖片

返回一個新的字典,沒有值,默認是None

fromkeys適合 '值' 都是一樣的情況:

技術分享圖片

例二:

技術分享圖片

技術分享圖片

技術分享圖片

通過for循環訪問字典裏的key:

技術分享圖片

技術分享圖片

打印出key :

1 2 'a' ('a', 'b')



同時打印出key和value:

技術分享圖片

技術分享圖片


改進版:

技術分享圖片

改改進版:


技術分享圖片



1.9 字典練習

#!/usr/bin/python
info = {}
name = raw_input('please input name:')
age = raw_input('please input age:')
gender = raw_input('please input M/F:')
info['name'] = name
info['age'] = age
info['gender'] = gender
for k,v in info.items():
    print "%s: %s" %  (k,v)
print 'main end'


復習 文件類型