Python是一门跨平台、开源、免费的解释性高级动态编程语言,同时也支持伪编译,即将python源程序转换为字节码来优化程序和提高运行速度,通过py2.exe或pyinstaller工具还能将python程序转换为拓展名为exe的可执行程序,以在未安装python解释器和相关依赖包的Windows平台上运行。
解释性语言和诸如C和C++不同的是,程序不需要在运行前进行编译,而是在运行时进行编译,解释器负责在每个语句执行时解释程序代码,由于每执行一行代码都需要翻译一次,所以效率较编译型语言低一些。
另外,python作为动态编程语言,其中的变量并不是在计算机内存中被写入的某个值,而只是指向内存的标签或名称,所以动态编程语言的变量没有一个固定的类型。
python基础知识 利用pip管理拓展库目前,pip已经成为管理python拓展库的主流方式,使用pip不仅可以实时查看本机已经安装的python拓展库列表,还支持python拓展库的安装,升级和卸载等操作。常用的pip命令使用方法如下表所示:
| pip命令 | 说明 |
|---|---|
| pip install Somepackge | 安装SomePackge模块 |
| pip list | 列出当前已安装的所有模块 |
| pip install -upgrade SomePackage | 升级SomePackage模块 |
| pip uninstall SomePackage | 卸载SomePackage模块 |
| pip install SomePackage.whl | 使用whl文件直接安装SomePackage |
对于大部分拓展库,利用pip工具都能直接在线安装,不过有时会因为缺少VC编辑器或依赖文件而失败,此时可从http://www.lfd.uci.edu/~gohlke/pythonlibs/下在扩展库编译好的whl文件,之后利用pip install SomePackage.whl命令进行离线安装即可。
通常直接使用pip install命令由于源不在国内的原因下载速度会很慢,所以可以通过-i命令指定国内的镜像站,下面列出几个常用的镜像站:
清华:Simple Index
中科大:Simple Index
当计算机中安装了多个版本的Python开发环境时,在某个版本下安装的扩展库无法在其他版本中使用,这个小细节通过观察Python的安装文件夹很容易发现,安装多个Python版本时,各个版本拥有自己的安装文件夹,而各自的扩展库安装位置即位于这些文件夹中。
对象模型对象是Python语言中最基本的概念之一,Python中一切都是对象。内置对象例如数字、字符串、列表、元组、字典、集合、del命令以及各个内置函数可供开发者直接调用,一些拓展性对象则需要导入特定模块才能使用,例如math模块中的正弦函数sin()和time模块中的返回当前时间函数time()等。
变量类型常用的Python内置类型有int, float, complex, str, bytes, list, dict, tuple, set, bool, NoneType, Exception等等,这些类型都将在之后的学习中陆续接触。
Python中不需要事先声明变量名及其类型,直接给变量赋值即可创建各种类型的变量。虽然不需要在使用前显式地声明变量及其类型,但Python仍属于强类型编程语言,Python解释器会根据赋值或运算来自动推断变量类型。创建变量之后在显示修改其类型或删除之前,变量将持续保持之前的类型。
另外,前文已经提到过,Python作为一种动态类型语言,即变量仅仅是一个指向某一内存地址的标签。根据变量指向的内存中存放的值的类型不同,变量的类型是可以随时发生变化的。
当有多个变量指向同一内存地址中的数据时,每当修改其中一个变量的值,则该标识符将指向新值所在的内存地址,旧值并不改变(也就是说,Python中的赋值操作仅仅是将被赋值的变量指向了右值指向的对象,而不是直接对被赋值变量指向的对象进行修改)。
x=1 y=x print(id(x),id(y))#3064760854832 3064760854832,两个标识符x和y都指向同一对象1,对象的地址相同; x+=2 print(id(x),id(y))#3064760854864 3064760854832,x自增2后,y仍指向1,而x指向新对象2; #对x的值进行修改时,首先读取x指向的值,并令其与2相加,将新结果存放在新的内存中,最后将x指向新内存空间;
需要注意的是,Python具有自动内存管理功能,会跟踪所有的值,当某个值不被任何变量指向时,将会自动将该值销毁以释放内存。所以,大多数情况下,Python开发者不需要考虑过多内存管理的问题(但是由于自动内存管理的操作可能并不会及时进行,所以某些情况下显示地删除指向是必要的)。
Python采用的是基于值的内存管理方式,如果为不同变量赋值为相同值,则该值在内存中仅保留一份,多个变量指向同一内存地址。当Python启动时,会自动对[-5,256]范围内的整数进行缓存,也就是说若多个变量的值相等且在[-5,256]范围内,则这些变量将使用相同的预先开辟的内存空间。
对于区间[-5,256]外的整数,相同程序或交互模式下相同语句中的同值不同名变量会共用相同的内存空间,而在不同程序或交互模式下的不同语句将不遵守该规则。
a,b=1,1 print(id(a)==id(b))#True a,b=-6,-6 print(id(a)==id(b))#True,由于处于相同程序中,对于整数只要值相同则变量指向的地址相同,无论是否处于[0,256]中;
Python不会对实数进行缓存,其内存管理方式类似于[-5,256]范围之外的整数,相同程序或交互模式下相同语句中的同值不同名变量会共用相同的内存空间,而在不同程序或交互模式下的不同语句将不遵守该规则。
a,b=3.14,3.14 print(id(a)==id(b))#True
数值类型
数字在Python中属于不可变对象,即修改整形变量值的时候并不是真的修改变量的值,而是先把值存放到内存中然后修改变量使其指向新的内存地址。该特性在上述实例中已经有所体现,不仅是整数,浮点数、复数等数字类型以及其他类型的变量也具有相同的特点。
Python的数值类型主要有整数、浮点数和复数,整数类型可分为十进制整数(例如1,-2),十六进制整数(例如0x10,0xfa),八进制整数(例如0o35,0o11)和二进制整数(例如0b100,0b110)。
Python 3.6.x或以上的版本支持在数字的中间位置使用单个下划线作为分隔来提高数字的可读性,所以在程序中写入数字常量时可采用该书写格式,下划线出现的位置遵循的规则与千位分隔符相同,可以位于数字中间的任意位置。
Python中的数字可以表示任意大的数值,不受变量类型的限制,因此可以利用Python进行复杂的数学运算。
x=4+4j y=2+3j print(x+y)#(6+7j) x=74198375984375982734584973285743958 print(x**2)#5505398998718822584864598019121158120147533490850676426335877533505764
字符类型
Python中,字符串属于不可变序列,一般使用单引号、双引号或三引号(分单和双)进行结点,三种方法通常根据需要可以相互嵌套以表示比较复杂的字符串。
三种表示方法中,特别地,一对三单引号或三双引号表示的字符串支持换行,支持排版格式较为复杂的字符串,常用于在程序中表示较长的注释(文档字符串)。
print('HelloWorld!!!',"HelloWorld!!!")#HelloWorld!!! HelloWorld!!!
print('''Hello
World!!!''')
#Hello
#World!!!
Python支持转义字符,常用的转义字符如下表所示:
| 转义字符 | 描述 |
|---|---|
| (在行尾时) | 续行符 |
| \ | 反斜杠符号 |
| ' | 单引号 |
| " | 双引号 |
| a | 响铃 |
| b | 退格(Backspace) |
| e | 转义 |


