python学习笔记

先贴一个教程

基本操作

  ▲input('……')     
   输出引号里内容并读入

  ▲print('……',a,b)  
   引号里内容原样输出;每用一个逗号分隔都会输出一个空格;
   print('%d %s %.2f' % (2,'123',3.0))
   输出一个%需要用%%转义
   末尾会默认加一个换行,可以用print(……,end=' ')取消回车
   注意可以把输出的值放在list里再输出来加速
   print (' '.join(map(str, res)))

  ▲print('''A
   B
   C''')
   每行都能换行。

  ▲#注释

  ▲单引号和双引号都可以表示字符串;用\进行转义。

  ▲缩进决定子程序;if和else后要加冒号。可以用elif代替else if。

  ▲for循环:
   for i in range(0,100000):
   本质是生成了一个很大的list然后一个个访问过去。

  ▲while循环:
   while (x>0):

  ▲int():转化成整数。

  ▲import math:导入math库。

容器的使用

  ▲list:
   类似于vector,用中括号定义。 a=[1,2,3]
   用len(a)测长度;a[-x]表示倒数第x个数是什么。
   用append(x)在末尾添加一个元素,用insert(p,x)加入到指定位置;用pop()删除最后一个,用pop(i)删除指定位置。
   ls.copy()生成一个等于ls的新的列表。
   使用较为灵活。比如ls+=lt(或ls.extend(lt))表示将lt接到ls后面;
   list里面的元素可以不是同一个类型,甚至可以嵌套list。
   tuple与list类似,但是不可变(没有加入、删除函数);用小括号来定义。

  ▲dict:
   类似于unordered_map,用大括号定义。d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
   可以直接用中括号访问和修改。
   可以用'Bob' in d 进行询问是否存在;也可以用d.get('Bob',-1)访问,没有元素返回-1。
   用d.pop('Bob',-1)删除。
   for循环in后面可以放dict类型。直接引用默认迭代key。
   如果要迭代value,用for value in d.values()
   如果要同时迭代key和value 用for k, v in d.items()。
   enumerate()可以把list转化为“下标-list”的pair

  ▲set:
   用小括号和一个list定义。s = set([1, 2, 3])
   用add(key)和remove(key)进行加入和删除。
   注意可以完全看做一个集合,因此可以进行s1&s2,s1|s2等运算。

函数相关

  ▲用lambda快速定义函数
   比如f=lambda x,y:x+y

  ▲定义一个普通函数
   def move(x, y, step, angle=0):
      nx=ny=1
      return nx, ny

  ▲传入可变参数
   def calc(*numbers):
      sum = 0
      for n in numbers:
         sum = sum + n * n
      return sum
   调用的时候,可以往Move里放0或多个参数(如move(1,2,3))。进入函数后,它们会打包成一个list。
   如果就是要往里面传整个list类型的东西,可以简写成move(*List)。

  ▲传入关键字参数
   def person(name, age, **kw):
      print('name:', name, 'age:', age, 'other:', kw)
   调用的时候,可以在末尾放0或多个参数,比如person('Adam', 45, gender='M', job='Engineer')。
   进入函数后,它们会打包成一个dict。同样的,可以简单地用**Dict来传入一个dict类型的容器。

  ▲传入命名关键字参数
   def person(name, age, *, city, job):
  中间要加个*号以示区分。在这样的情况下,后面只接受名字(第一维)为city,job的关键字。
  如果之前已经定义过可变参数了,那么不用加*来区分了。

  ▲定义函数参数的顺序:必选参数->默认参数->可变参数->命名关键字参数->关键字参数
  def f(a, b, c=0, *args, **kw):
     print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
  甚至可以组装一个tuple和一个dict直接传进去,即任意一个函数f都可以用形如f(*args,**kw)的形式调用。

  ▲基本函数
   eval()将引号里的东西用python表达式计算结果
   math.sqrt()
   math.acos()
   abs()
   round(x,2)保留2位小数

  ▲随机数相关(import random)
   seed(x)
   random() 生成[0.0,1.0)之间的随机小数
   randint(a,b) 生成[a,b]之间的整数
   shuffle(seq) 把一个序列类型打乱

高级特性

  ▲使用import decimal调用浮点数高精度库。
   设置计算时的精度:decimal.getcontext().prec=n
   将一个数x转化为它:decimal.Decimal(x)
   初始化常量时,要用单引号括起来。
  
  ▲切片
   a[0:3] :截取list里固定的一段(注意下标左闭右开)。支持负数,0可以省略。
   a[:10:2]:前10个数里每两个中取一个(即a[0],a[2],a[4],a[6],a[8])。中间的数省略,视为在整个list里选。

  ▲列表生成式
   [x * x for x in range(1, 11)]
   甚至可以加判断 [x * x for x in range(1, 11) if x % 2 == 0]

  ▲生成器generator
   定义方式①:将列表生成式的[]替换成()
   每次用g.next()调用下一个值;也可以用 for i in g 循环调用
   定义方式②:用函数。每次在关键字yield后抛出一个值,next后从上次抛出位置继续。
   def fib(max):
      n, a, b = 0, 0, 1
      while n < max:
         yield b
         a, b = b, a + b
         n = n + 1
      return 'done'

文件相关

  ▲打开和关闭
   <变量名>=open(<文件名>,<打开模式>)
   打开模式和C类似。'r'是只读,'w'覆盖写,'a'追加;'t'为文本文件类型,'b'为二进制文件类型;末尾加一个'+'表示在原功能上同时加上读写功能。
   open默认以"rt"的方式打开;如果读入图片、音乐等,就要用'*b'打开。
   释放文件使用权:<变量名>.close()

  ▲读写格式
   .readall()
   .readline(size=-1) 读入一行。(如果有参数,就是读入size个字符)
   .readlines(size=-1) 读入所有行,放到一个list里。
   文件变量本身是行序列,所以可以用 for line in <文件名>: 遍历。
   .write(s) 写入s
   .writeline(lines) 将一个字符串list写入文件
   .seek(offset)改变文件里操作指针位置。0(开头),1(当前位置),2(文件结尾)

库的使用

turtle库

posted @ 2018-02-14 09:11  了491  阅读(275)  评论(0编辑  收藏  举报