Python-Day005
一、.pyc文件
1、什么是pyc文件
pyc 是由py文件经过编译后二进制文件,py文件变成pyc文件后,加载的速度有所提高,而且pyc是一种跨平台的字节码,是由python 的虚拟机来执行的。pyc的内容,是跟python的版本相关的,不同版本编译后的pyc文件是不同的,2.5编译的pyc文件,2.4版本的 python是无法执行的。pyc文件也是可以反编译的,不同版本编译后的pyc文件是不同。
2、为什么需要pyc文件
这个需求太明显了,因为py文件是可以直接看到源码的,如果你是开发商业软件的话,不可能把源码也泄漏出去吧?所以就需要编译为pyc后,再发布出去。
3、pycodeobject与pyc文件关系
[CodeObject.py]
1 class A : 2 3 pass 4 5 def Fun(): 6 7 pass 8 9 a = A() 10 11 Fun()
在Python编译完成后,一共会创建3个PyCodeObject对象,一个是对应CodeObject.py的,一个是对应class A这段Code(作用域),而最后一个是对应def Fun这段Code的。每一个PyCodeObject对象中都包含了每一个代码块经过编译后得到的byte code。但是不幸的是,Python在执行完这些byte code后,会销毁PyCodeObject,所以下次再次执行这个.py文件时,Python需要重新编译源代码,创建三个PyCodeObject,然后执行byte code。
很不爽,对不对?Python应该提供一种机制,保存编译的中间结果,即byte code,或者更准确地说,保存PyCodeObject。事实上,Python确实提供了这样一种机制——Pyc文件。
参考地址:http://my.oschina.net/renwofei423/blog/17404
二、数据类型
1、数字(整型,长整型,浮点型)(int,long,float)
1 x的值22,y的值3 2 >>> x = 22 3 >>> y = 3 4 #######################返回绝对值###################### 5 abs(-x) 6 >>> abs(-x) 7 22 8 #######################加减乘除####################### 9 >>> x+y 10 25 11 >>> x-y 12 19 13 >>> x/y 14 7.333333333333333 15 ###################取商,浮点数相除保留余数################### 16 >>> x/y 17 7.333333333333333 18 ###################取商,浮点数相除余数为0################### 19 >>> x//y 20 7 21 ########################取余######################## 22 >>> x%y 23 1 24 ########################幂次方####################### 25 >>> x**y 26 10648 27 #################################################### 28 def __cmp__(self, y): 29 """ 比较两个数大小 """ 30 """ x.__cmp__(y) <==> cmp(x,y) """ 31 pass 32 33 def __coerce__(self, y): 34 """ 强制生成一个元组 """ 35 """ x.__coerce__(y) <==> coerce(x, y) """ 36 pass 37 38 def __divmod__(self, y): 39 """ 相除,得到商和余数组成的元组 """ 40 """ x.__divmod__(y) <==> divmod(x, y) """ 41 pass 42 43 ######################转换为浮点型###################### 44 float(33) 45 33.0 46 ######################转换为字符串###################### 47 <class 'int'> 48 str(x) 49 <class 'str'> 50 ######################转换为16进制##################### 51 x=22,x数据类型<class 'int'> 52 hex(x) 53 0x16 54 ######################转换为8进制###################### 55 x=22,x数据类型<class 'int'> 56 oct(x) 57 0o26 58 59 运算
2、字符串(string)
name='abcdefg abcd' #######################首字母大写###################### name.capitalize() Abcdefg abcd ###################### 长度20居中##################### name.center(20) abcdefg abcd ################## 长度20里居中,其他用*填充################# name.center(20,"*") ****abcdefg abcd**** #################长度20居左,rjust()居右################# name.ljust(20) abcdefg abcd #####################字符串里a的个数##################### name.count('a') ###################字符串指定区域里a的个数################### name.count('a',0,10) ####################字符串是否以bc为结尾################### name.endswith('bc') False #################把tab键转换为空格,默认8个空格################ name.expandtabs(8) abcdefg abcd ############找字符b的下标,找不到返回-1,如果有多个只找第一个############ name.find('b') ###################找字符b的下标,找不到报错################## name.index('b') ####################判断是否为字母或数字#################### name.isalnum() False ######################判断是否为字母##################### name.isalpha() False ######################判断是否为数字##################### name.isdigit() False ######################判断是否小写###################### name.islower() True #####################判断是否都是空格##################### name.isspace() False #####################判断是否全是大写##################### name.isupper() False #######################全变小写####################### name.lower() abcdefg abcd ###########全变大写,name值并没变,name.upper()输出大写######### name.upper() ABCDEFG ABCD print(name)的值 abcdefg abcd ####################大写变小写,小写变大写################### name.swapcase() abcdefg abcd ##################### 符合的全部替换##################### name.replace('c','d') abddefg abdd ####################移除空格字符两边空格#################### name.strip() abcdefg abcd #######################以b为分割###################### name.split('b') ['a', 'cdefg a', 'cd'] ###################### #join###################### ###################把列表的元素用*连接起来################### li=["aa","bb"] '*'.join(li) aa*bb ###############变为标题,标题(所有首字母大写就是标题)############### name.title() Abcdefg Abcd ######################判断是不是标题##################### name.istitle() False #####################partition#################### name='aaccbb' #################分割成3部分 (aa,bb,cc)################ name.partition("cc") ('aa', 'cc', 'bb') 字符串方法
3、列表(list)
列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
Python有6个序列的内置类型,但最常见的是列表和元组。序列都可以进行的操作包括索引,切片,加,乘,检查成员。此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。
a、切片
>>> names = ["daye", "gemen", "hello", "Jim", "lance", "eos666", "dama"] #打印列表索引位第二个 >>> names[1] 'gemen' #打印列表第一个到第二个位置的元素 也可以写成 print(names[:2]) >>> names[:2] ['daye', 'gemen'] #打印列表倒数第三和第二个元素,这里的-1不能够省略 >>> names[-3:-1] ['lance', 'eos666'] #打印列表倒数3个元素 >>> names[-3:] ['lance', 'eos666', 'dama'] #打印列表,即步长为2,不包含最后一个元素 >>> names[0:-1:2] ['daye', 'hello', 'lance'] #打印整个列表隔个打印,即步长为2 >>> names[::2] ['daye', 'hello', 'lance', 'dama']
b、追加
>>> names = ["daye", "gemen", "hello", "Jim", "lance", "eos666", "dama"] -----------#追加------------- #列表最后添加一个元素"xiaozi" >>> names.append("xiaozi") >>> names ['daye', 'gemen', 'hello', 'Jim', 'lance', 'eos666', 'dama', 'xiaozi'] #列表索引位1前,插入“first”,即原来的元素索引位1变为2 >>> names.insert(1,"first") >>> names ['daye', 'first', 'gemen', 'hello', 'Jim', 'lance', 'eos666', 'dama', 'xiaozi']
c、改
>>> names = ["daye", "gemen", "hello", "Jim", "lance", "eos666", "dama"] ----------#修改-------------- # 第一个元素 daye 变更为 gogogo >>> names[0] = "gogogo" # 查看names第一个元素变为"gogogo" >>> names ['gogogo', 'gemen', 'hello', 'Jim', 'lance', 'eos666', 'dama'] >>>
d、删
>>> names = ["daye", "gemen", "hello", "Jim", "lance", "eos666", "dama"] -----------#删除------------ -----------#这里删除里面是要知道具体的元素( 如:Jim )------------ >>> names.remove("Jim") >>> names ['daye', 'gemen', 'hello', 'lance', 'eos666', 'dama'] #以下删除的是索引对应的元素,也可以写成names.pop(0) >>> del names[0] >>> names ['gemen', 'hello', 'lance', 'eos666', 'dama'] #不加索引,默认是删除最后一个元素 >>> names.pop() 'dama' >>> names ['gemen', 'hello', 'lance', 'eos666'] #删除names中索引为2的元素 >>> names.pop(2) 'lance' >>> names ['gemen', 'hello', 'eos666']
e、查
>>> names = ["daye", "gemen", "hello", "Jim", "lance", "eos666", "dama"] #查,索引 print(names.index()) ----------#查询打印出'hello'的索引号-------------- >>> print(names.index("hello")) 2 #统计列表names中"eos666"有几个 >>> names.count("eos666") 1
f、Python列表操作的函数和方法
列表操作包含以下函数:
(1)、len(list):列表元素个数
>>> list1,list2 = [666, 'eso666', 'eos888'], [789, 'qq'] >>> print("First list length: ", len(list1)) First list length: 3 >>> print("Second list length: ", len(list2)) Second list length: 2 >>>
(2)、max(list):返回列表元素最大值
>>> list1,list2 = ['666', 'eso666', 'eos888'], ['789', 'qq'] >>> print("Max value element : ", max(list1)) Max value element : eso666 >>> print("Max value element : ", max(list2)) Max value element : qq
(3)、min(list):返回列表元素最小值
>>> list1,list2 = ['666', 'eso666', 'eos888'], ['789', 'qq'] >>> print("Min value element : ", min(list1)) Min value element : 666 >>> print("Min value element : ", min(list2)) Min value element : 789
(4)、list(seq):将元组转换为列表
>>> aTuple = (666, 'EOS666', 'hello', 'daguai') >>> aList = list(aTuple) >>> >>> print("aList :", aList) aList : [666, 'EOS666', 'hello', 'daguai']
列表操作包含以下方法:
(1)、list.append(obj):在列表末尾添加新的对象
(2)、list.count(obj):统计某个元素在列表中出现的次数
(3)、list.extend(seq):在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
(4)、list.index(obj):从列表中找出某个值第一个匹配项的索引位置
(5)、list.insert(index, obj):将对象插入列表
(6)、list.pop(obj=list[-1]):移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
(7)、list.remove(obj):移除列表中某个值的第一个匹配项
(8)、list.reverse():反转列表中元素顺序
(9)、list.sort([func]):对原列表进行排序,按ascii码排序
浙公网安备 33010602011771号