随着信息技术的发展,计算机技术应用越来越广泛,目前主流领域如下:
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字和一些标点符号,它具有比其他语言更有特色的语法结构。
Python 是一种 解释型语言:开发过程中没有了编译这个环节,类似于PHP和Perl语言;
Python 是 交互式语言:可以在一个 Python 提示符 >>> 后直接执行代码;
Python 是 面向对象语言:Python支持面向对象的风格或代码封装在对象的编程技术;
Python 是 初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到浏览器再到游戏。
编译型语言:通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。
解释型语言:由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。
想要了解更多,请参考:编译型语言和解释型语言的区别
1、面向对象
Python语言具有很强的面向对象特性,简化了面向对象的实现,它消除了保护类型、抽象类、接口等面向对象的元素,使得面向对象的概念更容易理解。
2、内置的数据结构
Python提供了一些内置的数据结构,这些数据结构实现了类似Java中集合类的功能。内置数据结构的出现简化了程序设计。Python的数据结构包括元组、列表、字典、集合等。 元组相当于“只读”的数组,列表可以作为可变长度的数组使用,字典相当于Java中的HashTable类型。
3、简洁
Python语言的关键字比较少,它没有分号、begin、 end等标记,代码块使用空格或Tab键缩进的方式来分隔。此外,Python代码简洁、短小、易于阅读。 Python简化了循环语句,即使程序结构很复杂也能快速读懂。
4、健壮
Python提供了异常处理机制,能捕获程序的异常情况。 此外Python的堆栈跟踪对象能够指出程序出错的位置和出错的原因。异常机制能够避免不安全退出的情况,同时能够帮助程序员调试程序。
5、跨平台
Python会先被编译为与平台相关的二进制代码,然后再解释执行。这种方式类似于Java,但Python的执行速度提高了。Python编写的应用程序可以运行在Windows、Unix、Linux等不同的操作系统上。 在一种操作系统上编写的Python代码只需做少量修改,就可移植到其他的操作系统上。
6、可扩展
Python是采用C开发的语言,因此可以使用C扩展Python,可以给Python添加新的模块、新的类。同时Python可以嵌入C、C++语言开发项目中,使程序具备脚本语言的特性。因此,Python 又常被称为“胶水”语言。
7、动态性
Python 与JavaScript、PHP、Perl等语言类似,它不需要另外声明变量、直接赋值即可创建一个新的变量。
8、强类型语言
Python的变量创建后会对应一种类型,它可根据赋值表达式的内容决定变量的类型。Python在内部建立了管理这些变量的机制,不同类型的变量需要类型转换。
9、应用广泛
Python语言应用于数据库、网络、图形图像、数学计算、Web开发、操作系统扩展等领域。 有许多第三方库支持Python,例如:PIL(图像处理库)、Tkinter(创建图形用户界面)、Django(交互式网站)、Pygame(2D动画)、SCIPy(科学计算)、Twisted(网络编程)等。
Python的以上特性使得软件的代码大幅度减少,开发任务进一步简化,我们编程的关注点不再是语言特性,而是程序所要实现的任务。
Python 通常应用于编写下述应用程序:
Python的主要运用领域有:
Window 平台安装 Python:打开浏览器访问:https://www.python.org/downloads/windows/ ,点击下载 executable installer,x86 表示是 32 位的安装程序,x86-64 表示 64 位的。详细安装过程,请参考:http://c.biancheng.net/view/4161.html
Unix & Linux 平台安装 Python3:打开浏览器访问:https://www.python.org/downloads/source/,选择适用于 Unix/Linux 的源码压缩包,然后解压缩并安装。详细安装过程,请参考:http://c.biancheng.net/view/4162.html
MAC平台安装Python3:打开浏览器访问:https://www.python.org/downloads/mac-osx/,下载最新版安装即可。
安装完成之后,需要配置环境变量,详细过程可以参考:Python3 环境搭建
此外,还推荐下载其他IDE进行Python编程,IDE 是 Intergreated Development Environment 的缩写,中文称为集成开发环境,用来表示辅助程序员开发的应用软件。换言之,集成开发环境就是一系列开发工具的组合套装。 一般情况下,程序员可选择的 IDE 类别是很多的,比如说,用 Python 语言进行程序开发,既可以选用 Python 自带的 IDLE,也可以选择使用 PyCharm 和 Notepad++ 作为 IDE。
下面推荐几篇内容不错的关于Python学习路线和不同方向的进阶教程,有时间可以对照一下,看看自己还有多长的路要走。
标识符主要作用就是作为变量、函数、类、模块以及其他对象的名称,Python 中标识符的命名不是随意的,而是要遵守一定的命令规则, 如下:
在Python中,以下划线开头的标识符有特殊含义,如下
- 以单下划线开头的标识符(如 _width),表示不能直接访问的类属性,其无法通过 from…import* 的方式导入;
- 以双下划线开头的标识符(如__add)表示类的私有成员;
- 以双下划线作为开头和结尾的标识符(如 init),是专用标识符。
综上,除非特定场景需要,应避免使用以下划线开头的标识符。
在 Python 3 中,可以用中文作为变量名,非 ASCII 标识符也是允许的了,但我们应尽量避免使用汉字作为标识符,容易遇到奇葩的错误。
不同场景中的标识符,其名称也有一定的规范可循,具体如下:
- 当标识符用作模块名时,应尽量短小,并且全部使用小写字母,可以使用下划线分割多个字母,例如 game_mian、game_register 等。
- 当标识符用作包的名称时,应尽量短小,也全部使用小写字母,不推荐使用下划线,例如 com.mr、com.mr.book 等。
- 当标识符用作类名时,应采用单词首字母大写的形式。例如,定义一个图书类,可以命名为 Book。
- 模块内部的类名,可以采用 “下划线+首字母大写” 的形式,如 _Book;
- 函数名、类中的属性名和方法名,应全部使用小写字母,多个单词之间可以用下划线分割;
- 常量命名应全部使用大写字母,单词之间可以用下划线分割;
关键字即保留字,我们不能把它们用作任何标识符名称。Python 的标准库提供了一个 keyword 模块,可以输出当前版本的所有关键字:
>>> import keyword
>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del',
'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is',
'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
默认情况下,Python3源码文件以“可变长编码”的UTF-8编码,所有字符串都是unicode字符串。 UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。了解更多,可以参考:ASCII、GB2312、Unicode、UTF-8编码
在Linux下为源码文件指定编码方式:
#!/usr/bin/python
# -*- coding: utf-8 -*-
1、注释
注释(Comments)用来向用户提示或解释某些代码的作用和功能,它可以出现在代码中的任何位置。Python 解释器在执行代码时会忽略注释,不做任何处理,就好像它不存在一样。Python中单行注释以 #
开头,多行注释可以用多个#
,也可以使用''''
或 """
,示例如下:
#!/usr/bin/python3
# 第一个注释
print("Hello World!") # 第二个注释
'''
第三个注释
第四个注释
'''
"""
第五注释
第六注释
"""
注意: Python 多行注释不支持嵌套。
2、行与缩进
Python最具特色的就是使用缩进来表示代码块,不需要使用大括号{ }
。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数,通常情况下是采用 4 个空格长度作为一个缩进量(默认情况下,一个 Tab 键就表示 4 个空格)。 示例如下:
if True:
print("True")
else:
print("False")
像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行之后的一行或多行代码构成代码组。将首行及后面的代码组称为一个子句(clause)。
3、多行语句
Python通常是一行写完一条语句,但如果语句很长,我们可以使用右反斜杠(\) 来实现多行语句,如下:
total = item_one + \
item_two + \
item_three
在[],{},或()中的多行语句,不需要使用反斜杠(\),例如:
total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']
Python可以在同一行中使用多条语句,语句之间使用分号(;)分割,如下:
import math; print(math.pow(2, 4))
4、空行
函数之间或类的方法之间用空行分隔,表示一段新的代码的开始。类和函数入口之间也用一行空行分隔,以突出函数入口的开始。
空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
Python 采用 PEP 8 作为编码规范,其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。下面列出PEP 8 中初学者应严格遵守的一些编码规则:
- 每个 import 语句只导入一个模块,尽量避免一次导入多个模块。
- 不要在行尾添加分号,也不要用分号将两条命令放在同一行。
- 建议每行不超过 80 个字符,如果超过,建议使用小括号将多行内容隐式的连接起来,而不推荐使用反斜杠 \ 进行连接。
- 使用必要的空行可以增加代码的可读性,通常在顶级定义(如函数或类的定义)之间空两行,而方法定义之间空一行,另外在用于分隔某些功能的位置也可以空一行。
- 通常情况下,在运算符两侧、函数参数之间以及逗号两侧,都建议使用空格进行分隔。
模块就是Python程序,在Python中导入模块后,我们就可以使用该模块里定义的类、方法或者变量,这样既可以提高代码的可重用性,又可以避免变量冲突,我们通常用 import
或者 from...import
来导入相应的模块。 像def
一样,import
和 from
是可执行的语句,他们可以出现在 if
中,可以出现在函数中,执行到这些语句的时候才会进行解析,换句话说,被导入的模块和变量名只有在对应的 import
或 from
语句执行后才可以使用。
模块,可以理解为是对代码更高级的封装,即把能够实现某一特定功能的代码编写在同一个 .py 文件中,并将其作为一个独立的模块,这样既可以方便其它程序或脚本导入并使用,同时还能有效避免函数名和变量名发生冲突。
1、import语句
既可以一行导入单个模块,也可以一行内导入多个模块,这里以常用的 math
和 random
模块为例,具体如下:
import math # 导入math整个模块
print(math.pi) # 使用math模块名作为前缀来访问模块中的成员
一次导入多个模块,多个模块之间用逗号隔开。
import math,random # 导入math、random两个模块
print(math.pi) # 输出π的近似值,十五位小数
print(random.random()) # 生成一个[0, 1.0)的随机小数
Python 不建议一行 import 所有模块,而是推荐用多行 import 来导入模块。更多的是出于操作便利性的原因,与代码本身无关,这样更易于阅读;更易于编辑;更易于维护。
import工作方式:Python会在两个地方寻找这个模块,第一个地方是在sys.path(可以运行代码import sys print(sys.path)查看),一般安装的Python库的目录都可以在sys.path中找到(要将Python的安装目录添加到电脑的环境变量),对于安装好的库,我们直接import即可。第二个地方就是运行文件所在的目录。如果在一个模块的顶层导入,那么它的作用域就是全局的;如果在函数中导入,那么它的作用域是局部的。 如果模块是被第一次导入,它将被加载并执行。
2、import-as
导入整个模块时,也可以为模块指定别名。
import math as m # 导入math整个模块,并制定别名为m
print(m.pi) # 使用m模块别名作为前缀来访问模块中的成员
在导入多个模块时,也可以为模块指定别名
import math as m, random as ran # 导入math、random两个模块,并为math指定别名m,为random指定别名ran
print(m.pi)
print(ran.random())
3、from-import
下面使用 from...import
导入指定成员,即把指定成员导入到当前作用域,
from math import pi # 导入math模块的pi成员
print(pi) # 使用导入成员的语法,直接使用成员名访问
导入模块成员时,也可以为成员指定别名。
from math import pi as P # 导入math模块的pi成员,并指定别名P
print(P) # 使用导入成员(并指定别名)的语法,直接使用成员的别名访问
form...import
导入模块成员时,支持一次导入多个成员,如下:
from math import pi, sqrt # 导入math模块的pi,sqrt成员
print(pi) # 使用导入成员的语法,直接使用成员名访问
print(sqrt(4))
一次导入多个模块成员时,也可指定别名,同样使用 as 关键字为成员指定别名,
from math import pi as P, sqrt as sq # 导入math模块的pi,sqrt成员,并为其指定别名P,sq
print(P) # 使用导入成员(并指定别名)的语法,直接使用成员的别名访问
paint(sq(4)
在使用 from...import
语法时,可以一次导入指定模块内的所有成员(存在不同模块,相同成员名的情况,从而发生冲突,此方式不推荐),如下:
from sys import * # 导入math棋块内的所有成员
print(pi) # 使用导入成员的语法,直接使用成员名访问
print(sqrt(4))
只在两种场合下建议使用这样的方法,一个场合是:目标模块中的属性非常多,反复键入模块名很不方便,例如 Tkinter (Python/Tk) 和 NumPy (Numeric Python) 模块,可能还有 socket 模块。另一个场合是在交互解释器下,这样可以减少输入次数。
input()
是 Python 的内置函数,用于从控制台读取用户输入的内容。input()
函数总是以字符串的形式来处理用户输入的内容,所以用户输入的内容可以包含任何字符。
s = input("请输入:") # 数据以字符串的形式返回
number1 = eval(input("请输入数字:") # eval()去掉" ",将字符串转化为有效的表达式,来求值,并返回计算结果,和str()功能刚好相反
number2 = val(input("请输入:"))
'''val() 函数当识别到非数字,停止读入字符串,字符串中的空格和换行符会被去掉。即如果字符串内有字母或其他非数字字符,
val()函数只转换第一个非数字字符之前的数字。当字符串的首字符为非数字时,返回值为0。该函数也可以识别进制符号'''
print()
默认输出是换行的,如果要实现不换行,需要在变量末尾加上 end=" "
,输出多个变量时,print() 函数默认以空格隔开多个变量,想要使用不同的分隔符,可以使用缺省参数seq=':'
,可以通过help("print")
了解更多。
print("****************")
print('{}网站:"{}"'.format('百度', 'www.baidu.com')
# str.format()实现字符串格式化,大括号及其里面的字符 (称作格式化字段) 将会被 format() 中的参数替换
print('{0} 和 {1}'.format('GitHub', 'CSDN')) # 括号中的数字用于指向传入对象在format()中的位置
print("你是:%s, %d岁" % ("CSDN", 22) # % 操作符也可以实现字符串格式化
# 推荐使用str.format(),{}里可以添加可选项:和格式标识符,这样可以对值进行更好的格式化
%或者{}都可以看做转换说明符,转换说明符(Conversion Specifier)只是一个占位符,它会被后面表达式(变量、常量、数字、字符串、加减乘除等各种形式)的值代替。
1、%使用
转换说明符 | 解释 |
---|---|
%d、%i | 转换为带符号的十进制整数 |
%o | 转换为带符号的八进制整数 |
%x、%X | 转换为带符号的十六进制整数 |
%e、%E | 转化为科学计数法表示的浮点数(输出e的大小写不一样) |
%f、%F | 转化为十进制浮点数 |
%g、%G | 智能选择使用 %f 或 %e 格式 |
%c | 格式化字符及其 ASCII 码 |
%r | 使用 repr() 函数将表达式转换为字符串 |
%s | 使用 str() 函数将表达式转换为字符串 |
(1)整数的输出
>>> print('%o' % 24) # 转换为八进制输出
30
>>> print('%d' % 24)
24
(2)浮点数的输出
>>> print('%.2f' % 6.6666) # 取3位小数
6.666
>>> print('%.3e' % 1.11) # 取3位小数,用科学计数法
1.110e+00
(3)字符串输出
print('%10s' % 'hello') # 右对齐,取10位,不够则补位
print('%-10.2s' % 'hello') # 左对齐,取10位,并截取两位字符串,并用空格补位
2、format使用
(1)位置匹配
>>> print('{0} {1} {0}'.format('hello', 'world')) # 带数字编号,并打乱顺序
hello world hello
>>> print('{key1} {key2} {key1}'.format(key1='world', key2='hello')) # 带关键字
world hello world
(2)格式转换
>>> print('{:b}'.format(2)) # 转换为二进制输出
10
>>> print('{:%}'.format(0.2)) # 将数值乘以100,然后以小数点保留六位格式打印,值后面会有一个百分号
20.000000%
(3)进阶用法
from math import pi
print('{0:8.4f}'.format(pi)) # 位置为0,最小宽度为8,小数点后4位;:m.nf表示宽度为m,小数位为n,m和n都可以不指定
print('{:10s}'.format('Hello')) # 输出字符串的宽度至少为10
print('{:^10s} and {:>10s}'.format('Github', 'CSDN')) # 取10位居中,取10位右对齐
print('{:*^10}'.format('CSDN')) # 使用*填充
Python格式化输出,了解更多,请参考:%用法和format用法
Python 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要导入某个模块。
内置函数与标准库函数的对比:内置函数是解释器的一部分,它随着解释器的启动而生效;标准库函数是解释器的外部扩展,导入模块以后才能生效。一般来说,内置函数的执行效率要高于标准库函数。
上一小节的 print()
函数就是内置函数,Python 解释器还提供了更多内置函数,以下按字母表顺序列出:
abs() |
delattr() |
hash() |
memoryview() |
set() |
all() |
dict() |
help() |
min() |
setattr() |
any() |
dir() |
hex() |
next() |
slice() |
ascii() |
divmod() |
id() |
object() |
sorted() |
bin() |
enumerate() |
input() |
oct() |
staticmethod() |
bool() |
eval() |
int() |
open() |
str() |
breakpoint() |
exec() |
isinstance() |
ord() |
sum() |
bytearray() |
filter() |
issubclass() |
pow() |
super() |
bytes() |
float() |
iter() |
print() |
tuple() |
callable() |
format() |
len() |
property() |
type() |
chr() |
frozenset() |
list() |
range() |
vars() |
classmethod() |
getattr() |
locals() |
repr() |
zip() |
compile() |
globals() |
map() |
reversed() |
__import__() |
complex() |
hasattr() |
max() |
round() |
各个内置函数的具体功能和用法,可以查看:https://docs.python.org/zh-cn/3/library/functions.html