
Python
文章平均质量分 62
Daniel2333
浙大15级计算机专业硕士研究生
展开
-
Ananconda + Jupyter 无法导入已经安装的包
问题描述Ubuntu14.04. 在Anaconda环境中安装好了opencv, 然后在Jupyter中import cv2提示找不到包。Jupyter是在anaconda之外安装的。解决办法在conda环境里安装jupyter:conda install jupyter然后指明路径执行jupyter:PATH_TO_ENV_BIN/jupyter notebook例如:~/anaconda3/e原创 2017-11-14 14:32:01 · 10991 阅读 · 1 评论 -
Fluent Python读后感
2017.10.7 断断续续地, 花了应该有个把月读完Fluent Python. 当然, 并非真正读完. Chapter 16 coroutine, Chapter 17, 18 Concurrency with futures/asyncio 这三章没来得及读. 原因是读到这几章时国庆假期已经快结束了, 相比于这三章, 后面的章节更有吸引力, 所以跳过了它们. 跳过就跳过吧. 读书的过程中原创 2017-10-07 16:47:26 · 5089 阅读 · 1 评论 -
Python descriptor
从attribute到property, 现在又出现了descriptor. 刚读到Fluent Python里的这一章(Chapter 20)时, 内心阴影面积着实很大, 要理清它们的关系确实不那么容易.什么是descriptor?一种协议, 协议方法有仨: __get__, __set__, __delete__. 如果一个class实现了其中一个或多个, 那这个class就是一个descri原创 2017-10-07 11:10:30 · 560 阅读 · 0 评论 -
Python class的__new__与__init__方法
通常我们按照Java或C++里的习惯, 称__init__方法为构造器方法, 其实这种说法并不准确, 因为类的实例在调用__init__方法之前已经在__new__方法里创建了. 所以说, 真正的构造器方法应该是__new__, 而__init__只是完成构造以外的初始化操作. 用Fluent Python里的伪代码描述实例的构造过程: 具体描述为: 先调用the_class.__new__(原创 2017-10-06 17:05:09 · 1404 阅读 · 0 评论 -
Python里的instance method, classmethod与staticmethod
在Python里, 在class里定义的方法可以大致分为三类: 实例方法, 类方法与静态方法. 用一个表格总结如下: 方法类型 修饰 调用者 默认首参 实例方法 无 instance self 类方法 @classmethod cls, instance cls 静态方法 @staticmethod cls, instance 无示例原创 2017-10-06 16:07:11 · 3816 阅读 · 0 评论 -
(Python)从attribute到property
字面意思上的区别attribute与property, 都可翻译成属性. 无论是在中文还是英文中, 它们的意思都几乎一样, 但还是有些许差别. Google了好几下, 找到了一个看起来比较靠谱的解释: According to Webster, a property is a characteristic that belongs to a thing’s essential nature an原创 2017-10-06 10:47:31 · 5731 阅读 · 1 评论 -
Python中的with语法与上下文管理器
with的作用with语法在Python里很常见, 主要的利好是使用代码更简洁. 常见的使用场景有:资源对象的获取与释放. 使用with可以简化try... finally ...在修改函数代码的前提下设置函数的默认参数简化try... finally ...例如, 打开一个文件. 在使用读写前, 要打开它;在读写结束后要手动释放它;读写过程中出现异常也得释放它. 如果不使用with, 就得原创 2017-10-04 17:22:45 · 1910 阅读 · 1 评论 -
Python的生成器表达式与生成器函数
有一种特殊的迭代器, 叫做生成器. 生成器有两种, 生成器表达式与生成器函数.生成器表达式生成器表达式与列表推导在语法上十分相似: * 列表推导使用[]: [i for i in arr] * 生成器表达式使用(): (i for i in arr)但是它们有着本质的不同: 列表推导在被创建时会为每个元素分配内存空间, 最后得到的是一个正常完整的list对象. 而生成器表达式在被创建时并不会为它原创 2017-10-04 10:33:32 · 2111 阅读 · 0 评论 -
Python的iterable与iterator
以for ... in ...为核心的迭代语法是Python的常用语法之一. iterable, 可迭代;iterator, 迭代器. 它们之间虽关系密切但不是同一个概念.什么对象才是可迭代的?并不是每个对象都是可迭代的. 对不可迭代的对象应用迭代语法会报错.class NotIterable(object): passnot_iterable = NotIterable()for i原创 2017-10-01 20:44:24 · 1432 阅读 · 0 评论 -
Python的列表推导
什么是列表推导大部分使用Python的人都用过它, 但却不知道它的名字. 列表推导, List Comprehension, 是Python的特色语法, 用于根据已有的可迭代对象生成一个新的list. 例如, 在以下示例中, 根据a生成b, 用for循环可以这么写:\a = range(10)b = []for i in a: b.append(i)用列表推导则是这么写:a = ra原创 2017-10-01 18:27:48 · 463 阅读 · 0 评论 -
Python的方法解析顺序(MRO)
方法解析顺序, Method Resolution Order从一段代码开始考虑下面的情况:class A(object): def foo(self): print('A.foo()')class B(object): def foo(self): print('B.foo()')class C(B, A): passc = C()c.fo原创 2017-09-26 21:57:11 · 4314 阅读 · 0 评论 -
Python中的接口
接口(interface)接口, (按照我自己的理解)最接地气的定义是: 实体向外暴露的公共可访问方法与属性. 这个实体可以是Class, Object, Software, 等任意可以看作一个整体的东西. 外界通过它们的interface与它们进行交互. 按照Wikipedia的说法, 接口与协议(Protocol)是同义词, 因为接口在定义交互方式的同时肯定也定义了交互时的通信内容, 格原创 2017-09-26 20:18:47 · 7099 阅读 · 2 评论 -
Python对象的属性访问过程
只想回答一个问题: 当编译器要读取obj.field时, 发生了什么? 一个简单的属性访问, 其实过程还蛮曲折的. 总共有以下几个step: 1. 如果obj instance 本身有这个属性, 返回. 如果没有, 执行 step 2. 2. 如果obj class 有这个属性, 返回. 如果没有, 执行step 3. 3. 如果在obj class 的父类有这个属性, 返回. 如果没有,原创 2017-09-24 16:53:51 · 1583 阅读 · 0 评论 -
Python 定义只读属性
Python是面向对象(OOP)的语言, 而且在OOP这条路上比Java走得更彻底, 因为在Python里, 一切皆对象, 包括int, float等基本数据类型. 在Java里, 若要为一个类定义只读的属性, 只需要将目标属性用private修饰, 然后只提供getter()而不提供setter(). 但Python没有private关键字, 如何定义只读属性呢? 有两种方法, 第一种跟J原创 2017-09-24 15:45:56 · 12714 阅读 · 1 评论 -
Python 定义私有属性
Python没有类似于Java中的private关键字, 但也可以为类定义私有属性: 将属性命名为: __field.class Vector2D(object): def __init__(self, x, y): self.__x = float(x) self.__y = float(y) self.xx = x self原创 2017-09-23 20:58:30 · 5293 阅读 · 0 评论 -
Python str.format
Python不仅支持C风格字符串格式化, 还支持利用format方法来格式化字符串. format方法通过占位符{}来指定参数及参数格式.指定参数通过位置指定参数位置索引从0开始可以省略数字print('{} + {} = 5'.format(2, 3))print('{0} + {1} = 5'.format(2, 3))输出:2 + 3 = 52 + 3 = 5通过名字指定参数prin原创 2017-09-23 18:34:48 · 989 阅读 · 0 评论 -
Python与函数重载
函数重载是OOP的基本特性之一, 名字相同但参数类型或个数不同时执行不同的函数. 但因为Python是弱类型语言(不需要声明变量类型), 所以它不支持通过参数类型来支持重载. 这是Python在3之前的不足之处. 3.4之后, Python也提供重载机制: 转发(Dispatch).singledispatch#!/usr/bin/python3from functools import singl原创 2017-09-21 15:53:38 · 6863 阅读 · 0 评论 -
Python中的修饰器
Decorator有种设计模式叫修饰器模式, 它可以在不修改目标函数代码的前提下, 在目标函数执行前后增加一些额外功能. 例如:def dec(fn): print('hello, I am a decorator') return fn@decdef fn1(a): print('hello, I am in fn1(%r)'%(a))@decdef fn2(a):原创 2017-09-21 14:54:39 · 11547 阅读 · 0 评论 -
Python 的闭包
什么是闭包?闭包, 英文为closure. 首先, 闭包是一种特殊的函数. 特殊之处在于它包含了非本地也非全局的变量. outer_var = [] def inner_fn(val): outer_var.append(val) return sum(outer_var) * 1.0 / len(outer_var) return inn原创 2017-09-21 13:25:45 · 253 阅读 · 0 评论 -
python实现swap功能的简洁性
没有什么新的技术或观点,只是想从swap功能的实现体会一下python的方便, 小小的高兴一下。 swap在这里的意思是交换两个变量的值。 在之前使用Java,JS,CPP时,实现这个功能的一般性代码需要定义一个临时变量:# swap the value of a and b.t = a;a = b;b = t;当然在Python里也能这么写, 但却有一种更方便的方式,一行代码就能解决原创 2017-06-14 09:41:18 · 1613 阅读 · 0 评论 -
命令行运行Python脚本时传入参数的三种方式
三种常用的方式如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式。python script.py 0,1,2 10python script.py -gpus=0,1,2 --batch-size=10python script.py -gpus=0,1,2 --batch_size=10这三种格式对应不同的参数解析方式,分别为sys.arg原创 2017-06-06 20:28:12 · 197659 阅读 · 8 评论 -
Python NaN
NaN, Not a Number, 非数. 它即不是无穷大, 也不是无穷小, 而是python/numpy/… 觉得无法计算时返回的一个符号(自己的推测, 未考证(TODO)). import numpy as np无穷大减无穷大会导致NaNa = np.inftyprint a - ananprint a * a, a * a - ainf n原创 2017-06-05 15:09:05 · 4244 阅读 · 0 评论 -
Python 2.7与Python3 的print有什么区别?
总地来说, Python2.7的print不是一个function,而Python3里的print是一个function。 两都调用方式的主要区别如下:print 'this is a string' #python2.7print('this is a string') #python3当然,python2.7里你也可以用括号把变量括起来, 一点都不会错:print('this is a st原创 2017-05-11 16:58:21 · 33204 阅读 · 1 评论 -
Python中的引用比较、值比较与对象池
主要内容:Python里的值比较用==,引用比较用isPython与Java一样,都有对象池Python是一种很彻底的面向对象的语言为会要说彻底呢? 因为是与Java相比。 Java虽说也是OOP的,但还保留了基本数据类型:int, long, double, float, etc.。而在Python里,所有的变量都是以对象形式存在。a = 1;print(isinstance(a,obje原创 2017-05-11 16:29:47 · 3346 阅读 · 3 评论 -
Python str.split方法
str.split(sep = None)可用于分割字符串不传入sep参数时以str里的所有空字符为分割符将str分割,特点是: * 空字符包括: 空格,\n, \r\n, \t, \r * 连续多个空字符被当作一个分割符 * 字符串开头和末尾处的空字符会被trim掉 返回一个不包含空字符串的字符串listprint ('\t a b\r c\r\n '.spl原创 2017-05-09 12:18:51 · 3713 阅读 · 0 评论 -
python __all__的用法
语法本质就是一个string list。 example from https://github.com/balancap/SSD-Tensorflow/blob/master/deployment/model_deploy.py#L111__all__ = ['create_clones', 'deploy', 'optimize_clones',原创 2017-05-08 10:28:56 · 1206 阅读 · 0 评论 -
Python Basic Examples
仅供个人笔记用,记录查询过的代码片断和一些语法,不成系统。随遇随加,为方便修改才置顶。<hr>原创 2017-05-06 16:17:34 · 413 阅读 · 0 评论