在机器学习和人工智能为主导的工业4.0时代,Python犹如一股龙卷风袭卷着一切。Python作为一门解释性的面向对象的语言虽然在运算速度上有不足,但是相比于程序运算速度,程序项目开发速度更为重要,而且在在这个装备氪金时代,运算速度的缺憾完全可以拿硬件来补,何况Python还支持并行多线程开发。Python之所以在项目开发速度方面独树一帜,在于它的开源思想和活跃的社区,在网络爬虫、科学计算、机器学习和生物信息等诸多领域都有大量成熟、稳健的模块,这些造好的‘轮子’省去了大量的开发时间,让我们在接到项目时可以在极短的时间内完成架构,快速解决问题。
Python2或Python3?
其实,这不是问题,无论Python2还是Python3对于初学者来说差别不大,但是须知Python3在性能上做了优化,更加规范化了某些用法,支持Python3的模块日益增多,Python3可谓势在必行,所以这里还是强烈推荐大家按照Python3的语法来学习。
运行方式
不仅是Python,大多数语言的执行方式一般包括两种,交互式执行和接受脚本执行。
所谓交互式,即进入Python终端,所键即所得,这种好处对于初学者来说甚好,便于直观理解各个函数的语法、功能。尤其推荐大家使用iPython,可以带来更好的交互式体验。另外一种是通过执行写好的脚本,这种是真正的生产环境下的执行方式,但是在执行之前需要大量测试,避免各种报错和隐藏的bug,这里推荐大家使用Python专门的开发编辑器Pycharm。
基础语法
print('Hello Word!')
a = 1 + 1 #这是单行注释,=是赋值操作,表示将右边的运算式结果赋值给变量a;符号两边加上空格以增加可阅读性
'''
多行注释
3个单/双引号开头和结尾
'''
a = 2
a * 2
a ** 2
# 多重赋值
a, b, c = 1, 2, 'a'
'''
上述命令相当于:
a = 1
b = 2
c = 'a'
'''
# 字符串操作
s = 'I like python'
s + 'very much!' #将s与字符串拼接,中间以单个空格连接
$ I like python very much
s.split(' ') #将s以单个空格符切割,得到列表
$ ['I', 'like', 'python']
# 判断语句
if 条件1:
执行体1
elif 条件2:
执行体2
else:
最后的执行体
'''
Python一般不用花括号{},也没有end语句,他是用缩进对齐作为语句的层次标记。同一层次的缩进量要严格的一一对应,否则报错。如下语句是错误的。
'''
if a == 1:
print(a) #缩进2个空格
else:
print('不等于1') #缩进3个空格
'''
个人理解,这种语法规范简洁而典雅,非常符合Python的思想。其他的语言往往通过关键字来标注语法结构,但是随着嵌套的层次增加,关键字也难以直观的显示语法结构,这个时候也须借助于缩进,所以Python干脆去掉这些语句内部的标志性词,用更为严格的缩进来表示,实在是简洁而又典
'''
# 循环语句
s, k = 0
while k < 101: #判断k是否满足小于101,不满足则跳出循环
k = k + 1 #从k=0开始每循环1次加1
s = s + k #s累加k的和即1+2+3...
print(s)
$ 5050
s = 0
for k in range(101): #in判断某个元素是否在一个集合内;range生成一个序列,一般为range(a,b,c),表示生成一个首相为a,公差为c且不超过b-1的等差数列。
s = s + k
print(s)
$ 5050
# 函数
# Python用def来自定义函数
def add2num(x, y): #定义函数,同时定义2个参数
return(x + y) #return返回函数值
print(add2num(1, 2)) #调用函数
$ 3
# 与一般函数不同的是Python函数返回值可以是各种形式,例如列表(list)甚至返回多个值。
def add2num(x=0, y=0):
return([x+1, y+1]) #返回值是一个列表
def add3(x, y):
return(x+3, y+3) #双重返回
a, b = add3(1, 2)
# lambda:匿名函数
# 对于定义add2num这样简单的函数,通过def需要正式命名、计算和返值显得过于麻烦,此时lambda函数横空而出
f = lambda x, y : x + y #定义函数f(x,y)=x+y
f(1,1) #调用函数
$ 2
数据结构
Python有4个内建的数据结构(即存储数据的容器),容器里不要求元素类型一致:
列表(lsit):如l = [1, 2, 3],可索引可变
元组(tuple):如t = (1, 2, 3),可索引不可变
字典(dictionary):如d[‘sex’] = ‘male’,以有意义的键名(key)为索引,无序
集合:如s = {1, 2},唯一、无序,不可索引
list/tuple
列表可以修改,元组相对固定,不能修改。例如上述列表l[0] = ‘a’,即将列表l第一个元素1修改为’a’,这里注意两点:
(1)Python索引是从0开始,即第一个元素索引(index)是0
(2)列表是原地修改
如想复制列表需要通过copy = l[:],而通过copy = l只是重新贴了一个标签,修改copy仍然会让原始l改变,即所谓的假拷贝。
list/tuple函数可将对象变成列表/元素类型,例如tuple([1, 2])是(1,2)
列表/元组相关函数
函数 | 功能 |
---|---|
len(a) | 列表/元组元素个数 |
max(a) | 返回列表/元组最大值 |
min(a) | 返回最小值 |
sum(a) | 求和 |
sorted(a) | 升序排序 |
cmp(a,b) | 比较2个列表/元组的元素 |
此外,作为对象,列表本身有很多方法,元组不允许修改因此方法很少
函数 | 功能 |
---|---|
a.append(1) | 将1添加到列表a末尾 |
a.count(1) | 列表a中元素1出现的次数 |
a.extend([1,2]) | 将列表[1,2]内容追加到列表a末尾 |
a.index(1) | 从列表a中找出第一个1的索引位置 |
a.insert(2,1) | 将1插入列表a索引为2的位置 |
a.pop(1) | 移除列表a索引为1的元素 |
列表解析:
对于列表a = [1, 2, 3]
每个元素加1可这样写:
[i +1 for i in a ]
返回[2, 3, 4]
dictionary
像list/tuple都是以元素位置为索引的,如果存贮的数据过大,通过这种方式迭代查询的效率势必十分低下,因此有了字典。字典的好处在于通过Dic[key] = value的形式将键值对联系起来,通过相应的key就能找到对应的值,类似于查字典一样,将十分高效。
创建字典的方法:
(1)dic[‘key’]=‘v’ #需先声明dic是字典:dic=dict()
(2)d={‘key’:‘v’, ‘age’:1} #冒号联系键值对,逗号隔开每个元素
(3)dict.fromkeys([‘key’,‘age’],20) #相当于{‘key’:20, ‘age’:20}
取值方法:
dic[‘key’]
$ ‘v’
set
Python中的集合与数学上的集合概念基本一致,元素唯一、无序,不支持索引。
set([1, 2, 3]) #将列表转化成集合
集合可以进行一些运算:
t | s #集合t和s的并集
t & s #t和s的交集
t - s #求差集,项在t中不在s中
t ^ s #对称差集(项在t或s中,但不会同时出现在二者中)
库的导入和添加
Python之所以强大就是因为有很多库,例如数学相关库math库,通过import关键字导入
import math
math.pi #内置圆周率常数
math.exp(1) #计算指数
math.sin(1) #计算正弦
# 导入时给库起一个别名
import math as m
m.pi
# 指定库中函数导入(节省内存资源,也避免命名冲突)
from math import exp as e #只导入math库中的exp函数,取名e
e(1)
# 通过help('modules')查看库的帮助