zoukankan      html  css  js  c++  java
  • Python学习之旅--第二周--python基础

    一.什么是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)

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

    如果字符串里面有很多字符都需要转义,就需要加很多,为了简化,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:workspaceday2	est.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]
  • 相关阅读:
    codeforces 455C 并查集
    poj 3501 Escape from Enemy Territory 预处理+二分+bfs
    POJ 2110 Mountain Walking 二分+bfs
    poj1637 Sightseeing tour 混合图欧拉回路判定
    ubuntu禁用super(win)键
    win10 ubuntu双系统安装后无法引导进入ubuntu
    python2限制函数传入的关键字参数
    python限制函数执行时间
    python classmethod 和 staticmethod的区别
    centos sendmail 启动慢
  • 原文地址:https://www.cnblogs.com/guqing/p/6060174.html
Copyright © 2011-2022 走看看