python入门

作者: 竹口小生 | 来源:发表于2017-08-02 14:08 被阅读7次

    教程地址:python入门 - 慕课网

    安装python 执行脚本

    python官网

    直接选最高版本学习

    安装程序,并将python.exe加入系统环境变量。

    选自定义 全选 加入环境变量 Python命令行模式可以exit()命令退出

    记得配置完环境变量后要重新打开一个cmd,不然不起作用啊,好气

    命令行执行脚本

    配置下sublime可以直接执行python脚本吧。

    Sublime text工具-编译系统-自动就好了ctrl+b执行脚本

    数据类型

    1.整数

        a)200,-10,0

        b)二进制(1010),八进制(0777),十进制(444),十六进制(0x45af)这些。

        c)八进制表示数字前必须加上0(零),十六进制表示数字前必须加上0x.

    2.浮点数

        a)0.7  -0.56  0.0004

        b)科学计数法1.23*10^9 => 1.23e9  0.000012 => 1.2e-5

    3.字符串

        a)‘abc’      “abc”

        b)‘ab”c’       “ab’c”      “ab\”c”(\为转义符)

    4.布尔值

        a)Ture (真)

        b)False (假)

        c)布尔值可以用and、or和not运算。其实就是与或非

    5.空值

        a)空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。

        b)print(0==None) #False

    Print语句

    在3.6中print语句要使用()包起来,而2.7则不需要。

    都可以使用,(逗号)分隔,打印多个结果

    print('100 + 200 =', 100 + 200)

    注释#

    Python的注释以#开头,后面的文字直到行尾都算注释

    #我是一行注释....

    变量

    Python的声明变量与php声明变量一样简单,都不用指定变量的数据类型,而且不需要php的$符号

    和大多数语言一样,变量名由字母数字下划线组成,且不能以数字开头

    例子

    a = 'ABC'

    b = a   #这里的赋值是值传递

    a = 'XYZ'

    print (b,'\n') #ABC

    对比php中则存在通过加&符引用传递

    php引用传递


    raw字符串

    使用r开头,表示这是一个raw字符串,里面的字符不需要转义

    r'\(~_~)/ \(~_~)/'

    多行字符串‘’’...’’’ 

    '''Line 1

    Line 2

    Line 3'''

    python中的整形和浮点型

    在2.7版本中,整数之间相除为整数,不会保留小数点,只取整。11/4 = 2

    在我使用的3.6版本中就不存在这个问题。11/4 = 2.75

    python中的布尔类型

    Python把0、空字符串''和None看成False,其他数值和非空字符串都看成True

    Python中的and,or,not就是对应php中的&&,||,!,且存在短路原则。

    a = True

    print(a and 'a=T' or 'a=F')   #a=T

    列表list

    List是一种有序的集合,使用[],将元素括起来,没有元素就表示一个空list

    创建list :L = ['Adam', 'Lisa', 'Bart']

    与大多数语言一样,列表list的索引是从0开始的,可以通过 变量[索引] 来访问list中的元素

    通过索引访问list :  print(L[1])   #Lisa

    访问不存在的索引就会报错

    倒序访问list :  print(L[-1])  #Bart

    倒序访问list :  print(L[-2])  #Lisa

    一样越界会报错:  print(L[-4])  #报错

    往list列表添加新元素

    append()方法  将新元素追加到list末尾

    L.append('Paul')

    print(L)   #['Adam', 'Lisa', 'Bart', 'Paul']

    Insert()方法,它接受两个参数,第一个参数是索引号,第二个参数是待添加的新元素

    当参数1索引存在的时候,新元素被插入到指定位置,且这个索引后的元素,索引向后推一位。

    当参数1索引不存在的时候,新元素就是追加在list末尾,自动分配索引

    同样的,也接受负数作为倒序的索引

    L.insert(100,'Paul')

    L.insert(4,'test')

    L.insert(-4,'test111')

    print(L)  #['Adam', 'test111', 'Lisa', 'Bart', 'Paul', 'test']

    从list列表删除元素

    使用pop()方法,当不给pop方法传递索引时,默认删除list中的最后一个元素(其实就是默认-1)

    传入索引,则根据索引查找,并删除

    pop()方法会返回被删除掉的元素

    L = ['Adam', 'Lisa', 'Bart', 'Paul']

    print(L.pop()) #Paul

    print(L) #['Adam', 'Lisa', 'Bart']

    print(L.pop(0)) #Adam

    print(L) #['Lisa', 'Bart']

    print(L.pop(-2)) #Lisa

    print(L) #['Bart']

    索引越界会直接报错。pop()删除空list里面元素的时候同样会报错

    替换list中的元素

    其实就是给指定的索引赋值,越界报错,可以使用负数索引

    L[-1] = 'Paul'

    元组tuple

    tuple是另一种有序的列表,tuple使用()把元素括起来。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。

    创建tuple :t=('Adam', 'Lisa', 'Bart')

    Tuple与list一样,可以通过索引访问:

    t = ('Adam', 'Lisa', 'Bart')

    print(t) #('Adam', 'Lisa', 'Bart')

    print(t[1]) #Lisa

    print(t[-3]) #Adam

    创建单个元素的tuple

    因为()既可以表示tuple,也可以表示运算时的优先级,所以类似这样的时候存在歧义。

    t = ('string')  #string

    t = (10086) #10086

    正是因为用()定义单元素的tuple有歧义,所以 Python 规定,单元素 tuple 要多加一个逗号“,”,这样就避免了歧义:

    t = ('string',)

    print(t) #('string',)

    可变的tuple

    t = ('a', 'b', ['A', 'B'])

    L = t[2]

    L[0] = 'X'

    L[1] = 'Y'

    print(t) #('a', 'b', ['X', 'Y'])

    指向不变:tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。即指向'a',就不能改成指向'b',指向一个list,就不能改成指向其他对象,但指向的这个list本身是可变的!

    Python代码的缩进

    具有相同缩进的连续代码行被视为代码块。没有像php那种{}

    Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格

    If语句

    if条件:

        代码块

    If-else

    if条件:

        代码块

    else:

        代码块

    If-elif-else

    if条件:

        代码块

    elif :

        代码块

    else :

        代码块

    #这个elif就是指else if的意思。

    总体上if else这些和其他语言一样,就是注意没有{}括号,而已相同的连续缩进为代码行为代码库,以:开始代码库标识,还有else if简写为elif就是了。

    for循环

    list或tuple可以表示一个有序集合。可以使用for循环依次访问一个其中的每一个元素

    L = ('Adam', 'Lisa', 'Bart')

    for name in L:

        print(name)

    L = [75, 92, 59, 68]

    sum = 0.0

    for score in L:

        sum += score

    print(sum / 4)

    while循环

    和其他主流语言一样,都是当满足条件,执行while代码块。否则跳槽循环。

    N = 10

    x = 0

    while x < N:

        print(x)

        x = x + 1

    用 for 循环或者 while 循环时,如果要在循环体内直接退出循环,可以使用 break 语句。

    在循环过程中,可以用 break 退出当前循环,还可以用 continue 跳过后续循环代码,继续下一次循环。

    嵌套循环

    在循环内部,嵌套循环。这种开发过程中是很常见的。

    for x in [1,2,3,4,5,6,7,8,9]:

        for y in [0,1,2,3,4,5,6,7,8,9]:

            if x<y:

                print(x*10 + y)

    字典dict

    Dict是key-value的键值对集合,使用大括号{}包裹。

    创建一个dict字典,赋值给变量d:

    d = {

        'Adam': 95,

        'Lisa': 85,

        'Bart': 59

    }

    定义的时候,重复的key会取代上一个。还有关于这个key可以是整形,浮点型,字符串都行的。

    d = {

        'Adam': 95,

        'Lisa': 85,

        'Bart': 59,

        1.5:50,

        1.5:51,

        '<"\'>':11

    }

    print(d) #{'Adam': 95, 'Lisa': 85, 'Bart': 59, 1.5: 51, '<"\'>': 11}

    与list和tuple不同的是,dict通过key来访问其中的元素。

    d['Adam']  #95

    当key存在时,返回其对应的value,否则报keError错误

    要避免KeyError 发生,有两个办法:

    一是先判断一下key 是否存在,用 in 操作符:

    if 'Paul' in d:

        print(d['Paul'])

    二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:

    print(d.get('Bart')) #59

    print(d.get('Paul')) #None

    len()函数可以计算任意集合的大小,包括list,tuple,dict,字符串也行

    len([1,2,3])   #3

    字典dict的特点

    dict是无序的。

    dict中做为key的元素是不可变的,其中字符串,整数,浮点数都是不可变的,list不行,每个元素都是不可变对象的tuple也是不可变的,可以作为key。

    {('a','b'):1}   #可以

    {('a','b',['c']):1} #不行,存在list

    更新字典dict

    dict是可变的,可以随时往dict中添加新的key-value

    使用dict[key]=value的语法,存在则替换,不存在则添加。

    d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59}

    d['a']='dada';

    d['Bart']=100;

    print(d)  # {'Adam': 95, 'Lisa': 85, 'Bart': 100, 'a': 'dada'}

    遍历字典dict

    使用for in遍历

    for key in d:

        print(key,':',d[key])

    #拿到key之后使用dict[key]取其对应的value

    set数据类型

    dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。

    只想要dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,set就是符合这种需求。

    set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。

    创建set方法:调用set()并传入一个list,list的元素将作为set的元素

    s = set(['A', 'B', 'C'])

    print(s)  #{'A', 'C', 'B'} 元素的顺序和初始传入的不同,set是无序的,随机的

    也可以直接这样:

    s={'A', 'C', 'B'}

    Set不能包含重复的元素,传入的重复元素会被自动去重。

    访问set

    由于set存储的是无序集合,所以我们没法通过索引来访问。

    访问set中的某个元素实际上就是判断一个元素是否在set中。

    使用in操作符判断

    s={'A', 'C', 'B','B'}

    print('A' in s)   #True

    print('a' in s)   #False

    更新set

    使用add()方法添加元素,依然是自动去重

    使用remove(key)去除key元素,key不存在时会报错。

    s={'A', 'C', 'B'}

    s.add('D')

    s.add('A')

    s.remove('C')

    print(s) #{'A', 'D', 'B'}

    函数

    在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

    return None可以简写为return

    def my_sum(x,y):

        return x+y

    print(my_sum(3,5))  #8

    函数返回多值(实际上就是返回一个tuple)

    def my_sum(x,y):

        return x,y,x+y

    print(my_sum(3,5))  #(3, 5, 8)

    python之递归函数

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

    要找到规律,然后注意结束递归的条件。

    def my_def(n):

        n = int(n);

        if n<=0:

            return

        if n==1:

            return 1

        else:

            return n*my_def(n-1)

    print(my_def(3)) # 3*2*1 = 6

    使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

    函数的默认参数

    函数的参数可以设置默认参数,放在参数列表后面。比如def hanshu(x,y=2,z=3)这种

    与php中一样。

    Python中的int()函数的第二个参数,就是参数一对应的进制,默认10进制。

    不合法会报错,最终返回十进制整数。

    print(int('123'))#123

    print(int('123',8)) #83

    print(int('1010',2)) #10

    可变参数

    如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:

    Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量args看成一个tuple就好了。

    Args只是个变量名,你爱用a,b,c什么都行。

    对list和tuple进行切片

    切片Slice操作符。以list为例,tuple也是一样的,就是切片完的返回值为元组tuple就是了

    L = ['Adam', 'Lisa', 'Bart', 'Paul']

    print(L[0:3])   #切片,从索引0开始切3个元素['Adam', 'Lisa', 'Bart']

    print(L[:2])   # ['Adam', 'Lisa']如果第一个索引是0,可以省略

    print(L[:])   # ['Adam', 'Lisa', 'Bart', 'Paul']只用一个:,表示从头到尾

    print(L[::2])   # ['Adam', 'Bart']还可以给第三个参数,表示每N个取第一个

    调用方法:变量名[参数]

    可填3个参数,参数使用:间隔。

    我的理解:第一个起始索引默认0,第二个切分的个数默认为len(变量)就是切到末尾,第三个参数默认为1。至少需要一个:

    倒序切片,切片同样支持负数索引:

    print(L[-3:2])   # ['Lisa']

    print(L[-4:-1:3])   # ['Adam']

    记住倒数第一个元素的索引是-1。

    切片包含起始索引,不包含结束索引。

    字符串也可以切片:字符串的索引同样从0开始,且支持负索引。

    然后切片只能正着切,不能逆着切。

    print('ABCDEFG'[-3:-1]) #EF

    print('ABCDEFG'[-3:2]) #空 因为索引2的位置比索引-3的位置靠前。

    print('ABCDEFG'[-3:4]) #空 位置重叠也是不行的。

    Python中的集合

    集合是指包含一组元素的数据结构,目前接触到的包括:

    1.有序集合:list,tuple,字符串;

    2.无序集合:set

    3.无序集合并且具有key-value 对:dict

    索引迭代

    Python中,迭代永远是取出元素本身,而非元素的索引。

    对于有序集合,元素确实是有索引的。有的时候,我们确实想在for 循环中拿到索引。

    方法是使用enumerate() 函数:enumerate(枚举)

    L = ['Adam', 'Lisa', 'Bart', 'Paul']

    for index, name in enumerate(L):

        print(index, '-', name)

    #index即为索引,name为其值

    生成列表

    使用range()函数

    >>> range(1, 11)

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

    Python还有一种特有的语法糖:列表生成式

    例:生成[1x1, 2x2, 3x3, ..., 10x10]的列表

    [x * x  for  x  in  range(1, 11)]

    多写写应该就熟悉了。

    range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...,99]

    格式化字符串

    字符串可以通过%进行格式化,用指定的参数替代%s。字符串的join()方法可以把一个list 拼接成一个字符串。

    def generate_tr(name, score):

        return '我是:%s,我考了%s分' % (name, score)

    print(generate_tr('菜鸟',98)) #我是:菜鸟,我考了98分

    列表生成式中还可以加入条件过滤

    for 循环后面还可以加上 if 判断

    >>>[x * x  for  x  in  range(1, 11)  if  x  % 2 == 0]

    [4, 16, 36, 64, 100]

    多层表达式

    for循环可以嵌套,因此,在列表生成式中,也可以用多层for循环来生成列表。

    对于字符串'ABC' 和 '123',可以使用两层循环,生成全排列:

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

    ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

    翻译成循环代码就像下面这样:

    L = []

    for m in 'ABC':

        for n in '123':

            L.append(m + n)

    python中列表生成式使用的经典例子

    一行代码实现乘法口诀表:

    print ('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))

    666666

    相关文章

      网友评论

        本文标题:python入门

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