Python学习
taxuewuhenxiaoer
留给自己的笔记
展开
-
torch.nn.Conv3d()
3D 卷积原创 2022-11-01 19:19:45 · 462 阅读 · 0 评论 -
python多行注释
python 多行注释 + 取消注释 :ctrl +’/’原创 2019-12-02 10:53:02 · 122 阅读 · 0 评论 -
Python模块——安装第三方模块
在Python中,安装第三方模块,是通过包管理工具pip完成的。如果你正在使用Mac或Linux,安装pip本身这个步骤就可以跳过了。如果你正在使用Windows,请参考安装Python一节的内容,确保安装时勾选了pip和Add python.exe to Path。在命令提示符窗口下尝试运行pip,如果Windows提示未找到命令,可以重新运行安装程序添加pip。注意:Mac或Linux...转载 2019-06-12 13:50:03 · 172 阅读 · 0 评论 -
Python模块——使用模块
使用模块Python本身就内置了很多非常有用的模块,只要安装完毕,这些模块就可以立刻使用。我们以内建的sys模块为例,编写一个hello的模块:#!/usr/bin/env python3# -*- coding: utf-8 -*-' a test module '__author__ = 'Michael Liao'import sysdef test(): a...转载 2019-06-10 21:36:25 · 121 阅读 · 0 评论 -
Python模块
模块在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module)。使用模块有什么好处?最大的好处是大大提高了代码的可维护性。其次,编写代码不必从零开始。当...转载 2019-06-10 20:48:14 · 95 阅读 · 0 评论 -
Python函数式编程——偏函数
偏函数Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。要注意,这里的偏函数和数学意义上的偏函数不一样。在介绍函数参数的时候,我们讲到,通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。举例如下:int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换:>>>...转载 2019-06-10 20:16:26 · 193 阅读 · 0 评论 -
Python面向对象编程——获取对象信息
获取对象信息当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?使用type()首先,我们来判断对象类型,使用type()函数:基本类型都可以用type()判断:>>> type(123)<class 'int'>>>> type('str')<class 'str'>>>> type...转载 2019-06-15 22:10:10 · 143 阅读 · 0 评论 -
Python面向对象编程——继承和多态
继承和多态在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class)。比如,我们已经编写了一个名为Animal的class,有一个run()方法可以直接打印:class Animal(object): def run(self)...转载 2019-06-13 11:25:24 · 138 阅读 · 0 评论 -
Python面向对象编程——访问限制
访问限制在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑。但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的name、score属性:>>> bart = Student('Bart Simpson', 59)>>> bart.score59>>...转载 2019-06-12 16:45:13 · 103 阅读 · 0 评论 -
Python面向对象编程——类和实例
类和实例面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同。仍以Student类为例,在Python中,定义类是通过class关键字:class Student(object): pass==class后面紧接着是类名,即St...转载 2019-06-12 15:40:01 · 485 阅读 · 0 评论 -
Python面向对象高级编程——使用_slots_
使用__slots__class Student(object): pass然后,尝试给实例绑定一个属性:>>> s = Student()>>> s.name = 'Michael' # 动态给实例绑定一个属性>>> print(s.name)Michael还可以尝试给实例绑定一个方法:>>> d...转载 2019-07-08 10:12:30 · 107 阅读 · 0 评论 -
Python面向对象高级编程——使用@property
使用@property在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改:s = Student()s.score = 9999这显然不合逻辑。为了限制score的范围,可以通过一个set_score()方法来设置成绩,再通过一个get_score()来获取成绩,这样,在set_score()方法里,就可以检查参数:class Stu...转载 2019-07-08 17:13:50 · 143 阅读 · 0 评论 -
Python错误、调试和测试——错误处理
错误处理在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错:def foo(): ...转载 2019-07-27 18:11:54 · 130 阅读 · 0 评论 -
python错误、调试和测试
错误、调试和测试在程序运行过程中,总会遇到各种各样的错误。有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误我们通常称之为bug,bug是必须修复的。有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者...转载 2019-07-26 21:10:19 · 71 阅读 · 0 评论 -
python面向对象高级编程——使用元类
使用元类type()动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。比方说我们要定义一个Hello的class,就写一个hello.py模块:class Hello(object): def hello(self, name='world'): print('Hello, %s.' % name)当Python解释器载入...转载 2019-07-25 17:55:14 · 152 阅读 · 0 评论 -
python使用对象高级编程——使用枚举类
使用枚举类当我们需要定义常量时,一个办法是用大写变量通过整数来定义,例如月份:JAN = 1FEB = 2MAR = 3...NOV = 11DEC = 12好处是简单,缺点是类型是int,并且仍然是变量。更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功能:from enum import...转载 2019-07-25 16:51:08 · 346 阅读 · 0 评论 -
Python面向对象高级编程——定制类
定制类看到类似__slots__这种形如__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。__slots__我们已经知道怎么用了,len()方法我们也知道是为了能让class作用于len()函数。除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类。str我们先定义一个Student类,打印一个实例:>>> c...转载 2019-07-18 17:36:08 · 88 阅读 · 0 评论 -
Python面向对象编程——实例属性和类属性
实例属性和类属性简介简介由于Python是动态语言,根据类创建的实例可以任意绑定属性。给实例绑定属性的方法是通过实例变量,或者通过self变量:class Student(object): def __init__(self, name): self.name = names = Student('Bob')s.score = 90但是,如果Student...转载 2019-07-07 10:42:31 · 145 阅读 · 0 评论 -
Python面向对象高级编程——多重继承
多重继承继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能。回忆一下Animal类层次的设计,假设我们要实现以下4种动物:Dog - 狗狗;Bat - 蝙蝠;Parrot - 鹦鹉;Ostrich - 鸵鸟。如果按照哺乳动物和鸟类归类,我们可以设计出这样的类的层次:但是如果按照“能跑”和“能飞”来归类,我们就应该设计出这样的类的层次:如果要把上面的...转载 2019-07-08 17:50:44 · 161 阅读 · 0 评论 -
Python面向对象编程
面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行。为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度。而面向对象的程序设计把计算机程序视为一组对象的集合...转载 2019-06-12 14:46:13 · 71 阅读 · 0 评论 -
函数式编程——高阶函数——filter
Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。例如,在一个list中,删掉偶数,只保留奇数,可以这么写:def is_odd(n): return n % 2 == 1list(fil...转载 2019-05-07 21:48:21 · 308 阅读 · 0 评论 -
函数式编程——高阶函数——map/reduce
感觉不是很好理解,记下来,慢慢消化。Python内建了map()和reduce()函数。如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Processing on Large Clusters”,你就能大概明白map/reduce的概念。我们先看map。map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用...转载 2019-04-26 21:00:19 · 299 阅读 · 0 评论 -
函数式编程——高阶函数
高阶函数英文叫Higher-order function。什么是高阶函数?我们以实际代码为例子,一步一步深入概念。1)变量可以指向函数以Python内置的求绝对值的函数abs()为例,调用该函数用以下代码:>>> abs(-10)10但是,如果只写abs呢?>>> abs<built-in function abs>可见,abs(...转载 2019-04-26 10:45:24 · 356 阅读 · 0 评论 -
Python函数式编程
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。而函数式编程(请注意多了一个“式”字)——Functional Programming,虽然也可以归结到面向过程的程序设计,但其思想更接近数学计算。我们首先要搞明白计算机(Computer)和计算...转载 2019-04-26 09:57:17 · 81 阅读 · 0 评论 -
Python基础——dict和set
dictPython内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。举个例子,假设要根据同学的名字查找对应的成绩,如果用list实现,需要两个list:names=['Michael','Bob','Tracy']scores=[95,75,85]给定一个名字,要查找对应的成绩,就先要在n...转载 2019-04-21 20:49:40 · 126 阅读 · 0 评论 -
Python高级特性——迭代器
我们已经知道,可以直接作用于for循环的数据类型有以下几种:一类是集合数据类型,如list、tuple、dict、set、str等;一类是generator,包括生成器和带yield的generator function。这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。可以使用isinstance()判断一个对象是否是Iterable对象:>>>f...转载 2019-04-25 19:49:56 · 73 阅读 · 0 评论 -
Python基础——循环
Python的循环有两种,一种是for…in循环,依次把list或tuple中的每个元素迭代出来,看例子:names=['Michael','Bob','Tracy'] for name in names: print(name)执行这段代码,会依次打印names的每一个元素:MichaelBobTracy所以for x in …循环就是把每个元素代入变量x,然后执行缩进块的语句。...转载 2019-04-21 11:40:45 · 141 阅读 · 0 评论 -
Python基础数据类型和变量
数据类型计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值。但是,计算机能处理的远不止数值,还可以处理文本、图形、音频、视频、网页等各种各样的数据,不同的数据,需要定义不同的数据类型。在Python中,能够直接处理的数据类型有以下几种:整数Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080...转载 2019-04-12 22:13:19 · 136 阅读 · 0 评论 -
Python 文本编辑器
在Python的交互式命令行写程序,好处是一下就能得到结果,坏处是没法保存,下次还想运行的时候,还得再敲一遍。所以,实际开发的时候,我们总是使用一个文本编辑器来写代码,写完了,保存为一个文件,这样,程序就可以反复运行了。现在,我们就把上次的’hello, world’程序用文本编辑器写出来,保存下来。那么问题来了:文本编辑器到底哪家强?推荐两款文本编辑器:一个是Sublime Text,...原创 2019-04-12 16:54:12 · 11997 阅读 · 0 评论 -
Python函数——参数
函数的参数定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代...转载 2019-04-22 21:19:10 · 134 阅读 · 0 评论 -
Python函数——递归函数
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。举个例子,我们来计算阶乘n! = 1 x 2 x 3 x … x n,用函数fact(n)表示,可以看出:fact(n) = n! = 1 x 2 x 3 x … x (n-1) x n = (n-1)! x n = fact(n-1) x n所以,fact(n)可以表示为n x fact(n-1),只有n=...转载 2019-04-23 10:15:32 · 217 阅读 · 0 评论 -
Python高级特性
这节比较简单,没太多实质性内容,就是想介绍为什么引入Python的高级特性。掌握了Python的数据类型、语句和函数,基本上就可以编写出很多有用的程序了。比如构造一个1, 3, 5, 7, …, 99的列表,可以通过循环实现:L = []n = 1while n <= 99: L.append(n) n = n + 2取list的前一半的元素,也可以通过循环实现...转载 2019-04-23 11:18:27 · 110 阅读 · 0 评论 -
Python函数式编程——装饰器
装饰器本节理解有点难度由于函数也是一个对象,而且函数对象可以被赋值给变量,所以,通过变量也能调用该函数。>>> def now():... print('2015-3-25')...>>> f = now>>> f()2015-3-25函数对象有一个__name__属性,可以拿到函数的名字:>>>...转载 2019-05-13 21:27:49 · 88 阅读 · 0 评论 -
Python函数式编程——匿名函数
匿名函数当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便。在Python中,对匿名函数提供了有限支持。还是以map()函数为例,计算f(x)=x2时,除了定义一个f(x)的函数外,还可以直接传入匿名函数:>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))[1, 4, 9, 16,...转载 2019-05-08 21:58:34 · 251 阅读 · 0 评论 -
Python函数式编程——返回函数
返回函数函数作为返回值高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。我们来实现一个可变参数的求和。通常情况下,求和的函数是这样定义的:def calc_sum(*args): ax = 0 for n in args: ax = ax + n return ax但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?...转载 2019-05-08 21:43:47 · 127 阅读 · 0 评论 -
函数式编程——高阶函数——sorted
这节内容很简单,感受下高级语言的简洁之处。sorted排序算法排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。Python内置的sorted()函数就可以对list进行排序:>>> sort...转载 2019-05-08 11:39:33 · 127 阅读 · 0 评论 -
Python高级特性——生成器
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循...转载 2019-04-25 15:30:47 · 113 阅读 · 0 评论 -
Python 高级特性——列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用list(range(1, 11)):>>>list(range(1,11))[1,2,3,4,5,6,7,8,9,10]但如果要生成[1x1, 2x2, 3x...转载 2019-04-23 20:27:24 · 90 阅读 · 0 评论 -
Python高级特性——迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。在Python中,迭代是通过for … in来完成的,而很多语言比如C语言,迭代list是通过下标完成的,比如Java代码:for (i=0; i<list.length; i++) { n = list[i];}可以看出,Python的for...转载 2019-04-23 18:58:13 · 145 阅读 · 0 评论 -
Python高级特性——切片
取一个list或tuple的部分元素是非常常见的操作。比如,一个list如下:>>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']取前3个元素,应该怎么做?笨办法:>>> [L[0], L[1], L[2]]['Michael', 'Sarah', 'Tracy']之所以是笨办法是因为扩展一下,...转载 2019-04-23 15:39:42 · 111 阅读 · 0 评论