Python3.5 基础知识点

。。。.。。。。。。。。。。。。。。。。。。。。。。。。

Notebook

2018/09/09


  • Python交互模式的代码是输入一行,执行一行,而命令行模式下直接运行.py文件是一次性执行该文件内的所有代码。可见,Python交互模式主要是为了调试Python代码用的,也便于初学者学习,它不是正式运行Python代码的环境!
    命令行里面直接输入python进入交互模式。

  • 用Python开发程序,完全可以一边在文本编辑器里写代码,一边开一个交互式命令窗口,在写代码的过程中,把部分代码粘到命令行去验证。那么文本编辑器,Windows推荐Notepad++,linux就直接vim。其实最好都用pycharm吧

  • Python使用缩进来组织代码块,请务必使用4个空格的缩进。

  • 整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法也是精确的!),而浮点数运算则可能会有四舍五入的误差。

  • Python允许用r’‘表示’'内部的字符串默认不转义,:

>print(r’\\t\’)
\\t\


  • 在Python中,可以直接用True、False表示布尔值(请注意大小写),并且可以进行运算and or not。复数的话,用j而不是i
  • python能直接处理的数据类型:整数、浮点数、布尔值、字符串、空值(None)、变量、常量。
  • 在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码(称为可变长度的uincode)。
    用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件
  • 对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:这里写图片描述
  • 1个中文字符经过UTF-8(常用)编码后通常会占用3个字节,而1个英文字符只占用1个字节(这就不同于unicode了,他都是两个字节,16bits):这里写图片描述

  • 字符串
    • 单双引号都可以定义字符串,并且三引号可以定义多行的字符串。
    • 字符串操作:
      • ‘a’+‘b’ =>ab
      • ‘a’*2 =>aa
    • 格式化输出:
      %运算符就是用来格式化字符串的。在字符串内部,%s表示用字符串替换,%d表示用整数替换,有几个%(占位符),后面就跟几个变量或者值,顺序要对应好。如果只有一个%,括号可以省略。
      这里写图片描述
      • 字符串里面的%是一个普通字符怎么办?这个时候就需要转义,用%%来表示一个%这里写图片描述
    • 字符串方法
      • str.find(str1)/str.find(str1,num1,num2):从num1到num2检索str1,返回str1中第一个位置索引值。找不到返回-1。
      • str.join(str1):以str连接str1里面各元素。
      • str.lower()/str.upper()/str.swapcase():str里面大写转小写/小写转大写/相互转。
      • str.replace(old,new[,num]):把str里面的old替换成new,替换次数num次(可选)。不指定num,全部替换。
      • str.split([st=‘A’,num=num1]):以A为分割符,默认空格,分割num1次。
      • xian’zai

  • python里面特有的运算符:
    • in,not in(成员运算符,判断在不在,指定的序列找到值),返回bool类型
    • is,is not(身份运算符,判断两个标识符是不是引用自一个对象),返回bool类型
    • 位运算符& | ^ ~ << >>除了处理bool变量,也可处理数字,是把数字当作二进制计算。

  • list(数组)与tuple(tuple一旦初始化就不能修改),,隔开,没有类型安全检查
    这里写图片描述
    这里写图片描述

    • list也可以构成二维等多维数组。
      在这里插入图片描述
    • type(),len()函数可以读取list的类型、长度。
    • 元组就是只读的list,圆括号。或者多项只用,隔开,不用加()。元组tuple就可以作为字典里面key,list就不行。
    • 所谓元组不能修改指的是其内容不能修改,但不包括元组里面某项指的内容。元组可以连接组合。
    • 元组和数组的转换:
      tuple1=tuple(list1)
      list1=list(tuple1)
      在这里插入图片描述
  • list里面:对象.方法(参数)

    • list.append(obj):在末尾添加新对象;
    • list.count(obj): 统计obj在list里面出现的次数;
    • list.extend(seq):用新list(seq)扩展原来list。这个操作其实和分片a[len(a):]=seq相同;
    • list.index(obj):找出obj第一个匹配的索引位置;
    • list.insert(index,obj):将obj插入index位置(原来index位置的值后移)。分片a[index:index]=seq也行;
    • list.pop(index):移除index位置的数,默认是最后一个;
    • list.remove(obj):移除第一个匹配的值;
    • list.reverse():反向list元素,不需要传参;
    • list.sort():排序。默认按照升序。有两个可选参数keyreverse=Ture(表示逆序),exp:list.sort(key=len,reverse=True)
    • list.clear()作用类似于del a[:]
    • b=list.copy()与b=list[:]相同(这两个都是浅copy,区别与copy module里面的deepcopy)。注意:这个和b=list(直接赋值)的区别

  • dict与set(set和dict的唯一区别仅在于没有存储对应的value)
    这里写图片描述
    dict内部存放的顺序和key放入的顺序是没有关系的
    • dir是键值对结构类型,花括号,key唯一,value可以不唯一,key值也可以是数字、元组etc.但是列表就不行(可变),因为不可做hash算法。

    • 字典函数:

      • del dict[key1]
      • len(dict):key的个数
    • 字典方法

      • dict.clear() :清空,区别于del dict和dict = {}(这个是重新赋值,产生一个新的对象)
      • dict.keys()
      • dict.values()
      • dict.item()
      • dict.fromkeys(list1[,value1]):以list1里面与元素作为键,以value1为他们所有键的值。默认None。
      • dict.get(‘key1[,default=A]’):返回key1对应的值,若不存在返回A,默认None。
      • dict.update(‘dict2’):把dict2里面的键值对更新放进dict里面。
    • set


  • 变量
    • 一般来说,变量名称字母数字下划线,但是呢python3支持汉字做变量名。
    • 变量分类:
      • 不可变变量
        int/float/complex
        tuple
        str(值变的时候会指向一个新的地址)
      • 可变变量
        list[]
        dict{}
    • 字符串:
      数字字母下划线组成
      +字符串连接运算符,*重复操作

  • python函数里面的参数

    • 位置参数(必须参数)
      def func(name,age):
      func(‘a’,11)
    • 关键字参数
      def func(name,age):
      func(age = 11,name = ‘a’)关键字必须一致,但是顺序可以调换
      可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。
      关键字参数和位置参数混用的话,必须先传位置参数,比如就不能有func(name=‘a’,11),
    • 默认参数。有输入就按输入顺序来,没有就按默认。当不按顺序提供部分默认参数时,需要把参数名写上。比如调用enroll(‘Adam’, ‘M’, city=‘Tianjin’),意思是,city参数用传进去的值,其他默认参数继续使用默认值。默认参数必须指向不变对象!
      def func(name,age=11):
      func(‘a’,13)/func(‘a’ )
      默认参数后面不能加位置参数,比如说就没有def func(name='a',age)
    • 可变参数:
      def func(*args,**kwargs)要是在函数里查看args、kwargs类型,是个tuple、dict 可以理解为args位置参数,kwargs关键字参数。其实,*表示位置可变参数,**表示关键字可变参数
      func(1,2,3,4)
      传入的参数个数是可变的。但是在函数内部,参数接收到的是一个tuple。调用的时候,Python允许在list或tuple前面加一个*号,把list或tuple的元素变成可变位置参数传进去:【同理我们也允许字典前面加**转变为关键字可变参数】

    list1 = [1,2,3,4]
    #以下和c = func(1,2,1,2,3,4)相同
    c = func(1,2,*list1)

    • 命名关键字参数:限制关键字参数的名字
  • 以上组合 对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的


  • 写列表生成式时,把要生成的元放到前面,后面跟for循环,就可以把list创建出来。for循环后面还可以加上if判断:这里写图片描述

  • 生成器
    • 创建一个generator。第一种方法只要把一个列表生成式的[]改成()。二是如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator
    • generator保存的是算法,每次调用next(g),就计算出g的下一个元素的值,直到计算到最后一个元素。最难理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
  • 直接作用于for循环的数据类型有以下几种:
    一类是集合数据类型,如list、tuple、dict、set、str等;
    一类是generator,包括生成器和带yield的generator function。
  • set可以把字符串变成集合
    这里写图片描述
  • print()自带换行,否则需要在输入内容之后加上,end=' '
  • 文件操作最好使用句柄,打开之后记得关闭!readline()可以按行读取,要用循环!
  • 异常处理:
    try:…
    except Exception as error
    print(er)…
  • 文件操作里面,open("...(1)","...(2)")(2)里面r可读,w覆盖写入,a追加写入,b二进制模式,+读写模式

pass表示空的语句。什么都不做,仅占位。
assert 判断语句a,“bbb”:如果!a,则输出bbb。


  • 语句块(:标志开始,缩进控制)
    • 条件语句
      • if ():
        pass
        elif ():
        pass
        else ():
        pass
      • 认为是False情况:
        None
        False
        0 0.0 0+0j
        空字符串
        空数组
        空字典
        空元组
        其他即为True([]!等为False)。
  • 循环
    • while循环

      • while ():
        pass 表示占位,没有实际意义
        continue不执行接下来的语句,再跳到判断上
        break直接退出
    • for循环

      • for x in langs:
        (langs可以为list tuple dict str等任意支持迭代器的对象)
        (这个x呢,是一般变量,系统自动定义,如果说langs是个dict,x指代key)
      • break、continue也可以使用

  • range函数:
    • range() 产生的是一个迭代器
    • list(range(5))变成list
    • 迭代器特点:懒加载,用一次产生一个数,需要的时候才产生。节省空间,消耗时间。
    • ()一个参数x:0 1 2…x-1
      ()两个参数x,y:x x+1 …y-1(分别start stop)
      ()三个参数x,y,z:分别 start stop step
    • 与numpy.arrang区别:
      • range()返回的是range object;而np.arange()返回的是numpy.ndarray()。
      • range只可用于迭代,而numpy.arange作用远不止于此,它是一个序列,可被当做向量使用。
      • 两者都有三个参数,以第一个参数为起点,第三个参数为步长。[first,end,step)。range()不支持步长为小数,np.arange()支持步长为小数。

  • 函数:
    • 定义:
      def funcname(argument/arg) :
      pass
    • 函数返回值:这个也可以不要有
      return
      不带参数、不写return、return None都是返回None
    • 参数传递:值传递、引用传递
      • 值传递:
        要是参数是int、、float、bool、complex、str、tuple在函数里面改变这个值,并不会影响函数外的值。
      • 引用传递:
        如果参数是list、dict、object,在函数里面修改则影响外面的值。
    • 函数嵌套函数、闭包closure(函数里面包含函数)
    • 函数可以作为参数传递,在return之后
    • 函数作为参数传递:

    def add(a,b) : return a +b
    def test(a,b,func)
      v = func(a,b)
      return v

    c = test(10,20,add)
    #输出30
    print ( c )

    • 函数作用域:
      局部作用域local
      闭包函数外的作用域enclosing
      全局作用域global
      内建作用域built-in(系统自带,一般前后有_)
      查找以LEGB的顺序去查找
      • 定义在if、for、while里面变量也是全局变量
        在函数def里定义的变量是局部变量
        函数内部可以访问全局变量a,但是只能使用不能修改。要想函数里面修改,在使用前用global a
        in all:要想修改自己返回之外的变量,if全局,用global a
           不是全局,用nonlocal a 申明
      • 只有模块(module)、类(class)、函数(def、lambda)才会引入新的作用域

  • python完全是面向对象的编程语言
    • 面向对象三大特征:封装、继承、多态
    • 在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/BugOverseas/article/details/82563258