• python基础之pip、.pyc、三元运算、进制、一切皆对象、可变与不可变类型


    一、pip(下载工具==yum)

    1、重点(必须掌握的)

    列出已安装的包 
    pip list 
    安装要安装的包
    pip install xxx
    安装特定版本
    pip install django==1.1.5	 
    导出python的环境
    pip freeze > requestment.txt
    从导出的python环境中安装所需要的包
    pip install -r requestment.txt
    卸载导出的python环境中的包
    pip uninstall -r requestment.txt

    2、了解内容

    升级包 
    pip install -U <包名> 
    显示包所在的目录
    pip show -f <包名> 
    搜索包
    pip search <搜索关键字> 
    查询可升级的包 
    pip list -o 
    下载包而不安装 
    pip install <包名> -d <目录> 或 pip install -d <目录> -r requirements.txt 
    更换国内pypi镜像 
    阿里:https://mirrors.aliyun.com/pypi/simple 
    豆瓣:http://pypi.douban.com/simple 
    中国科学技术大学:http://pypi.mirrors.ustc.edu.cn/simple/ 
    pip install <包名> -i http://pypi.v2ex.com/simple 
    指定全局安装源 
    在unix和macos,配置文件为:$HOME/.pip/pip.conf 
    在windows上,配置文件为:%HOME%pippip.ini
    (1):在windows文件管理器中,输入 %APPDATA%
    (2):会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文件夹里面去新建个pip.ini文件
    (3):在新建的pip.ini文件中输入以下内容,搞定文件路径:"C:UsersAdministratorAppDataRoamingpippip.ini"
    	[global] 
    	timeout = 6000 
    	index-url = http://pypi.douban.com/simple 

    pycharm常用快捷键

    ctrl + ?:快速注释,快速解注释
    tab:缩进4个空格
    shift+tab:回退4个空格
    ctrl + w:选中字符段
    ctrl + d:复制

    二、.pyc是个什么鬼?

    1. Python是一门解释型语言?

      Python是一门解释性语言,但是却存在*.pyc文件。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!

    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自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了。

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

      当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。

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

    三、三元运算

    result = 值1 if 条件 else 值2

    如果条件为真:result = 值1

    如果条件为假:result = 值2

    四、进制

    • 二进制,01
    • 八进制,01234567
    • 十进制,0123456789
    • 十六进制,0123456789ABCDEF  二进制到16进制转换
    计算机内存地址及为什么用16进制?
    为什么用16进制
    1、计算机硬件是0101二进制的,16进制刚好是2的倍数,更容易表达一个命令或者数据。十六进制更简短,因为换算的时候一位16进制数可以顶4位2进制数,也就是一个字节(8位进制可以用两个16进制表示)
    2、最早规定ASCII字符集采用的就是8bit(后期扩展了,但是基础单位还是8bit),8bit用2个16进制直接就能表达出来,不管阅读还是存储都比其他进制要方便
    3、计算机中CPU运算也是遵照ASCII字符集,以16、32、64的这样的方式在发展,因此数据交换的时候16进制也显得更好
    4、为了统一规范,CPU、内存、硬盘我们看到都是采用的16进制计算
    
    16进制用在哪里
    1、网络编程,数据交换的时候需要对字节进行解析都是一个byte一个byte的处理,1个byte可以用0xFF两个16进制来表达。通过网络抓包,可以看到数据是通过16进制传输的。
    2、数据存储,存储到硬件中是0101的方式,存储到系统中的表达方式都是byte方式
    3、一些常用值的定义,比如:我们经常用到的html中color表达,就是用的16进制方式,4个16进制位可以表达好几百万的颜色信息。

    五、一切皆对象

    对于Python,一切事物都是对象,对象基于类创建

    所以,以下这些值都是对象: "wupeiqi"、38、['北京', '上海', '深圳'],并且是根据不同的类生成的对象。

     六、可变数据类型与不可变数据类型

    1、定义:

    (1)不可变数据类型:但该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,对于这种数据类型,就称为不可变数据类型;

    (2)可变数据类型:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址不发生改变,对于这种数据类型,就称为可变数据类型。

    (3)总结:

    可变:值变,id不变(内存中的数据可以被改变)

    不可变:值变,id就变(内存中的数据不可以被改变)

    2、各个数据类型是否是可变数据类型的总结

    数据类型 可变/不可变
    整型 不可变
    字符串 不可变
    元组 不可变
    列表 可变
    集合 可变
    字典 可变

     

    3、赋值后id不改变

    x = True    #布尔类型
    y = x
    print(id(x))
    print(id(y))
    ------------------------------------------
    140710466976080
    140710466976080
    In [4]: x = 123    #整型
    In [5]: id(x)
    Out[5]: 140710467498448
    In [6]: y = x
    In [7]: id(y)
    Out[7]: 140710467498448
    In [8]: x = (1,2,3)    #元组
    In [9]: id(x)
    Out[9]: 563732066520
    In [10]: y = x
    In [11]: id(y)
    Out[11]: 563732066520
    In [12]: x = {'a':1,'b':2}    #字典
    In [13]: id(x)
    Out[13]: 563731953272
    In [14]: y = x
    In [15]: id(y)
    Out[15]: 563731953272
    In [16]: x = [1,2,3]    #列表
    In [17]: id(x)
    Out[17]: 563729896904
    In [18]: y = x
    In [19]: id(y)
    Out[19]: 563729896904
    In [20]: x = {1,2,3}    #集合
    In [21]: id(x)
    Out[21]: 563731316296
    In [22]: y = x
    In [23]: id (y)
    Out[23]: 563731316296
  • 相关阅读:
    UI自动化之鼠标、键盘事件
    iframe框中元素定位
    接口 Interface
    序列化和反序列化
    密封类和部分类
    简单工场设计模式
    ADO.NET数据库操作
    集合
    里氏转换
    装箱和拆箱
  • 原文地址:https://www.cnblogs.com/renyz/p/11525805.html
Copyright © 2020-2023  润新知