Python 在方法内的%time语句中定义的变量在该语句之后不可访问
这似乎很有效-Python 在方法内的%time语句中定义的变量在该语句之后不可访问,python,python-2.7,ipython,Python,Python 2.7,Ipython,这似乎很有效- %time a = "abc" print(a) CPU times: user 0 ns, sys: 0 ns, total: 0 ns Wall time: 19.1 µs abc 这不会- def func(): %time b = "abc" print(b) func() CPU times: user 0 ns, sys: 0 ns, total: 0 ns Wall time: 31 µs --------------------------
%time a = "abc"
print(a)
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 19.1 µs
abc
这不会-
def func():
%time b = "abc"
print(b)
func()
CPU times: user 0 ns, sys: 0 ns, total: 0 ns
Wall time: 31 µs
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-8-57f7d48952b8> in <module>()
3 print(b)
4
----> 5 func()
<ipython-input-8-57f7d48952b8> in func()
1 def func():
2 get_ipython().magic(u'time b = "abc"')
----> 3 print(b)
4
5 func()
NameError: global name 'b' is not defined
def func():
%时间b=“abc”
印刷品(b)
func()
CPU时间:用户0纳秒,系统0纳秒,总计0纳秒
壁时间:31µs
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
3印刷品(b)
4.
---->5 func()
在func()中
1 def func():
2 get_ipython().magic(u'time b=“abc”)
---->3印刷品(b)
4.
5 func()
NameError:未定义全局名称“b”
这里有一个链接到
我使用的是Python2.7,还没有在python3上试用过
这是预期的行为吗?我几乎可以肯定这是一个IPython bug [31]中的
:def func():
…:a=2
…:%时间b=1
…:打印(局部变量())
…:打印一份
…:打印b
在[32]:func()中
CPU时间:用户3µs,系统:0 ns,总计:3µs
壁时间:6.2µs
{'a':2,'b':1}
2.
---------------------------------------------------------------------------
NameError回溯(最近一次呼叫上次)
在()
---->1 func()
在func()中
4打印(局部变量())
5.打印a
---->6打印b
7.
8.
NameError:未定义全局名称“b”
它在Python 3中工作,如果您在等号后编写%time
,如下所示:
def func():
a = 2
b = %time 1
print(locals())
print(a)
print(b)
func()
输出:
CPU times: user 6 µs, sys: 0 ns, total: 6 µs
Wall time: 10.3 µs
{'a': 2, 'b': 1}
2
1
非常感谢你的回答。这里引用takluyver在github问题上的回应——抱歉,这是Python工作方式的一个长期限制。局部变量不像全局变量那样从字典中查找,因此动态执行的代码修改局部名称空间并不像您期望的那样工作。因此,我认为最好的解决方法是
b=locals()['b']
print(b)
请参见以下github讨论:
CPU times: user 6 µs, sys: 0 ns, total: 6 µs
Wall time: 10.3 µs
{'a': 2, 'b': 1}
2
1