原创: 大土豆力 [生信菜鸟团] 希望大家多多的支持 原文
hi,这里是手把手带你学Python3系列阶段性小结。
大概两个多月前,我开设了这个「老坑」,内容非常基础,如果一路过来,已能初步满足我的一些日常处理。
今天的推送对标技能树「生信分析人员如何系统入门python(2019更新版)」虽然不一定周全,但会尽可能地进行完善。
看完此篇,也算是敲进了大门。
写在前面
Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.
python是一种语法简单易学且强调可读性,一种面向对象、解释型高级编程语言,使用频率和场景日益增长。
在这个系列的第一期开坑时候我写到:
大多数告诉你 python 值得学习都是基于就业和收入,这样的确容易打动一些人去加入学习。但是我觉得,学习一种编程语言真的要义在于,如何使用 [思维] 或者 [逻辑] 使用代码实现一个有意义的事情,可能是减轻繁杂的重复工作,可能是利用编程解决一个实际问题。我觉得编程是一门艺术,所以,你不想进来看看么?
可能我现在正在经历阶段是,能够实现小需求,测试完成的时候也是有些许成就感的,但是过程不太容易。慢慢来,比较快。
这里就给出的了我两个多月来的学习阶段性小结,大概分为以下几步:
理解常量与变量;
掌握基本数据类型及操作;
尝试三大结构;
使用函数;
小实战;
第一步:工欲善其事必先利其器
既然要学习 Python 语言,配套的软件工具必须要摸索到位,除了我在此次推送的 PyCharm外,也有@鲍师傅的 jupyter,新手还是推荐前者。偶尔用用终端界面的 python 也可以,但是别直接用IDLE啦,容易消磨热情。
关于版本,从2.X到3.7.4各色版本都能下载到,但是这里并不推荐 python2 了,因为已有消息称2020年1月1日将不再维护 python2 版本,且在前期的野蛮发展中,一些「规范的格式」也没有完全普及。
当然,如果你使用的是 PyCharm
,将会直接送你三个开场buff:
简单易学
错误提示
规范提示
安装方法可以详见早期的推文,这里要再啰嗦一句的是,如果使用 PyCharm 一定要开启 PEP 8规范,通过安装autopep8
模块就可以智能修改,从一开始就能够写出「精致」的代码,就好比练字时临摹了大家的字帖一般。
第二步:变量与常量
变量是针对常量来提出的,常量是指在程序中不会改变的量,而变量就可以用于储存不同的计算结果或者不同类型的数据。变量的特点就是可以修改与赋值。
这里需要注意的是:
变量名只能出现字母、数字及下划线,且不能以数字开头;
变量名不能与关键字重复(包括自定义的函数名)例如:
and as assert break class continue def del elif else except exec finally for from global if in import is lambda not or pass print raise return try while with yield
- 变量名不能重复,即一个变量名只对应一个变量。
五种标准变量类型:
数字
字符串
列表
元祖
字典
可以这样理解数据类型和字符串是基础变量,数字类型主要包含两种类型:整型(Int)和浮点型(float)组成,整型只能储存整数;浮点型能存储小数。有了这些数字就可以进行:
数学计算
位运算
也可以用作判断基因的位置信息,即序列的长短,比如:
字符串可以理解为一段文本,可以进行文本处理和判断。包括拼接、大小写修改等处理… 不同的类型的数据在必要时是可以转换的,数字也可以被认为是字符串。
正则表达式:
这里需要穿插一个很重要的「技能」(概念),就是正则表达式,具体的规则在之前的推送中提到:
常用的速查表如下:
在python中有以下几种使用方式:
import re
# 两种匹配方式,re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。输出结果先判断成立然后输出:
pattern1 = re.match(r'pattern', string, flags=0)pattern2 = re.search(r'pattern' string, flags=0)
if pattern1:
print(pattern1.group())
else:
print("no match")
# 编译正则用于match()和search(),flags为可选参数比如忽略大小写、多行模式等
pattern3 = re.compile(r'pattern'[, flags])
m = pattern.search('str')
# 替换,repl指替换后的内容,string指原文内容
re.sub(r'pattern', repl, string, count=0, flags=0)
# findall()也是一种匹配方式,但是优势在于能够将结果返回入一个列表,因此可以直接快速输出结果,以下为我常用的格式
pattern4 = re.findall(r'pattern',string)[0]
# 和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回
pattern5 = re.finditer(r'pattern', string, flags=0)
# split 方法按照能够匹配的子串将字符串分割后返回列表,它的使用形式如下
pattern6 = re.split(r'pattern', string[, maxsplit=0, flags=0])
具体的使用方法可以翻看这篇内容:
手把手带你学 Python3 | python3 脚本小实战(代码放送)
列表、元祖和字典:
元素按顺序排列时就能组成更多信息的数据类型:列表和元祖。其中的元素可以包含字符、字符串、数字、子类表(元祖)。列表使用 list = []
表示;元祖使用 tuple = (obj,)
,具体使用和参数可以详见这两篇推送:
要注意的是,python中索引是从 0 开始计数的;切片和拆包都是快速处理文本好用的方法。
看似两者相差不大,但还是有不同应用场景的。list和tuple最大的差别就在于 Immutable上,这就带了更多安全性及性能优化,列表是相同类型的项目列表:文件,名称,对象,元组是不同类型对象的分组。
字典就好比「新华字典」,定义字典时,元素以关键对的形式 x:y
呈现,即一个元素需要包含关键字键(key)和值(value)两部分。键在字典中是唯一不变的,而对应的值可以是任意数据类型,同时允许相同的值存在。在生物信息操作中,字典最经典的应用应是对fa文件的处理,可以以ID为键,序列为值,或是对调也具有相应的场景,可以看字典的推送:
第三步函数的基本操作
基本使用方法:
函数,即实现一个特定功能的代码段。是python中的重要技能(工具)。
函数离我们并不远,早期我们已熟练使用了一些内置函数:例如input
print
等;
函数可以包括:
根据使用范围可以将函数分为两类:
-
主函数
我们会使用这样来表示,它和代码一样,全局都是使用;
01 if _name_ = '_main_':02 print('This is main.')
-
子函数
除了内置函数外,这里就是发挥你洪荒之力的地方啦;
03 def Plus(a,b):04 print(a+b)
另外,还能从实现不同的功能角度来区分,比如 匿名函数
以及高阶函数
详见实例说明:
在此有一个概念需要提及:
全局变量和局部变量
即整个程序都可以使用的变量,用 global g
表示。与局部变量对应,可以由下图关系理解。
来看一个例子:
01 a = 1
02
03 def function():
04 global a
05 a += 1
06 global b
07 print (a)
08 function()
09 print (a)
10 print (b)
外部变量可以被改变,内部变量也可以在外部使用。
自定义函数
为什么要写函数之前的介绍道:
首先是好看,代码更清楚;
第二是代码容易拆分,容易debug及分工;
第三是有序,避免代码重复(DRY),同时可以厘清思路。
写自定义函数的时候要注意:
函数名也是变量,要遵守定义变量的规则;
参数使用注意
形参可以预先给定一个默认值。如果调用不给实参,那么参数将使用默认值;如果给定值,那么默认的参数会被替换。返回return,一个完整的函数的都会有 return,返还值可为基本数据类型,同时可以返还一个表达式,如果没有,返回 None
合理利用内置函数(下图)
第四部三大结构
python语言中有三大结构:循序、分支和循环。循序就是从上往下进行,分支和循环结构中最重要的就是条件判断。首先我们要熟悉python3中的判断依据——布尔运算。
python3中将布尔运算的Ture (T)
和 False (F)
作为定义词使用,并把0、空字符串和None看成False,其他情况为Ture。
和其他的逻辑运算一样,python3也包含与或非运算,只是表示有些许不同,在python中,与运算使用and
连接,或运算使用or
连接,非运算使用not Ture
。
还有一个要注意的是None。None
是一个一个特殊空值,并不是0,因为0是有意义的。
python中有两种循环语句,while语句和for语句,但是并没有do… while循环。简单来说whlie语句进行判断,如果TRUE
,进入循环,FALSE
则退出;而for循环是首要给定循环范围,每一次循环会用一个变量存储本次循环的值,当超出范围,循环结束。
用作判断的操作符使用,这里引用@ zoe 在技能树上的总结图,Python 的数值运算、逻辑运算、判断表达式的思维导图如下:
第五步更多的应用场景
虽然说,生物信息学的处理都与序列打交道,但是偶尔用用数据抓取,可以快速获得很多相关信息。比如8月的2019国自然信息收集,NCBI的摘要和标题的收录。
这还远远没有结束,在往期的介绍中,依旧存在多个概念和使用没有介绍和归整,例如 biopython, 它能够帮助你快速解析特定文件格式(例如 json),获取对应位置的信息,官方文档链接如下:http://biopython.org/DIST/docs/tutorial/Tutorial.html。
推荐几个数据处理和可视化模块(包):NumPy、Pandas、matplotlib、seaborn、pyecharts
。
现行的一些以python编写的流程中已经支持调用直接作图:
还有一个比较重要的概念,可能需要一到两次推送去描述,学习好了会及时更新的,就是python的类与对象。
Python 有一条哲学理念是:一切皆对象。由此可见对象在 Python 中的重要性。
现阶段还还处于一个依样画葫芦的阶段,有几个小的案例的也可以查看往期推送。
参考资料: