小编Chr*_*son的帖子

为什么Python将元组,列表,集合和字典视为根本不同的东西?

我喜欢Python的原因之一是由元组,列表,集合和字典提供的表达能力/减少编程工作.一旦你理解了列表理解和一些使用IN和FOR的基本模式,生活就会变得更好!Python摇滚.

但是我确实想知道为什么这些结构会被视为不同,以及随着时间的推移它会如何变化(变得陌生).回到Python 2.x,我本可以提出一个论点,它们只是基本集合类型的变体,并且有些令人恼火的是,一些非常外用例需要您将字典转换为列表并再次返回.(字典不仅仅是具有特定唯一性约束的元组列表吗?列表不是仅具有不同类型的唯一性约束的集合吗?).

现在在3.x世界中,它变得更加复杂.现在有名为元组 - 开始感觉更像是一个特例字典.现在有订单的词典 - 开始感觉更像是一个列表.我刚看到有序套装的配方.我可以想象一下这个......还有什么独特的清单等等.

Python的禅宗说"应该有一个 - 最好只有一个 - 明显的方式".在我看来,这种专门的集合类型的大量与这个Python规则相冲突.

硬核Pythonistas的想法是什么?

python collections language-design zen-of-python

23
推荐指数
2
解决办法
4487
查看次数

Python部署的最佳实践 - 多个版本,标准安装位置,打包工具等

关于这个问题的不同方面的许多帖子,但我没有看到一个将所有这些结合在一起的帖子.

首先是一个主观陈述:当我们移出解释器并开始解决部署问题时,我们在使用Python语言时遇到的简单性似乎就像是分段.如何在同一台机器上拥有多个版本的Python?应该在哪里安装包裹?Disutils vs. setuptools vs. pip等.在部署方面,似乎Python的Zen被滥用得非常糟糕.我对Windows上的"DLL地狱"体验感到怪异的回声.

专家们是否同意这些问题的某种程度的最佳实践?

你在同一台机器上运行多个版本的Python吗?你如何仍然相信,他们可以共存 - 和较新的版本不会破坏依赖于早期版本的其他进程的假设(由操作系统供应商提供的脚本,例如)?这样安全吗?virtualenv足够吗?

在本地文件系统上,Python环境的不同组件(包括第三方软件包)的位置的最佳选择是什么?对于可以依赖的许多不同版本的Unixy和Windows操作系统,位置之间是否存在严格或粗略的对应关系?

沼泽中最阴暗的角落 - 你使用什么安装工具(setuptools,distutils,pip等),并且它们适合您的选择:文件位置,Python虚拟环境,Python路径等.

这些听起来像是难题.我希望经验丰富的Pythonistas可能已经为这些挑战定义了一种规范的方法(或两种方法).任何"挂在一起"作为一个可以放心使用的系统的方法(感觉不像是单独的,不相关的工具)将是非常有帮助的.

python distutils pip virtualenv multiple-versions

19
推荐指数
2
解决办法
4821
查看次数

使用collections.defaultdict中的密钥

collections.defaultdict是很棒的.特别是与lambda:

>>> import collections
>>> a = collections.defaultdict(lambda : [None,None])
>>> a['foo']
[None, None]
Run Code Online (Sandbox Code Playgroud)

有没有办法'foo'在lambda中使用给定的键(例如)?例如(不起作用):

>>> a = collections.defaultdict(lambda : [None]*key)
>>> a[1]
[None]
>>> a[2]
[None, None]
>>> a
defaultdict(<function <lambda> at 0x02984170>, {1: [None], 2: [None, None]})
Run Code Online (Sandbox Code Playgroud)

python collections lambda defaultdict

15
推荐指数
1
解决办法
4321
查看次数

可以使用数据库无形地实现Python列表,集合或字典吗?

列表,集和词典的Python原生功能完全摇滚.当数据变得非常大时,有没有办法继续使用本机功能?我正在处理的问题涉及非常大的列表的匹配(交集).我还没有突破限制 - 实际上我并不知道限制是什么 - 并且不希望在数据按预期增长之后重新实现大的重复.

是否合理部署在谷歌应用引擎之类的东西上,宣传没有实际的规模限制并继续使用本机功能,而不是真的考虑这个?

是否存在一些Python魔法,可以隐藏列表,集合或字典是否在Python管理的内存中而不是数据库中 - 因此数据的物理部署可以与我在代码中的操作保持不同?

您是如何处理Python超级专家先生或女士,随着数据量的增长处理列表,设置和决策?

python database google-app-engine list volume

11
推荐指数
1
解决办法
344
查看次数

django add_to_class() 使模型继承/MRO 工作出错

通过 add_to_class() 添加字段时,我的模型继承存在问题。我有一个模型File(models.Model)Image(File)-这些来自Django的文件管理器。

在我的应用程序中,我正在导入它们并添加字段和方法:

def method_x(self):
    print "x"

File.add_to_class("expiration_date", models.DateField(null=True, blank=True))
File.add_to_class("method_x", method_x)
Run Code Online (Sandbox Code Playgroud)

Image 应该继承这两个,但它只获取方法,而不是字段:

>>> some_file = File.objects.get(id=8)
>>> some_image = Image.objects.get(id=8)
>>>
>>> print some_file.expiration_date # this works
... None
>>>
>>> some_image.metgod_x() # this works
>>> x
>>>
>>> print some_image.expiration_date # and this not
Traceback (most recent call last):
    File "<console>", line 1, in <module>
AttributeError: 'Image' object has no attribute 'expiration_date'
Run Code Online (Sandbox Code Playgroud)

有什么线索吗?

django inheritance method-resolution-order

6
推荐指数
1
解决办法
6033
查看次数

编码可以最大限度地减少误读/错误输入/错误提示?

假设您有一个系统,通过电子邮件或纸张可以在屏幕上准确地传达相当长的键值; 但是用户需要能够通过电话阅读,或者通过阅读并将其键入其他界面来准确地将密钥传回给您.

对键进行编码的"好"方法是什么,使阅读/听觉/打字简单准确?

这可以是发票号,文档ID,事务ID或一些其他抽象值.让我们说为了这个讨论,底层的键值是一个很大的数字,比如10的基数.

一些想法:

较短的键通常更好

  • 一个40位数的基数10值可能不适合给定的空间,并且很容易在中间丢失
  • 相同的值可以在基数16中以33-34位数表示
  • 相同的值可以用26位数的基数36表示
  • 相同的值可以用22-23位的基数64表示

不能在视觉上相互混淆的角色更好

  • 例如,包含O(oh)和0(零),或S(ess)和5(五)的编码可能是坏的
  • 此问题取决于用于显示密钥的字体/面,在某些情况下您可能能够控制(如在纸上打印)但在其他情况下无法控制(如网页和电子邮件).
  • 还取决于你是否可以控制上和/或小写的独占使用 - 例如,资本D(dee)可能看起来像O(哦)但是小写d(dee)不会; 小写l(ell)看起来像1(一),而大写L(ell)则不然.(特别是异国情调的字体/面孔除外).

不能在口头/听觉上相互混淆的角色更好

  • a(ay)8(八)
  • B(蜜蜂)C(cee)D(dee)E(ee)g(gee)p(小便)t(tee)v(vee)z(zee)3(三)
  • 这个问题取决于端到端信道的音频质量 - 如果预期的用户群可能存在语音障碍,或者可能不得不通过防毒面具说话,或者通信信道可能包括CB无线电或波动,则会遇到更大的挑战VOIP电话系统.

添加一两个校验位将检测错误但无法帮助解决错误.

alpha - bravo - charlie - delta类型对话框可以帮助解决听力错误,但不能读取错误.

可能的编码选择:

  • 基础64 - 紧凑,但太多难以言语的字符(下划线,短划线等)
  • 基数34 - 0-9和AZ但是O(哦)和I(aye)被遗漏为最简单的数字混淆
  • 基数32 - 与基数34相同,但也省略了0(零)和1(一)

对于这种情况,是否有一个公认的编码是合理的解决方案?

encoding character-encoding error-correction human-readable

5
推荐指数
1
解决办法
133
查看次数

连接错误SMTP python

我现在已经使用python了一段时间,过去一直没有任何错误地使用email函数,但是在最新程序上,我已经使我遇到了这个错误

 Traceback (most recent call last):
    File "daemon.py", line 62, in <module>
    scraper.run()
    File "c:\cfsresd\scraper.py", line 48, in run
    self.scrape()
    File "c:\cfsresd\scraper.py", line 44, in scrape
    handler(msg)
    File "daemon.py", line 57, in handler
    server.ehlo()
    File "C:\Python27\lib\smtplib.py", line 385, in ehlo
    self.putcmd(self.ehlo_msg, name or self.local_hostname)
    File "C:\Python27\lib\smtplib.py", line 318, in putcmd
    self.send(str) 
    File "C:\Python27\lib\smtplib.py", line 310, in send
    raise SMTPServerDisconnected('please run connect() first')
    smtplib.SMTPServerDisconnected: please run connect() first
Run Code Online (Sandbox Code Playgroud)

我为所有项目都使用了相同的电子邮件代码,但这是第一次完成。我试过添加connect(),但这没什么区别。以下是我脚本的电子邮件部分

msg = MIMEText ('%s - %s' % (msg.text, msg.channel))
    server = smtplib.SMTP('smtp.gmail.com:587') …
Run Code Online (Sandbox Code Playgroud)

python gmail smtp

5
推荐指数
1
解决办法
2万
查看次数

使用循环优化Jquery

我有这个代码:

            $('.counter_d').mouseover(function() {
                   $('#description').html('Counter');
             });
            $('.selector_d').mouseover(function() {
                   $('#description').html('Selector');
             });
             $('.date_d').mouseover(function() {
                   $('#description').html('Date');
             });
Run Code Online (Sandbox Code Playgroud)

还有几个,但我认为文件可以更小,甚至可以使用循环重用,但我无法将描述(HTML方法)与选择器绑定.

我想用这样的东西:

              var selectors=['.counter_d','.selector_d','.date_d'];
              var description=['Counter', 'Selector', 'Date'];


              for(var i=0; i<selectors.length; i++)
                 $(selectors[i]).mouseover(function() {
                   $('#description').html(description[i]);
                 });
Run Code Online (Sandbox Code Playgroud)

有帮助吗?谢谢

jquery loops

4
推荐指数
1
解决办法
157
查看次数

如何组织 Bento - Veewee - Vagrant 项目

我正在尝试使用 Bento、Veewee 和 Vagrant 来自动化配置虚拟机的过程。这种方法对于简化开发、开发测试和质量保证流程有很大的希望。

(对于那些没有遇到过这些的人来说——Vagrant 可以轻松地在 Virtual Box、VMWare、EC2 等中快速设置/拆除虚拟机;Veewee 简化了为 Veewee 构建基础盒子的过程;Bento 简化了定义基本框,然后自动化 Veewee 的操作)。

问题是,Bento、Veewee 和 Vagrant 的相互关系令人困惑。许多定义文件和一些操作在各层之间重复,并且不清楚哪一层应该获得特定于我的项目的更新。Ruby 环境也使这个问题变得相当复杂——看起来 Bento 命令都需要从 Bento 目录运行,所以框和其他文件最终会出现在不合逻辑的地方。

谁能建议使用这种工具组合的文件布局和工作流程?

vagrant veewee bento

4
推荐指数
1
解决办法
1036
查看次数

在本地计算机上工作的命令,但在服务器中不起作用?

我正在使用ubuntu 10.04作为我的桌面和Ubunt 10.04服务器版本的服务器.

以下内容:

sudo pip install -e git+http://github.com/facebook/python-sdk.git#egg=facebook
Run Code Online (Sandbox Code Playgroud)

在我的桌面上工作,但在服务器上不起作用.

在服务器上,我收到以下错误消息:

Obtaining facebook from git+http://github.com/facebook/python-sdk.git#egg=facebook
  Cloning http://github.com/facebook/python-sdk.git to ./src/facebook
Exception:
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/pip/basecommand.py", line 115, in main
    self.run(options, args)
  File "/usr/local/lib/python2.6/dist-packages/pip/commands/install.py", line 155, in run
    requirement_set.install_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
  File "/usr/local/lib/python2.6/dist-packages/pip/req.py", line 805, in install_files
    req_to_install.update_editable(not self.is_download)
  File "/usr/local/lib/python2.6/dist-packages/pip/req.py", line 356, in update_editable
    vcs_backend.obtain(self.source_dir)
  File "/usr/local/lib/python2.6/dist-packages/pip/vcs/git.py", line 104, in obtain
    [self.cmd, 'clone', '-q', url, dest])
  File "/usr/local/lib/python2.6/dist-packages/pip/vcs/__init__.py", line 100, in cmd
    raise BadCommand('Cannot find command %s' % …
Run Code Online (Sandbox Code Playgroud)

terminal ubuntu ubuntu-10.04

3
推荐指数
1
解决办法
2656
查看次数

连接表的好处?

我试图向同事解释连接表的好处,下面是一个解释。我对么?

目前他有两张表的图片和标签之间的关系。一个图片表和一个标签表。pic 表有一个tag_id这是标记表中条目的 FK。这是我的回应:

首先让我们看看picstags表。因此,在您当前的架构中,让我们想象两张图片(a 和 b)。我们用#wtf标签标记图片a和b。我们现在在 outtags表中有两个条目:

pic_id  title
------  -----
a       wtf
b       wtf
Run Code Online (Sandbox Code Playgroud)

你看到问题了吗?所以想象一下,我们在 1000 张不同的图片上有 1000 个 wtf 标签。使用相同的架构,我们现在有一个臃肿的标签表,其中包含所有这些重复数据(和浪费的空间)。当我们有多对多关系时,就会出现这个问题。在这种情况下,很多图片可以有很多标签,很多标签可以有很多图片。我们将如何解决这个问题?答案是连接表。所以我们创建了一个新表。让我们称之为pic_tag。该表将包含列pic_id& tag_id。所以现在新表看起来像:

图片标签

pic_id  tag_id
------  ------
a       1
b       1
Run Code Online (Sandbox Code Playgroud)

标签

id   name
--   ----
1    wtf
Run Code Online (Sandbox Code Playgroud)

图片

id  name
--  ----
a   pic1
b   pic2
Run Code Online (Sandbox Code Playgroud)

所以这对我们做了几件事。首先它节省空间。我们只存储字符串 'wtf' 一次。其次,要找到所有带有标签“wtf”的图片,我们首先转到标签表并找到“wtf”的 id,然后转到 pic_tag 表并搜索该 id,这比搜索臃肿的“标签”要高效得多' 给定文本的表格。换句话说,搜索整数比搜索文本快得多。

sql relational-database

0
推荐指数
1
解决办法
1351
查看次数