首页
关于
Search
1
怎么快速从GitHub上下载代码
48 阅读
2
GitHub下载加速的有效方法
39 阅读
3
Python中的center()是怎么用的
35 阅读
4
如何在GitHub上下载旧版本
34 阅读
5
怎样删除GitHub存储库
32 阅读
Python
Github
IDC推荐
登录
Search
Xbe
累计撰写
242
篇文章
累计收到
1
条评论
首页
栏目
Python
Github
IDC推荐
页面
关于
搜索到
76
篇与
的结果
2025-03-06
详解Python中的包和包管理工具
Python中的包包是一个分层次的文件目录结构,它定义了一个由模块及子包,和子包下的子包等组成的Python的应用环境。考虑一个在Phone目录下的pots.py文件。这个文件有如下源代码:#!/usr/bin/python # -*- coding: UTF-8 -*- def Pots(): print "I'm Pots Phone"同样地,我们有另外两个保存了不同函数的文件:Phone/Isdn.py 含有函数Isdn()Phone/G3.py 含有函数G3()现在,在Phone目录下创建file __init__.py:Phone/__init__.py当你导入Phone时,为了能够使用所有函数,你需要在__init__.py里使用显式的导入语句,如下:from Pots import Pots from Isdn import Isdn from G3 import G3当你把这些代码添加到__init__.py之后,导入Phone包的时候这些类就全都是可用的了。#!/usr/bin/python # -*- coding: UTF-8 -*- # 导入 Phone 包 import Phone Phone.Pots() Phone.Isdn() Phone.G3()以上实例输出结果:I'm Pots Phone I'm 3G Phone I'm ISDN Phone如上,为了举例,我们只在每个文件里放置了一个函数,但其实你可以放置许多函数。你也可以在这些文件里定义Python的类,然后为这些类建一个包。Python的包管理工具Distribute是对标准库disutils模块的增强,我们知道disutils主要是用来更加容易的打包和分发包,特别是对其他的包有依赖的包。Distribute被创建是因为Setuptools包不再维护了。安装Distribute可以通过distribute_setup.py 脚本来安装Distribute,也可以通过easy_install, pip,源文件来安装,不过使用distribute_setup.py来安装是最简单和受欢迎的方式$ curl -0 http://python-distribute.org/distribute_setup.py $ sudo python distribute_setup.pyPip 是安装python包的工具,提供了安装包,列出已经安装的包,升级包以及卸载包的功能。Pip 是对easy_install的取代,提供了和easy_install相同的查找包的功能,因此可以使用easy_install安装的包也同样可以使用pip进行安装。安装PipPip的安装可以通过源代码包,easy_install或者脚本。下面介绍一下各种安装方法:源代码方式:$ wget http://pypi.python.org/packages/source/p/pip/pip-0.7.2.tar.gz (替换为最新的包) $ tar xzf pip-0.7.2.tar.gz $ cd pip-0.7.2 $ python setup.py installeasy_install:$ easy_install pipget_pip.py 脚本:$ curl -0 https://raw.github.com/pypa/pip/master/contrib/get-pip.py $ sudo python get-pip.py下面来看一下Pip的使用安装package$ pip install Markdown列出安装的packages$ pip freeze安装特定版本的package通过使用==, >=, <=, >, <来指定一个版本号。$ pip install 'Markdown<2.0' $ pip install 'Markdown>2.0,<2.0.3'升级包升级包到当前最新的版本,可以使用-U 或者 --upgrade$ pip install -U Markdown卸载包$ pip uninstall Markdown查询包pip search "Markdown"PS -- 包安装后的py文件路径:/usr/local/lib/python2.7/dist-packages
2025年03月06日
3 阅读
0 评论
0 点赞
2025-03-06
Python代码中怎么读取键盘录入的值
读取键盘输入Python提供了两个内置函数从标准输入读入一行文本,默认的标准输入是键盘。如下:raw_inputinputraw_input函数raw_input([prompt]) 函数从标准输入读取一个行,并返回一个字符串(去掉结尾的换行符):#!/usr/bin/python str = raw_input("Enter your input: "); print "Received input is : ", str这将提示你输入任意字符串,然后在屏幕上显示相同的字符串。当我输入"Hello Python!",它的输出如下:Enter your input: Hello Python Received input is : Hello Pythoninput函数input([prompt]) 函数和raw_input([prompt]) 函数基本可以互换,但是input会假设你的输入是一个有效的Python表达式,并返回运算结果。#!/usr/bin/python str = input("Enter your input: "); print "Received input is : ", str这会产生如下的对应着输入的结果:Enter your input: [x*5 for x in range(2,10,2)] Recieved input is : [10, 20, 30, 40]
2025年03月06日
5 阅读
0 评论
0 点赞
2025-03-06
Python中怎么引入第三方模块
Python中怎么使用第三方模块?在Python可以在代码中导入模块,然后就可以使用第三方模块了。import 语句想使用Python源文件,只需在另一个源文件里执行import语句,语法如下:import module1[, module2[,... moduleN]当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块hello.py,需要把命令放在脚本的顶端:#!/usr/bin/python # -*- coding: UTF-8 -*- # 导入模块 import support # 现在可以调用模块里包含的函数了 support.print_func("Zara")以上实例输出结果:Hello : Zara一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。From…import 语句Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。语法如下:from modname import name1[, name2[, ... nameN]]例如,要导入模块fib的fibonacci函数,使用如下语句:from fib import fibonacci这个声明不会把整个fib模块导入到当前的命名空间中,它只会将fib里的fibonacci单个引入到执行这个声明的模块的全局符号表。From…import* 语句把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:from modname import *这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。
2025年03月06日
6 阅读
0 评论
0 点赞
2025-03-06
Python中自定义异常的使用举例
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg在你定义以上类后,你可以触发该异常,如下所示:try: raise Networkerror("Bad hostname") except Networkerror,e: print e.args在下面这个例子中,默认的__init__()异常已被我们重写。>>> class MyError(Exception): ... def __init__(self, value): ... self.value = value ... def __str__(self): ... return repr(self.value) ... >>> try: ... raise MyError(2*2) ... except MyError as e: ... print 'My exception occurred, value:', e.value ... My exception occurred, value: 4 >>> raise MyError, 'oops!' Traceback (most recent call last): File "<stdin>", line 1, in ? __main__.MyError: 'oops!'常见的做法是创建一个由该模块定义的异常基类和子类,创建特定的异常类不同的错误条件。我们通常定义的异常类,会让它比较简单,允许提取异常处理程序的错误信息,当创建一个异常模块的时候,常见的做法是创建一个由该模块定义的异常基类和子类,根据不同的错误条件,创建特定的异常类:class Error(Exception): """Base class for exceptions in this module.""" pass class InputError(Error): """Exception raised for errors in the input. Attributes: expression -- input expression in which the error occurred message -- explanation of the error """ def __init__(self, expression, message): self.expression = expression self.message = message class TransitionError(Error): """Raised when an operation attempts a state transition that's not allowed. Attributes: previous -- state at beginning of transition next -- attempted new state message -- explanation of why the specific transition is not allowed """ def __init__(self, previous, next, message): self.previous = previous self.next = next self.message = message
2025年03月06日
4 阅读
0 评论
0 点赞
2025-03-06
巧用Python字典处理索引统计
索引引擎的基本工作原理便是倒排索引, 即将一个文档所包含的文字反过来映射至文档; 这方面算法并没有太多花样可言, 为了增加效率, 索引数据尽可往内存里面搬。 而基本思路举个简单例子, 现在有以下文档 (分词已经完成) 以及其包含的关键词:doc_a: [word_w, word_x, word_y] doc_b: [word_x, word_z] doc_c: [word_y]将其变换为word_w -> [doc_a] word_x -> [doc_a, doc_b] word_y -> [doc_a, doc_c] word_z -> [doc_b]写成 Python 代码, 便是doc_a = {'id': 'a', 'words': ['word_w', 'word_x', 'word_y']} doc_b = {'id': 'b', 'words': ['word_x', 'word_z']} doc_c = {'id': 'c', 'words': ['word_y']} docs = [doc_a, doc_b, doc_c] indices = dict() for doc in docs: for word in doc['words']: if word not in indices: indices[word] = [] indices[word].append(doc['id']) print indices不过这里有个小技巧, 就是对于判断当前词是否已经在索引字典里的分支if word not in indices: indices[word] = []可以被 dict 的 setdefault(key, default=None) 接口替换. 此接口的作用是, 如果 key 在字典里, 那么好说, 拿出对应的值来; 否则, 新建此 key , 且设置默认对应值为 default . 但从设计上来说, 我不明白为何 default 有个默认值 None , 看起来并无多大意义, 如果确要使用此接口, 大体都会自带默认值吧, 如下for doc in docs: for word in doc['words']: indices. setdefault(word, []) .append(doc['id'])这样就省掉分支了, 代码看起来少很多.不过在某些情况下, setdefault 用起来并不顺手: 当 default 值构造很复杂时, 或产生 default 值有副作用时, 以及一个之后会说到的情况; 前两种情况一言以蔽之, 就是 setdefault 不适用于 default 需要惰性求值的场景. 换言之, 为了兼顾这种需求, setdefault 可能会设计成def setdefault(self, key, default_factory): if key not in self: self[key] = default_factory() return self[key]倘若真如此, 那么上面的代码应改成for doc in docs: for word in doc['words']: indices.setdefault(word, list ).append(doc['id'])不过实际上有其它替代方案, 这个最后会提到.如果说上面只是一个能预见但实际上可能根本不会遇到的 API 缺陷, 那么下面这个就略打脸了.考虑现在要进行词频统计, 即一个词在文章中出现了多少次, 如果直接拿 dict 来写, 大致是def word_count(words): count = dict() for word in words: count.setdefault(word, 0) += 1 return count print word_count(['hiiragi', 'kagami', 'hiiragi', 'tukasa', 'yosimizu', 'kagami'])当你兴致勃勃地跑起上面代码时, 代码会以迅雷不及掩脸之势把异常甩到你鼻尖上 --- 因为出现在 += 操作符左边的 count.setdefault(word, 0) 在 Python 中不是一个左值. 怎样, 现在开始念叨 C艹 类型体系的好了吧.因为 Python 把默认的字面常量 {} 等价于 dict() 就认为 dict 是银弹的思想是要不得的; Python 里面各种数据结构不少, 解决统计问题, 理想的方案是 collections.defaultdict 这个类. 下面的代码想必看一眼就明白from collections import defaultdict doc_a = {'id': 'a', 'words': ['word_w', 'word_x', 'word_y']} doc_b = {'id': 'b', 'words': ['word_x', 'word_z']} doc_c = {'id': 'c', 'words': ['word_y']} docs = [doc_a, doc_b, doc_c] indices = defaultdict(list) for doc in docs: for word in doc['words']: indices[word].append(doc['id']) print indices def word_count(words): count = defaultdict(int) for word in words: count[word] += 1 return count print word_count(['hiiragi', 'kagami', 'hiiragi', 'tukasa', 'yosimizu', 'kagami'])完满解决了之前遇到的那些破事.此外 collections 里还有个 Counter , 可以粗略认为它是 defaultdict(int) 的扩展.
2025年03月06日
8 阅读
0 评论
0 点赞
1
...
8
9
10
...
16