一.什么是pyc?

1.Python是解释性语言,那么.pyc是什么文件? 
2.解释性语言和编译型语言区别:   
  计算机是不能够识别高级语言的,所以当我们运行一个高级别语言程序时,就需要一个“翻译机”来从事把高级语言转变成计算  机能读懂的机器语言,这个过程
分两类,第一种为编译,第二种是解释。编译语言在程序执行之前,会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直
接运行。最典型的就是C语言。  
  解释性语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行做出解释,然後直接运行,最典型的就是
ruby. 通过以上例子,我们可以总结一下解释型语言和编译语言的优缺点,因为编译型语言在运行之前就已经对程序作出了翻译,所以在  运行时就少掉了翻译的
过程,执行效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器优化来对程序做出翻译  时对整个程序做出优化,从而在效率上超过编译型语
言。  此外,随着JAVA等基于虚拟机的语言的兴起,我们又不能把语言纯粹的分成解释型和编译型这两种。  用JAVA来举例,JAVA首先是通过编译器编译成字节码
文件,然后在运行时通过解释器给解释成机器码,所以我们说JAVA是一种先编译再解释的语言。
3.PYTHON到底是什么? 
   其实PYTHON和JAVA/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单的了解一下PYTHON程序的运行过程吧  当我们在命令行中输入PYTHON HELLO.
PY时,其实是激活了PYTHON的解释器,告诉解释器:你要开始工作了,可是解释之前,其实执行了  第一项工作和JAVA一样,是编译。  只是我们再用ECLIPSE
之类的IDE时,将这两部给融合成了一部而已。其实PYTHON也一样,当我们执行PYTHON HELLO.PY时,他也一样执行  这么一个过程,所以我们应该这样描述PYT
HON,PYTHON是一门先编译后解释的语言。   4.简述PYTHON的运行过程:  在所这个问题之前,我们先来说两个概念。PYCodeObject和pyc文件。  
我们再硬盘上看到的pyc自然不必多说,而其实PYCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了。  
当PYTHON程序运行时,编译的结果则是保存在位于内存中的PYCodeObject中,当PYTHON程序运行介时,PYTHON解释器则将PYCodeObject写回到pyc文件中。
 当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。  所以我们应该这样来定位PyCodeObject和
pyc文件,我们说pyc文件其实就是PyCodeObject的一种持久化保存方式。
二.数据类型

数据类型初识

1.数字

2是一个整数的例子。  3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里52.3E-4表示52.3*10-4  (-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数。j为虚数,数学中表示复数是什么?

  int整型

   在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647  在64位机器上,整数的位数为64位,取值范围为-2**63~-2**63-1,即-9223372036854775808~9223372036854775808

  long长整型  跟C语言不同,PYTHON的长整型没有定位宽,即PYTHON没有限制长整数的数值大小,但实际由于机器内存有限,我们使用的长整型数值不可能无限大。  注意,自从PYTHON2.2起,如果整数发生溢出,PYTHON会自动将整数数据转换成长整型,所以如今在长整数据后面不加字母L也不会导致严重后果。

  float浮点数

  浮点数用来处理实数,即带有小数点的数字。类似与C语言中的DOUBLE类型。占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

  complex复数

  复数由实数和虚数部分组成,一般形式为x+yj,其中x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。   注:PYTHON中存在小数字池:-5~257

2.布尔值

  真或假  1或0

3.字符串

  “hello world”  万恶的字符串拼接:   PYTHON中的字符串在C语言中体现的是一个字符数组,每次创建字符串时需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,   万恶的+号每出现一次就会在内存中重新开辟一块空间。  字符串格式化输出

name = "alex"
print ("i am %s"%name)

输出:

i am alex

如果字符串内部既包含'又包含"怎么办?可以用转义字符\来标识,比如我想打印:my name is "tim"

name = "tim"
print('my name is \"%s\"'%name)

转义字符\可以转义很多字符,比如\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\.

如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r''表示''内部的字符串默认不转义,可以自己试试:

print(r'My name is "tim,",your name is "king"')

输出:

My name is "tim,",your name is "kim"

4.空值

  空值在PYTHON中是一个特殊的值,用none表示。

5.变量

  变量不仅可以是数字,也可以是字符串、布尔值等等任意数据类型。变量是内存中分配的一个存储数据的空间。变量名必须是大小写字母、数字和_组成,且不能由数字开头。

  

a = 1
b = "Hello World!"
c = True print(a)
print(b)
print(c)

输出:

1
Hello World!
True

变量a是数字1,变量b是字符串Hello World!,变量c是布尔值True

6.常量

  常量是不可更改的数据,一旦初始化后,就不可改变值。一般用大写来表示:

NUMBER = 5

7.列表

  python内置的一种数据类型,list是一种有序的集合,可是随时添加或删除其中的元素。

  例如:

list= ['Tim','jack','king','jane']

  用len(list)可以知道列表有多少个元素。比如:

>>> len(list)
4

  索引从0开始,用索引访问列表中所有元素:

list[0]
>>>Tim
list[1]
>>>jack
list[2]
>>>king
list[3]
>>>jane

  索引-1表示倒数第一个,-2表示倒数第二个,以此类推。

  添加元素:

list.append('mike')
print(list)
>>>['Tim', 'jack', 'king', 'jane', 'mike']

  通过append方法添加的元素一般放在索引最后,也可以插入指定位置的值,如:

list= ['Tim','jack','king','jane']
list.insert(1,'Tom')
print(list)
>>>['Tim', 'Tom', 'jack', 'king', 'jane']

  删除末尾的元素:

list= ['Tim','jack','king','jane']
list.pop()
>>>['Tim', 'jack', 'king']

  删除指定位置的元素:

list= ['Tim','jack','king','jane']
list.pop(2)
print(list)
>>>['Tim', 'jack', 'jane']
或者:
list.remove('king')

  还可以有一种办法:

name = ['alex','jack','Rain','Eric','Monica','Fiona']
del name[4:6]
print(name)
>>>['alex', 'jack', 'Rain', 'Eric']

  还可以用del删除整个列表:

name = ['alex','jack','Rain','Eric','Monica','Fiona']
del name
print(name)
>>>Traceback (most recent call last):
File "C:\workspace\day2\test.py", line 3, in <module>
print(name)
NameError: name 'name' is not defined

  替换指定位置元素:

list= ['Tim','jack','king','jane']
list[0] = 32
print(list)
>>>[32, 'jack', 'king', 'jane']

  元素也可以是另一个列表

  

list= ['Tim','jack',['king','Wang'],'jane']
print(list)
>>>['Tim', 'jack', ['king', 'Wang'], 'jane']

  每隔一个取一个值:

  

name = ['alex','jack','Rain','Eric','Monica','Fiona']
print(name[0:])
print(name[0: :2])#或者print(name[::2])
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona']
['alex', 'Rain', 'Monica']

  判断元素是否存在以及计算有几个同值元素:ele in name

  

name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
if 9 in name:
print("9 is in name.")
num_of_ele = name.count(9)
print("[%s]9 is/are in name."%num_of_ele)
>>>
9 is in name.
[2]9 is/are in name.

  寻找元素的索引值:name.index()

name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
posistion_of_ele = name.index(9)
print(posistion_of_ele)
>>>
11

  批量修改同样值得元素:name.index()

 

name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
while True:
running = 9 in name
if running == True:
posistion_of_ele = name.index(9)
name[posistion_of_ele] = 999
else:
break
print(name)
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 999, 999, 2] 或者:(同样效果)
name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
for i in range(name.count(9)):
  ele_index = name.index(9)
  name[ele_index] = 999
print(name)

  

列表扩展:extend()

name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
name2 = ['zhangsan','lisi','zhaosha']
name.extend(name2)
print(name)
print(name2)
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2, 'zhangsan', 'lisi', 'zhaosha']
['zhangsan', 'lisi', 'zhaosha']

看下面这段代码,可以依次取到元素的某个字符。

name = ['MingLong','MingHu','Jack',22,9,23,3,4,5,7,87,89,9,9,4]
print(name[:6])
>>>['MingLong', 'MingHu', 'Jack', 22, 9, 23]
print(name[:6][2])
>>>Jack
print(name[:6][2][0])
>>>J

  元素的排序:sort()

name = [56,8,23,76555,12,467,786,1231]
print(name)
name.sort()
print(name)
>>>
[56, 8, 23, 76555, 12, 467, 786, 1231]
[8, 12, 23, 56, 467, 786, 1231, 76555]

  列表复制:

name = ['alex','jack','Rain','Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
name3 = name.copy()
print(name)
print(name3)
>>>
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
['alex', 'jack', 'Rain', 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]

  

  列表嵌套:内嵌列表是单独的一块内存地址,在使用copy()时,其实并没有复制内嵌列表的值,只是把内嵌列表的内存地址指向了新列表,在内嵌列表被修改后,同时作用于所有拥有此内嵌列表的列表。而普通元素相当于变量赋值,按照赋值的顺序显现。等同于标准库的copy.copy(list),而要完全复制内嵌列表可以使用

  

import copy

name = ['alex','jack','Rain',[5,6,87,2],'Eric','Monica','Fiona',6,5,4,2,7,9,9,2]
name3 = name.copy() #不复制内嵌列表
name4 = copy.copy(name)#等同于copy()
name5 = copy.deepcopy(name) #完全复制内嵌列表
name[0] = 'Jeson'
name[3][1] = 4444444
name3[3][2] = "HHHHHH"
print("name",name)
print("name3",name3)
print("name4",name4)
print("name5",name5)
>>>
name ['Jeson', 'jack', 'Rain', [5, 4444444, 'HHHHHH', 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
name3 ['alex', 'jack', 'Rain', [5, 4444444, 'HHHHHH', 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
name4 ['alex', 'jack', 'Rain', [5, 4444444, 'HHHHHH', 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]
name5 ['alex', 'jack', 'Rain', [5, 6, 87, 2], 'Eric', 'Monica', 'Fiona', 6, 5, 4, 2, 7, 9, 9, 2]

最新文章

  1. tomcat配置SSL双向认证
  2. 关于kali2.0 rolling无法连接数据的解决办法
  3. Swift:闭包
  4. php : 自定义分页类
  5. iOS开发-- RunLoop的基本概念与例子分析
  6. 斯坦福第十三课:聚类(Clustering)
  7. 如何制作CSR文件?
  8. ecshop后台增加模板页的方法
  9. WIndows 7 与 Debian 7 双系统启动引导
  10. 基于C#的SolidWorks插件开发(2)--创建插件
  11. ajax请求原理
  12. flask开发过程中的常见问题
  13. EXCEL公式及宏
  14. c语言笔记3运算符与表达式
  15. centos7安装minikube
  16. u3d 元件的克隆 Cloning of u3d components
  17. JavaScript indexOf() 方法
  18. lua加载函数require和dofile
  19. Netty 解码器抽象父类 ByteToMessageDecoder 源码解析
  20. Android之Activity切换

热门文章

  1. 使用WPF教你一步一步实现连连看
  2. python 调用 bash (python 调用linux命令)
  3. CKEditor 自主控制图片上传
  4. linux命令——iotop
  5. 汇编条件判断整理(JCC,CMP/TEST的实现)
  6. webpack入门必知必会
  7. 百度地图API的自动定位和搜索功能(移动端)
  8. 【CSS学习笔记】CSS初始化
  9. python爬虫框架scrapy初试(二)
  10. php学习笔记——日期和时间