day2

 

一、模块初识

      模块又可以叫做库,Python的强大之处在于他有非常丰富和强大的标准库和第三方库。标准库:不需要安装可以直接导入的库(getpass);第三方库:必须要下载安装才能使用。现在,我们先象征性的学2个简单的标准库。

     注意:调用模块时先从当前目录下找sys文件,如果没有再在库文件夹中找,所以这里文件名和模块名不要一样,一样容易出错,Python3不会报错。但要注意。

     1、sys  

            ①、sys.path:   显示 存模块和自己内部调用的文件的 路径(也就是环境变量)

            

            显示结果:

            

          相关代码:

          

#调用模块时先从当前目录下找sys文件,如果没有再在库文件夹中找,
#所以这里文件名和模块名不要一样,一样容易出错,Python3不会报错。但要注意。

#sys.path  ------显示 存模块和自己内部调用的文件的 路径(也就是环境变量)
#python标准库一般会存在安装目录下的  lib目录下。
#python第三方库一般会存在安装目录下的  lib\site-packages目录下。
import sys
print(sys.path)  #这个与import要在一个级别中。不然会出错。----打印环境变量

              ②、sys.argv:     取相对路径

             

            执行结果:

            

             相关代码:

             

import sys
print(sys.argv)  #打印相对路径。pycharm执行是相对路径。需要在cmd中运行。
print(sys.argv[2])
#取参数内容。需要在cmd中运行

  2、os

    ①、os.system("命令”) --------------命令执行的结果只显示到当前界面,不保存结果。

           

           显示结果:由于编码模式不一样,所以会显示乱码。------>0   表示命令执行成功,  0表示完成。

          

          相关代码:

         

import os
cmd_res = os.system("dir")    #执行命令不保存结果
print("--->",cmd_res)

   

    ②、os.popen("命令").read()------------执行命令,保存结果,这个命令执行后只显示一个保存在内存的位置,需要通过 .read() 来读取内存的数据才行。

            

            执行结果:

             

            相关代码:

             

import os
cmd_res = os.popen("dir").read()    #执行命令,保存结果,这个命令执行后只显示一个保存在内存的位置,
                                     # 需要通过  .read()  来读取内存的数据才行。
print("--->",cmd_res)

           

    ③、os.mkdir("new_file")     ----------------- 创建目录

           代码:

import os
os.mkdir("new_file")       #创建目录

 

 

二、pyc是什么?

  1、Python是一门解释性语言。

          Python是一门解释性语言,发现有.pyc文件的存在,如果是解释性语言,那么生成的.pyc文件是什么呢?C应该是compiled的缩写才对。

         以免学习python的人有所误解,来解释这件事。

     2、解释型语言和编译型语言

          出现的起因:计算机是不能够识别高级语言的,所以当我们运行一个高级语言时,需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分为两类,于是就出现了,编译和解释这两种。

       编译型语言:在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言,运行时就不需要翻译,而直接执行就可以了,最典型的例子就是C语言。

   解释型语言:没有编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,典型的例子是Ruby。

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

    此外,随着java等基于虚拟机的语言的兴起,我们又不能把语言村崔的分为解释型和编译型这两种。

   用java来举例,java首先是通过编译器编译成字节码文件,然后在运行时通过解释器解释成机器文件,所以我们说java是一种先编译后解释的语言。

  3、Python到底是什么:

    其实python和java/c#一样,也是一门基于虚拟机的语言,我们先来从表面上简单的解释一下python程序的运行过程。

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

    熟悉java的可以想一下,我们在命令行是如何执行java程序的:

    javac hello.java

    java hello

    只是我们在eclipse之类的IDE时,将两部给融合成一步而已,其实python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述python,python是一门先编译后解释的语言。

  4、简述Python的运行过程。

    在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。

    我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObjet则是python编译器真正编译成的结果,我们先简单知道就可以了,继续向下看:

    当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObjet中,当python程序运行结束时,Python解释器则将PyCodeObjet写回到pyc文件中。

    当python程序的第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则检查该文件的时间,做对比,如果对比后发现是完整的文件则直接载入,如果时间对比有缺失,则重复上面的过程。

    所以我们应该这样来定位PyCodeObjet和pyc文件,我们说pyc文件其实是PyCodeObjet的一种持久化保存方式。

 

三、数据类型初识

1、数字

  2是一个整数。

  长整数:大一些的整数

  3.23和53.3E-1是浮点数。E:表示10的幂。在这里53.3E-1表示53.3*10-4

  (-5+4)和(2.3-4.6j)是复数额例子,其中-5.4为实数,j为虚数,数学中表示复数是什么?

int(整型)

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

  在64位机器上,整数的位数为64位,取值范围为-2**63~2**63-1,即-92233720368547760-92233720368547759

long(长整型)

  跟C语言不通,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

  注意:自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L,也不会导致严重后果。也就是Python3以后没有长整型这个概念,只有整型。

float(浮点型)

  浮点数用来处理实数,浮点数的表示形式是小数,但是小数不只包括浮点数,类似C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

complex(复数)

  复数由实数部分和虚数部分组成,一般形式为x+yj。其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

  注:Python中存在小数池:-5~257

2、布尔值

  真或假

  1或0

3、字符串

  “hello world!”

字符串拼接:

 

四、数据运算

1、算数运算,

+  
-  
*  
/  
% 取模:6%3返回除法的余数, 6%3输出结果为0
** 幂:3**2。就是3的2次幂。 3**2输出结果为3的2次方:9
// 取整数部分:返回商的整数部分。 9//2输入结果4,9.0//2.0输出结果为4.0

2、比较运算:

== 等于:比较对象是否相等 a==b 返回False
!= 不等于:比较两个对象是否不相等。 a!=b返回True
<> 不等于:比较两个对象是否不相等。
a<>b返回True,这个运算类似!=
> 大于:a>b 返回a是否大于b a>b返回False。
< 小于:a<b 返回a是否小于b a<b返回True。
>= 大于等于:a>=b返回a是否大于等于b a>=b返回False
<= 小于等于:a<=b返回a是否小于等于b a<=b返回True

 

赋值运算:

= 简单的赋值运算符 c=a+b,将a+b的结果赋值给a
+= 加法赋值运算符 c+=a 等效于:c=c+a
-= 减法赋值运算符 c-=a 等效于:c=c-a
*= 乘法赋值运算符 c*=a 等效于:c=c*a
/= 除法赋值运算符 c/=a 等效于:c=c/a
%= 取模赋值运算符 c%=a 等效于:c=c%a
**= 幂赋值运算符 c**=a 等效于:c=c**a
//= 取整除赋值运算符 c//=a 等效于:c=c//a

 

逻辑运算:

and 布尔“与”:如果a为False a and b 返回False。  
or 布尔“或":如果a为True,a or b 返回True。  
not 布尔“非":如果a为True,not a ,返回False。  

 

成员运算:

in 如果在指定的序列中找到值返回True,否则返回False。  
not in 如果在指定的序列中没有找到值返回True,否则返回False。  

例:

显示结果:

代码:

a = [1,2,3,4,5,6]
if 1  in a:
    print("1在a中")
if 22 not in a :
    print("22不在a中")

 

身份运算:

is is是判断两个标识符是不是引用自一个对象  
is not is not是判断两个标识符是不是引用自不同对象  

例如:

a是一个列表,b是一个整数型。

a是列表,返回结果为True。b是整数型返回结果为True

a不是整数型,返回结果True。a不是列表返回结果False。

 

 位运算:

& 按位与运算符  
| 按位或运算符  
^ 按位异或运算符 相同为0,不同为1
~ 按位取反预算福  
<< 左移动运算符   15<<2,返回值为60,即15乘以2的2次方。也就是15乘以4,15<<6,返回值960,即15乘以2的6次方。
>> 右移动运算符 15>>2,返回值为3,即15/4,取整数部分。

 

 

 

 

五、入门知识拾遗

1、bytes类型

   Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,,你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)。

  

  字符串string与字节bytes类型的转换。(字符串可被编码为字节,字节可被解码为字符串)

  

通过实际的例子来学习解码和编码的过程:

 

执行结果:

代码:

msg= "学习Python"
#string---->bytes 解码过程encode:字符串转换为二进制,encoding="编码类型"指定解码类型
print("utf-8编码模式解码后结果:",msg.encode(encoding="utf-8"))
print("gbk编码模式解码后结果:",msg.encode(encoding="gbk"))
#bytes---> string 编码过程decode:utf-8解码,使用utf-8编码以及使用utf-8解码,使用gbk编码后的结果:
print("utf-8解码,使用utf-8编码:",msg.encode(encoding="utf-8").decode(encoding="utf-8"))
print("utf-8解码,使用gbk编码:",msg.encode(encoding="utf-8").decode(encoding="gbk"))
print(msg)

 

 

 

 

2、三元运算

   result = 值1 if 条件 else 值2

 如果条件为真:result=值1

 如果条件为假:result=值2

例:首先给abc三个变量赋值。

  如果条件a>b成立则结果等于if前面的。即:a>b成立那么d=a.

  如果条件a>b不成立则结果等于else后面的。即:a>b不成立那么d=c

      由于a=1 b=3,a<b,if条件不成立,所以d=c=5

 

3、进制

  二进制:0 1

  八进制:0 1 2 3 4 5 6 7 

  十进制:0 1 2 3 4 5 6 7 8 9 

  十六进制:0 1 2 3 4 5 6 7 8 9 A B C D E F 

    二进制到十六进制的转换方法:

二进制与十六进制之间的转换与二进制和八进制之间的转换很类似,今天我们来详细看一下:首先,我们来看一下数学关系即24=16,即用四位二进制表示一位八进制。

方法/步骤

  1.  

    首先呢,先要看看十六位数的表示方法,如图1所示。

    二进制数与十六进制数之间如何互相转换
  2.  

    再来掌握二进制数与十六进制数之间的对应关系表,如图2所示。只有牢牢掌握的对应关系,在转换的过程中才会事半功倍。

    二进制数与十六进制数之间如何互相转换
  3.  

    二进制转换成十六进制的方法是,取四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一位,如图3所示。

    二进制数与十六进制数之间如何互相转换
  4.  

    组分好以后,对照二进制与十六进制数的对应表(如图2中所示),将四位二进制按权相加,得到的数就是一位十六进制数,然后按顺序排列,小数点的位置不变哦,最后得到的就是十六进制数哦,如图4所示。

    二进制数与十六进制数之间如何互相转换
  5.  

    注意16进制的表示法,用字母H后缀表示,比如BH就表示16进制数11;也可以用0X前缀表示,比如0X23就是16进制的23.直观表示法如图5所示。

    二进制数与十六进制数之间如何互相转换
  6.  

    这里需要注意的是,在向左(或向右)取四位时,取到最高位(最低位)如果无法凑足四位,就可以在小数点的最左边(或最右边)补0,进行换算,如图6所示。

    二进制数与十六进制数之间如何互相转换
  7.  

    下面看看将16进制转为二进制,反过来啦,方法就是一分四,即一个十六进制数分成四个二进制数,用四位二进制按权相加,最后得到二进制,小数点依旧就可以啦。如图7所示。

    二进制数与十六进制数之间如何互相转换
     

 

 

 

 

 

        

posted on 2017-04-06 23:58  aptech2017  阅读(243)  评论(0)    收藏  举报

导航