python学习随笔

作者: 风尘浅笑 | 来源:发表于2021-01-12 16:03 被阅读0次

    记录一下循环和break,continue

    循环中条件判断和中止/跳出一定要注意缩进  

    num = 0

    sum = 0

    while True:   

        if num >1000:       

        break;   

        if num %2 != 0:       

            num = num+1     

            continue   

        sum += num

        num = num+1

    print(sum)

    元组 和list都是有序集合 不同的是元组的元素是不可变的 而且不能添加数据  因此比list运行速度快

    元组是用小括号 (0,1,2,...) list是中括号[0,1,2,....]

    count(i)方法用来统计元组中i元素出现的次数  如果i不存在 返回0

    index(i)方法用来查找元组中元素i首次出现的索引  如果i不存在 会报错

    元组中只有一个元素时 在元素后加逗号 (1,)否则会把括号识别为优先运算符

    注:元组本身的元素是不可变的 但是如果元组里包含容器  那么容器里的元素是可变的  仅仅元组中的容器元素不可变

    type(i)可以用来查询i的数据类型  isinstance(i,type)可以用来判断i是否属于type类型

    这两个的区别:type检查类型不会认为子类型是父类型的一种,isinstance(i,type)则会把子类型当做父类型判断

    is 近似于 == .不同的是is会判断内存  而 == 则只比较内容  例如

    a = "123"

    b = "123"

    这两个是不同的对象占用不同的内存空间  但是值一样 

    a is b  false   

    a == b  true

    python主要的检查是否为空写法

    a is None或者a is not None

    在python比较变量和检查为空建议使用is

    dict 类似json 以key:value方式存放数据

    set 无序不重复集合  元素区分大小写  添加add() 添加集合update() 删除元素remove()注:删除的元素如果不存在会报错

    discard() 删除元素  并且元素不存在的话也不会报错

    函数(待补充)

    类 class

    类属性  属于类的属性  所有实例都可访问  也可以通过类名访问   但只能通过类修改 不能通过实例修改

    实例属性   属于类的实例的属性   

    和java大体类似  类属性可以理解为类的静态变量可以通过类名访问 

    构造方法 __init__(self,args1,args2) self基本是固定写法 类似于java的this 其余属性也需要self.a1=a1赋值

    私有属性  用两个下划线开头的变量 无法通过外部(类名,实例)访问  为了类中的属性不被修改  

    可以通过定义函数来访问  类似于java的get和set方法

    类中的函数第一个参数永远都是self ,但是在外部调用的话无需显式传入

    类中的函数都是实例函数  如果要定义类函数(类似于java中的静态方法 可以直接使用类名来调用)

    则需要在函数添加@classmethod注解  类方法的第一个参数是类本身cls 外部调用也不用显式传入

    面向对象思想

    继承  和java的单继承不同 python可以同时继承多个类  用来组合一些通用的功能  

             子类的init方法中如果需要赋值 需要调用父类的构造方法super(子类, self).__init__(args1, args2...)来给父类的参数赋值

    多态  和java相同  子类和父类都有的方法会会优先找子类的实现

    可以通过isinstance(i,type)方法来判断i是否为type类型 假设i是type的子类  那么也会返回true

    也可以通过type(i)来获取i实例的类型

    可以用dir(i)方法 获取i 的类的所有变量和方法  一些下划线开始和结束的变量是系统内置方法

    可以使用getattr(i,name)获取i实例的name属性的值  setattr(i,name,value)可以对i实例的name属性赋值value

    getattr如果i没有name这个属性的话会报错 可以使用getattr(i,name,default)获取  如果name属性不存在 那么就返回默认值default

    类的特殊方法(python内置函数)

    双下划线开始 双下划线结束的 就是内置函数  

    __str__() 和 __repr__() 类似于java的toString方法  重写以便打印自己想要的东西  str()调用的是__str__,而直接打印变量调用的是__repr__

    __len__() 类似于java的length方法  获取值的长度或者个数

    class fib:

        def __init__(self,num):

            self.count = []

            a = 0

            b = 1

            self.num = num

            for i in range(num):

                self.count.append(a)

                a,b = b,a+b

        def __len__(self):

            return self.num

        def __str__(self):

            return str(self.count)

    print(fib(10))

    print(len(fib(10)))

    重写str和len函数的示例

    __slots__方法可以限制外部动态添加属性

    __slots__ = ('arg1', 'arg2', 'arg3') 这样外部对象只能添加或修改这3个属性  无法增加新的属性

    __call__方法 可以使一个类当做函数调用   例如一个类实现了call方法并且需要1个参数args  那么在外部可以直接类名(args)这样调用

    模块

    导入模块 import 模块名  类似于java中的导包 还可以使用from 模块名 import x 来导入模块内的部分函数或属性

    还可以使用from 模块名 import * 来导入模块内的所有内容  这样调用就无需加模块名 但是有可能会和本模块中同名的函数冲突

    这种情况有两个解决办法 一种是直接导入模块  二是对导入的方法重命名 例如 from math import pi as pi2这样可以使用pi2调用math模块的pi方法

    函数式编程

    高阶函数  可以把一个函数当做参数传入  支持匿名函数  支持返回函数(闭包)

    例如 def add(a,b,f):

               return f(a)+f(b)

    就是把函数当做变量 可以传递

    map(f,list)函数可以传入一个函数参数f和一个list参数  并且对list的每个元素执行f函数  返回执行后的list

    reduce(f,list)函数也是传入一个函数参数f和一个list函数  但是传入的函数f需要有两个参数  从list前两个元素开始执行函数f 然后把执行结果依次和list的后面的每个元素执行f函数  当没有元素后返回总的结果 

    filter(f,list)函数传入一个函数参数f和一个list 并且根据每个元素执行f的结果(true或false)最终整理成一个新的list返回  适合于过滤list中不符合标准的元素

    sorted()函数可以用来排序 也可以指定参数key=f传入f参数用来指定排序的规则 例如list中包含了别的类型的容器 元组 则可以指定f参数中返回对元组某个位置的结果用来排序 也可以指定reverse = True参数来倒序排列

    函数也可以在内部定义函数 并且把内部函数返回  返回内部函数不能带小括号  在内部函数中引用了外部函数的变量  这种情况不要使用循环变量  或者后续会改变的变量  

    匿名函数  可以直接在函数的参数值写入  无需在外部定义函数  写法lambda x: x*x  冒号前为匿名函数的参数    匿名函数只能有一个表达式  并且不需要return  表达式的值会自动返回  例如sorted(l,key=lambda s:s.lower()) 这个匿名函数会把l里的每个元素转化为小写在进行排序

    decorator

    decorator类似java的装饰器模式 接收一个函数参数f 并返回一个新的函数   可以使用@注解来标注装饰器函数

    这个链接讲的很详细 包括内嵌函数 传值等 Python Decorator 

    偏函数 functools.partial() 有的函数有很多参数 偏函数可以用来为函数指定默认值

    例如 int2 = functools.partial(int,base=2)   传入int()函数不带小括号   这样我们调用int2函数会自动按照2进制转换

    相关文章

      网友评论

        本文标题:python学习随笔

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