【问题标题】:Switch into object's namespace locally在本地切换到对象的命名空间
【发布时间】:2017-03-03 10:47:39
【问题描述】:

考虑以下简单示例:

import pandas as pd
mytable = pd.read_csv('test.dat',sep='\t')
mytable["z"] = mytable.x + mytable.y
mytable["q"] = mytable.z**2
mytable

例如cat test.dat:

x       y
1       5
2       6
3       7
4       8

如果我使用类似 ipython3 的东西,我想像下面的伪代码一样“分解”mytable 关键字:

import pandas as pd
mytable = pd.read_csv('test.dat',sep='\t')
cd mytable
   z = x + y
   q = z**2
mytable

有没有可能像这样简化语法。没关系,如果解决方案使用额外的 ipython 功能。

备注:我在 pgf/tikz 语法之后使用了“cd”关键字,这样的事情是可能的。

【问题讨论】:

  • 听起来像是来自 Pascal 的 with 关键字。我认为如果没有大规模的黑客攻击,Python 就不可能有这样的事情。毕竟 Python 力求在没有太多上下文的情况下保持每一行的表现力。想想self 在方法中的明确性,这与您的方法完全相反。有关 C/C++ 中的相同问题,另请参阅 stackoverflow.com/questions/2279180/…

标签: python pandas syntax ipython


【解决方案1】:

Python 的设计并不允许这样做,因为它会导致歧义。有关该主题的详细讨论,请参阅here

考虑这样的代码:

class X(object):
  def __init__(self, q):
    self.q = q

x = X(4)
q = 3

# del x.q

with x:
  print q

我想这应该打印 4。

现在,考虑启用del 语句。那么这应该引发错误(因为x 中缺少q?)还是应该打印3(因为更全局的变量q)?由于这很难决定,而且不同的人可能有不同的意见,Python 决定根本不提供这个功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-10
    • 2021-12-14
    • 2019-08-17
    • 1970-01-01
    • 2010-12-05
    • 2013-10-25
    • 1970-01-01
    相关资源
    最近更新 更多