# Python简介

Python由荷兰人Guido van Rossum于1989年出于某种娱乐目的开发的,它基于ABC语言,ABC是专门为非程序员设计的,但它并不成功,Guido认为是它的非开放性造成的,Guido避免了ABC不够开放的劣势,加强了Python和其他语言比如C,C++,Java的结合性。2008年12月,Python发布3.0版本,它并不完全兼容2.0版本,这样导致很长时间,2.0用户不愿意升级到3.0版本,这种割裂一度影响了Python的应用。

由于大数据,AI的流行,Python变得比以往更加流行,由于它的简洁性,易读性以及可扩展性,用Python做科学计算的研究机构日益增多,众多开源的科学计算软件包都提供了Python的调用接口,比如计算机视觉库OpenCV,三维可视化库VTK,医学图像处理库ITK。Python的专用科学计算库就更多了,比如NumPy,SciPy和matplotlib,它们分别为Python提供了快速数组处理,数值运算以及绘图功能,Python语言及其众多的扩展库所构成的开发环境十分适合工程技术,科研人员处理实验数据,制作图标,甚至开发科学计算应用。

# Python优点

Python是一种面向对象,解释型,弱类型的脚本语言,它是一种强大的通用型语言。它比其他语言更容易上手,具有清晰的语法和可扩展性,它的扩展性体现在它的模块,Python具有脚本语言中最丰富和强大的类库,覆盖了文件I/O,GUI,网络编程,数据库访问,文件操作等大部分应用场景。作为一门解释型语言,它天生具有跨平台的特征。

# Python缺点

Python程序比Java,C,C++等程序运行效率都要慢,且源代码加密困难,因为它不像编译型语言的源程序会被编译成目标程序。

# Python运行机制

计算机程序其实就是一组计算机指令集,能真正驱动机器运行的是机器指令,但是机器指令对人不友好,开发者直接编写机器指令是不现实的,因此就出现了计算机高级语言,高级语言使用自然语言,但是高级语言最终必须被翻译成机器指令来执行。高级语言按程序的执行方式可以分为编译型和解释型两种。Python是一门解释型语言,它具有解释型语言的运行机制。

编译型语言是指使用专门的编译器,针对特定操作系统,将高级语言一次性翻译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行程序的格式,这个转换过程称为编译(Compile),编译生成的可执行程序可以脱离开发环境,在特定平台上独立运行。有些程序编译结束,还需要对其他编译好的目标代码进行链接,即组装两个以上的目标代码模块生成最终的可执行程序,通过这种方式实现低层次的代码复用,因为编译型语言是一次性编译成机器码的,所以可以脱离开发环境独立运行,而且通常效率较高,但是这样编译生成的可执行程序无法移植到其他平台上运行,如果需要移植,则必须将源代码按目标平台编译。

解释型语言是指使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行的语言,解释型语言通常不会进行整体性的编译和链接处理,只有在运行到代码的某一行才会解释并执行那一行,这样的程序运行效率较低,而且不能脱离解释器独立执行,但是它的好处是跨平台比价容易,只需提供特定平台的解释器,所写的代码就可以在该平台运行,就像Java的标语:Write Once,Run Everywhere.

# Python初体验

# 这是第一行Python代码
print("hello world!")

'''
使用一个变量
'''
Num1=100
print(Num1);

"""
这也是多行注释
"""
1
2
3
4
5
6
7
8
9
10
11
12

上面这段代码涉及了Python的变量,注释,以及print函数。

# 编译pyc文件

pyc文件就是Python的字节码(byte-compiled)文件。py文件运行时,python会自动将其编译成PyCodeObject并写入pyc文件,再有python虚拟机来执行PyCodeObject。那么如何编译pyc文件呢?

# 使用源码编译

import py_compile
py_compile.compile('./demo.py')

import compileall
# 编译一个文件夹
compileall.compile_dir('./test')
# 单独编译一个文件
compileall.compile_file('./demo.py')
1
2
3
4
5
6
7
8

# 使用命令行编译

python -m py_compile .\test.py
python -m compileall python
1
2

# 变量

学习任何一门计算机相信都是从变量开始的,变量可以看成存放数据的容器,以便为后面的程序使用,Python是一门弱类型语言,这意味着:

  1. 所有变量无需声明便可使用,熟悉C++,Java的同学可以理解成,对从未声明过的变量赋值就是声明了该变量。
  2. 变量的数据类型可以随时改变,可能一会是数值型一会是字符串型。

相对于变量是常量,变量中的值是可以改变的,而常量中的值是不能改变的。看下面示例:

a=100
print(type(a))
a="hello"
print(type(a))
1
2
3
4

# 变量的命名

Python需要使用标识符给变量命名,注意Python2.x默认使用ASCII码,Python3默认使用UTF-8编码,因此Python3能使用UTF-8所能表示的多种语言的字符,Python是区分大小写的。 除此之外,标识符的命名规则遵循如下规则:

  1. 标识符可以由字母,数字,下划线(_)组成,数字不能打头。
  2. 标识符不能是Python关键字,但可以包含关键字。
  3. 标识符不能包含空格。

要查看内置函数和关键字,可以用:

import keyword

#查看关键词
print(keyword.kwlist)

#查看内置函数和内置属性
print(dir(__builtins__))

#查看某个关键词用法
help(abs)
1
2
3
4
5
6
7
8
9
10

# 注释

Python中的注释有两种:

  1. 单行注释:行首以#开头,这行都是注释语句。
  2. 多行注释:使用三个单引号或三个多引号将注释的内容括起来。

# 帮助函数

在Python中要想查看某个函数相关的帮助,有两种方法:

  1. dir():列出指定类或模块的全部内容。
  2. help():查看某个函数或方法的帮助文档。

# Print函数

该函数的语法格式如下:

print(value,...,sep=' ',end='\n',file=sys.stdout,flush=False)

'''
print可以输出多个变量
sep参数指定变量之间的间隔符,默认是空格。
end参数控制输出完后输出什么字符,默认会换行。
file参数指定向哪里输出,默认是向标准输出输出内容,如果希望是向文件输出内容,将该参数设置为文件操作符即可。
flush参数用于控制输出缓存,一般设置为False,这样有比较好的性能。
'''
a="world"
print("hello",a,"friend",sep="   ",end=" ")
print("hello",a,"friend",sep="   ",end=" ")
1
2
3
4
5
6
7
8
9
10
11
12

# 字符串格式化

Python提供了对各种类型数据进行格式化输出的功能:


# 将变量使用str()函数转换为字符串
print("the person name is : %s,his age is : %s" % ("LiMing",22))
# 将变量使用repr()转换为字符串
print("the person's name is : %r,his age is : %r" % ("LiMing",22))
num=-88
# 转换为十进制的整数
print("num is : %8d" % num)
print("num is : %8i" % num)
# 转换为八进制
print("num is : %8o" % num)
# 转换为十六进制
print("num is : %8x" % num)
print("num is : %8X" % num)
# 转换为科学计数法表示的浮点数
print("num is : %8e" % num)
print("num is : %8E" % num)
# 转换为十进制的浮点数
print("num is : %8f" % num)
print("num is : %8F" % num)
# 显示ASCII码对应的字符
print("char is : %c" % 65)
print("char is : %c" % "B")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

此外还有各种通用控制字符:

  • -:指定左对齐
  • +:表示数值总要带着符号
  • 0:用0来代替空格
# 左对齐
print("number is : %-6d" % 99)
# 带符号
print("number is : %+6d" % 99)
# 用0代替空格
print("number is : %+06d" % 99)
1
2
3
4
5
6

对于浮点数或字符串可以指定保留小数点后几位:

floatNum=3.1415926
print("pi is : %8.3f" % floatNum)
stringVar="hello"
print("pi is : %8.3s" % stringVar)
print("pi is : %.3s" % stringVar)
1
2
3
4
5

# 使用字典格式化字符串

template="人名:%(name)s 年龄:%(age)10.2f"
info={"name":"wang","age":20}
print(template % info)
1
2
3