Python入门篇(二)

发布时间:2019-09-16 07:13:59编辑:auto阅读(1827)

    Python基础

    1、Python模块

    ### sys模块
    #!/usr/bin/python
    # _*_ coding:utf-8 _*_
    # Aothr: Kim
    import sys #导入sys模块
    print (sys.path) #打印python环境变量
    print(sys.argv) #打印脚本相对路径,执行的时候可以传入参数
    print (sys.argv[2]) #取出传入的参数
    ###os模块
    import os
    print(os.system("dir")) #调用系统命令
    cmd_res = os.popen("dir").read() #使用cmd_res变量存储执行结果,这里命令的执行结果会指向一个内存地址,所以需要加.read去读取结果。
    print("-->",cmd_res)
    os.mkdir("new_dir") #os模块中的创建目录方法

    第三方库,默认找当前目录,然后找Python环境变量是否存在该模块名。

    2、Python PYC

    预编译后的字节码

    (1)Python是一门解释型语言?

    初学Python一直听别人说,Python是一门解释性语言,直到发现了.pyc文件的存在。如果是解释型语言,那么生成的.pyc文件是什么呢?c应该是compiled的缩写才对啊!
    为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。

    (2)解释型语言和编译型语言

    计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
    编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
    解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。

    通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。

    此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
    用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。

    (3)Python到底是什么

    Python也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。

    当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
    Python是一门先编译后解释的语言。

    (4)简述Python的运行过程

    在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
    我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。

    当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
    当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到则直接载入,否则就重复上面的过程。
    所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。

    3、Python数据类型

    3.1、int(整数)

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

    3.2、long(长整数)

        自从python2.2起,如果整数发生溢出,python会自动将整数数据转为长整数类型,但是在python3.x版本,不存在long数据类型  
    
    ========python 2.7.5=========== 
    [root@python ~]# python
    Python 2.7.5 (default, Aug  4 2017, 00:39:18) 
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> type(2**50)
    <type 'int'>
    >>> type(2**60)
    <type 'int'>
    >>> type(2**62)
    <type 'int'>
    >>> type(2**63)
    <type 'long'>
    >>> 
    
    ========python 3.5.2===========
    (venv) D:\Python18\day02>python
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> type(2**100)
    <class 'int'>

    3.3、float(浮点数)

    1.浮点数用来处理实数,即带有小数的数字。
    2.浮点表示的形式是小数,但小数不一定都是浮点型,23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。

    3.4、complex(复数)

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

    3.5、布尔值

    真或假、1或0
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)
    [GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a = 0
    >>> if a :print("a")
    ...
    >>> a =1
    >>> if a :print("a")
    ...
    a

    3.6、查看数据类型的方法

    查看数据类型,使用type(),如下:
    
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print(type("www.123.com"))
    <class 'str'> #字符串
    >>> print(type(1.22))
    <class 'float'> #浮点数
    >>> print(type(1))
    <class 'int'> #整型

    4、数据运算

    4.1算术运算

    操作符 描述符 示例
    + 加法- 对操作符的两侧增加值 a + b = 30
    - 减法 - 减去从左侧操作数右侧操作数 a - b = -10
    * 乘法 - 相乘的运算符两侧的值 a * b = 200
    / 除 - 由右侧操作数除以左侧操作数 b / a = 2
    % 模 - 由右侧操作数和余返回除以左侧操作数 b % a = 0
    ** 指数- 执行对操作指数(幂)的计算 a**b = 10 的幂 20
    // 取整除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。 9//2 = 4 而 9.0//2.0 = 4.0

    4.2比较运算

    操作符 描述符 示例
    == 检查,两个操作数的值是否相等,如果是则条件变为真。 (a == b) 不为 true.
    != 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 (a != b) 为 true.
    <> 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 (a <> b) 为 true。这个类似于 != 运算符
    > 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 (a > b) 不为 true.
    < 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 (a < b) 为 true.
    >= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 (a >= b) 不为 true.
    <= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 (a <= b) 为 true.

    4.3赋值运算

    操作符 描述符 示例
    = 简单的赋值运算符,赋值从右侧操作数左侧操作数 c = a + b将指定的值 a + b 到 c
    += 加法AND赋值操作符,它增加了右操作数左操作数和结果赋给左操作数 c += a 相当于 c = c + a
    -= 减AND赋值操作符,它减去右边的操作数从左边操作数,并将结果赋给左操作数 c -= a 相当于 c = c - a
    *= 乘法AND赋值操作符,它乘以右边的操作数与左操作数,并将结果赋给左操作数 c = a 相当于 c = c a
    /= 除法AND赋值操作符,它把左操作数与正确的操作数,并将结果赋给左操作数 c /= a 相当于= c / a
    %= 模量AND赋值操作符,它需要使用两个操作数的模量和分配结果左操作数 c %= a is equivalent to c = c % a
    **= 指数AND赋值运算符,执行指数(功率)计算操作符和赋值给左操作数 c = a 相当于 c = c a
    //= 地板除,并分配一个值,执行地板除对操作和赋值给左操作数 c //= a 相当于 c = c // a

    4.4位运算

    操作符 描述符 示例
    & 二进制和复制操作了一下,结果,如果它存在于两个操作数。 (a & b) = 12 即 0000 1100
    | 二进制或复制操作了一个比特,如果它存在一个操作数中。 (a b) = 61 即 0011 1101
    ^ 二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。 (a ^ b) = 49 即 0011 0001
    ~ 二进制的补运算符是一元的,并有“翻转”位的效果。 (~a ) = -61 即 1100 0011以2的补码形式由于带符号二进制数。
    << 二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。 a << 2 = 240 即 1111 0000
    >> 二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。 a >> 2 = 15 即 0000 1111

    4.5逻辑运算

    操作符 描述符 示例
    and 所谓逻辑与运算符。如果两个操作数都是真的,那么则条件成立。 (a and b) 为 true.
    or 所谓逻辑OR运算符。如果有两个操作数都是非零然后再条件变为真。 (a or b) 为 true.
    not 所谓逻辑非运算符。用于反转操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将返回false。 not(a and b) 为 false.

    4.6二、三元运算

    result = 值1 if条件 else 值2
    
    如果条件为真:result=值1
    如果条件为假:result=值2
    
    Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> a,b,c = 1,3,5
    >>> d = a if a>b else c
    >>> d
    5
    >>> d = a if a <b else c
    >>> d
    1

    4.7进制类型

    二进制,01
    八进制,01234567
    十进制,0123456789
    十六进制,0123456789ABCDEF

    5、bytes类型

    Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。这是件好事。不管怎样,字符串和字节包之间的界线是必然的,下面的图解非常重要,务请牢记于心:

    Python入门篇(二)

    #!/usr/bin/python
    # _*_ coding:utf-8 _*_
    # Aothr: Kim
    
    #string和bytes类型转换,使用encode和decode的方式
    #decode==>bytes-->string
    #encode==>string-->bytes
    #举例
    msg = "我爱北京天安门"
    
    print(msg)
    print(msg.encode(encoding="utf-8") #转换成bytes
    print(msg.encode(encoding="utf-8").decode(encoding="utf-8")) #转换成字符串
    
    执行结果如下:
    我爱北京天安门
    b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
    我爱北京天安门
    
    应用场景:socket中传输必须是二进制,此时就需要将string进行转换成bytes类型

关键字