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进制转换

相关文章

  • Qtreewidget

    样例源码PyQt(Python+Qt)学习随笔:树型部件的QTreeWidget的itemAbove、itemBe...

  • python多线程的初步探索(从Queue探索)

    前言 自学了快4天的python。有些东西还是需要自己记录一下,故此写下该随笔。 在学习python的时候,编写多...

  • Python学习随笔

    本笔记整理自中谷教育在线教育视频 学习笔记——正则表达式常用符号 这里学习过正则表达式后,简单做了一个爬虫程序,效...

  • Python学习随笔

    这是我滴=第三次重新开始学习python,由于性格和自我约束力极差。导...

  • python学习随笔

    Python同其他语言一样,数据类型包括,整数,浮点数,字符串。 整数Python可以处理任意大小的整数,当然包括...

  • Python学习随笔

    断断续续自学了python也挺久了,都是学了忘,忘了学,在地铁上就想着找个地方记录下学的东西,免得以后又要从头学,...

  • python学习随笔

    记录一下循环和break,continue 循环中条件判断和中止/跳出一定要注意缩进 num = 0sum = 0...

  • python 总结

    python 随笔 关键字 基础 内建函数 技巧 模块 进阶

  • python学习笔记目录

    Python学习笔记目录(倒序) Python学习-异常 Python学习-面向对象 Python学习-文件系统 ...

  • python学习札记

    随笔记 python中,注释语句用【alt+3】,反注释用【alt+4】 python中的几个词汇ClassIns...

网友评论

    本文标题:python学习随笔

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