美文网首页
生信零基础学习笔记(三)python基础

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

作者: 顾维安 | 来源:发表于2017-11-27 11:16 被阅读0次

    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基础

          本文链接:https://www.haomeiwen.com/subject/abexvxtx.html