生信零基础学习笔记(三)python基础

python入门有很多教程,习惯上比较讲究快速学习的同学,可以选择廖雪峰的网站和python简明教程,小小白上半年偶尔看过一遍廖雪峰的教程,然而……没有记住,因为当时完全没有实战,所以说学习编程还是要不断的练习和分享,以及做笔记啊。因此本次我选择python简明教程并且结合廖雪峰的网站。


推荐安装pycharm编辑器,用过都说好。

官网直接下载。解压,打开bin文件夹,终端运行 sh pycharm.sh,出现安装界面,选择激活码。

激活码参考:blog.csdn.net/lhw413/article/details/72357062 。

装在了window电脑的ubuntu虚拟机卡的喲,简直人生无望,果断重装window版。

安装配置有很多教程,不再赘述,参考:wenku.baidu.com/view/81038a877cd184254b35359b.html 


1.基本概念:

python中4种类型的数,整数,长整数,浮点数(相当于小数),复数(-5+4j)

字符串使用,单引号双引号的一样,三引号可以只是多行的字符串,并且可以在其中使用单双引号。

想要在字符串中包含单引号除了三引号还有\,\' 转义符。但\在行尾表示字符串接下一行。

自然字符串:给字符串的前缀加R或者r,特殊字符串失去意义,例如正则表达式可以使用中这种形式,否则转义符太多。

Unicode字符串:字符串前加上前缀u或者U,简单说就是给字符一个唯一的存储数字,跨平台,跨语言通用。

字符串按照字面意义相邻放着,自动被Python相连。

变量:y=x+1 中的x,y

标识符:字母,下划线,数字,注意大小写。

对象:在python中任何东西都可以称为对象。

缩进:同一层次的语句必须有相同的缩进。每一组称之为块。

list 有序的集合可以随时添加删除值【】:

classmates = ['Michael','Bob','Tracy'] ,len()获得list元素的长度

.append 在末尾添加元素;.insert (1.值) 在1位插入值;.pop(i)删除list值

tuple : 元组,一旦初始化不能修改。注:只有一个字符的元组,在后面加,以免歧义。(1,)

dict: 快速查找存储,但是空间消耗大。{} 通过key直接拿到value. In可以判断key知否存在,.pop删除key

set:无序无意义的集合,提供一个list作为输入集合 显示不证明有序,.remove删除key

不变对象:调用自身的任何对象方法,都不会改变对象自身 的内容,相反这些对象会创建新的对象并返回,这也就保证了不可变对象是不可变。

2.控制流(语法)

共三种if,for,while

if

if - else

if (条件判断):

    print1

elif (条件判断):

    print2

else:

    print2

从上到下依次执行。第一个判断条件为true,余下忽略。

循环语句

for - in循环

for x in…… 就是把每个元素代入变量x,然后执行缩进的块的语句。

生出整数序列:range(5)从0开始小于5的整数,提供第三个数为步长,比如(1,5,2)再用list()转换为list,输出为1,3

例如:

sum =0

for x in range(101):

    sum = sum + x

print (sum)

while

条件满足,不断循环,条件不满足,退出循环。

sum =0

n =99

while n >0:

    sum = sum + n

    n = n-2

print (sum)

break

用来终止循环语句。无论结果是否为true,或者序列有没有完全被递归。也就是说从for过着while循环中终止,任何对应的循环的else块将不执行。

while True:

    s = raw_input ('Enter something:') ### raw_input 将输入的都表示为字符串。

    if s == 'quit':

        break     ### 程序终止 ,输出done

    print 'length of the string is',len(s) ###否则输出s的字符串长度。

print 'Done'

continue

跳过当前的循环块的剩余语句,继续进行下一步循环。

while True:

    s = raw_input ('Enter something:')

    if s == 'quit':

        break

    if len(s) < 3:

        continue

    print 'Input is of sufficient length'

print 'Done'

尽量避免continue 和 break ,容易进入死循环。

3.函数

调用函数

定义函数

def 函数名(参数):

    函数内容

如:def hello ():

               print 'hello world'        

函数形参 

函数中的参数称之为形参,提供的赋值称之为实参。

函数返还值:从被调函数返还到主函数,并且返回一个计算的值,也就是说主函数调用这个函数的时候得到这个返还值。

当你在函数定义变量的是后,它与函数外具有相同名称的变量没有关系,函数的变量名对于函数来说是局部的,这就是变量的作用域、

global 语句

定义在函数外的变量赋值。使用该语句可以清楚的表明变量是在外面的块定义。也就是他代表赋值是全局的。

默认参数值

函数定义的形参后面跟上= 赋值,函数的形参就有了默认的参数值,不可变。

只有形参表末尾的函数可以有默认参数值,也就是说声明函数的形参的时候,不能先声明有默认值的形参再声明没有默认值的形参、也就是必选参数在前,默认参数在后,当函数有多个参数的时候,变化大的在前,变化小的在后,降低难度。

有多个默认参数的时候,可以按照顺序提供默认参数,也可以不按照顺序直接写参数值,表示这个参数用传进去的值。

可变参数:参数加*,表示参数作为可变参数,允许添加0到多个参数,函数调用时自动组成tuple.

也可以在list前加,表示list中的元素作为可变元素添加。

def calc(*numbers):

关键参数

允许传入0到多个含有参数名的参数,自动组成dict。通过命名给参数赋值,称之为关键函数。不在乎位置。

**kw kw作为关键参数

>>> extra = {'city': 'Beijing', 'job': 'Engineer'} ###先组建一个dict

>>> person('Jack', 24, **extra)###作为关键参数填进去

name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}

命名关键参数:

如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数。这种方式定义的函数如下:

def person(name, age, *, city, job):

print(name, age, city, job)

命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

调用方式如下:

>>> person('Jack', 24, city='Beijing', job='Engineer')

Jack 24 Beijing Engineer

如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

def person(name, age, *args, city, job):

print(name, age, args, city, job)

参数组合

参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

递归函数

如果一个函数在内部调用自身本身,这个函数就是递归函数。

函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。解决方法尾递归。

4.高级特性

切片

L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素,也可以倒数切片,倒数第一个元素的索引是-1。可以用于字符串。

前10个数,每两个取一个,

>>> L[:10:2]

[0, 2, 4, 6, 8]

所有数,每5个取一个:

>>> L[::5]

[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]

迭代

在Python中,迭代是通过for ... in来完成,不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。

默认情况下,dict迭代的是key。如果要迭代value,for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。也可以迭代字符串。

如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterable类型判断:

>>> from collections import Iterable

>>> isinstance('abc', Iterable) # str是否可迭代

True

>>> isinstance([1,2,3], Iterable) # list是否可迭代

True

>>> isinstance(123, Iterable) # 整数是否可迭代

False

在for循环中同时迭代索引和元素本身:

for i, value in enumerate(['A', 'B', 'C']):

...    print(i, value)

列表生成式

创建list

[1x1, 2x2, 3x3, ..., 10x10]:

>>> [x * x for x in range(1, 11)];>>> [x * x for x in range(1, 11) if x % 2 == 0]###偶数平方

写列表生成式时,把要生成的元素x * x放到前面,后面跟for循环,就可以把list创建出来。

两层循环,可以生成全排列:

>>> [m + n for m in 'ABC' for n in 'XYZ']

['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

列表生成式也可以使用两个变量来生成list:

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }

>>> [k + '=' + v for k, v in d.items()]

['y=B', 'x=A', 'z=C']

一个list中所有的字符串变成小写:

>>> L = ['Hello', 'World', 'IBM', 'Apple']

>>> [s.lower() for s in L]

['hello', 'world', 'ibm', 'apple']

生成器 generator

为了节省空间,一遍循环一边计算。

只要把一个列表生成式的[]改成(),就创建了一个generator;如果一个函数定义中包含yield关键字,是一个generator

for循环可迭代。

变成generator的函数,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

迭代器:

可以直接作用于for循环的对象统称为可迭代对象:Iterable

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

>>> from collections import Iterator

>>> isinstance((x for x in range(10)), Iterator)

生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator。

把list、dict、str等Iterable变成Iterator可以使用iter()函数,

>>> isinstance(iter([ ]), Iterator):

True

5.函数式编程、

高阶函数

函数本身可以赋值给变量,调用变量可以调用函数。所以一个函数可以接受另一个函数作为参数,这就是高阶函数。

map函数

接收两个参数,一个是函数,一个是迭代对象。例如:

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

['1', '2', '3', '4', '5', '6', '7', '8', '9']

reduce函数

与map函数的区别:

①从参数方面来讲:

map()函数:

map()包含两个参数,第一个是参数是一个函数,第二个是序列(列表或元组)。其中,函数(即map的第一个参数位置的函数)可以接收一个或多个参数。

reduce()函数:

reduce() 第一个参数是函数,第二个是 序列(列表或元组)。但是,其函数必须接收两个参数。

②从对传进去的数值作用来讲:

map()是将传入的函数依次作到序列的每个元素,每个元素都是独自被函数“作用”一次;(请看下面的栗子)

reduce()是将传人的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用(累积计算),

最终结果是所有的元素相互作用的结果。

filter函数

用于过滤序列,和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。

sorted函数

排序算法

可以进行数字与list排序,关键在于建立映射。

返还函数

把函数作为结果值返还。

6.模块

模块是包含了所有你定义的函数和变量的文件,为了在其他程序中重用模块,py为扩展名。

7.面向对象的编程

而面向对象的程序设计把计算机程序视为一组对象的集合,而每个对象都可以接收其他对象发过来的消息,并处理这些消息。

你可能感兴趣的:(生信零基础学习笔记(三)python基础)