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()
View Code

在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 运算
View Code

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')

字符串方法
View Code

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']
View Code

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']
View Code

c、改

>>> names = ["daye", "gemen", "hello", "Jim", "lance", "eos666", "dama"]
----------#修改--------------
# 第一个元素 daye 变更为 gogogo
>>> names[0] = "gogogo"
# 查看names第一个元素变为"gogogo"
>>> names
['gogogo', 'gemen', 'hello', 'Jim', 'lance', 'eos666', 'dama']
>>>
View Code

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']
View Code

e、查

>>> names = ["daye", "gemen", "hello", "Jim", "lance", "eos666", "dama"]
#查,索引 print(names.index())
----------#查询打印出'hello'的索引号--------------
>>> print(names.index("hello"))
2
#统计列表names中"eos666"有几个
>>> names.count("eos666")
1
View Code

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
>>>
View Code

(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
View Code

(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
View Code

(4)、list(seq):将元组转换为列表 

>>> aTuple = (666, 'EOS666', 'hello', 'daguai')
>>> aList = list(aTuple)
>>>
>>> print("aList :", aList)
aList : [666, 'EOS666', 'hello', 'daguai']
View Code

 

列表操作包含以下方法:
(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码排序

 

posted on 2018-04-14 23:53  EOS666  阅读(134)  评论(0)    收藏  举报

导航