[编辑00]:我已经多次编辑该帖子,现在甚至是标题,请阅读以下内容.
我只是了解了格式字符串的方法,其使用词典使用,如所提供的那些vars(),locals()和globals(),例如:
name = 'Ismael'
print 'My name is {name}.'.format(**vars())
Run Code Online (Sandbox Code Playgroud)
但是我想这样做:
name = 'Ismael'
print 'My name is {name}.' # Similar to ruby
Run Code Online (Sandbox Code Playgroud)
所以我想出了这个:
def mprint(string='', dictionary=globals()):
print string.format(**dictionary)
Run Code Online (Sandbox Code Playgroud)
您可以在此处与代码进行交互:http://labs.codecademy.com/BA0B/3#: workspace
最后,我想做的是将该函数放在另一个名为的文件中my_print.py,这样我就能做到:
from my_print import mprint
name= 'Ismael'
mprint('Hello! My name is {name}.')
Run Code Online (Sandbox Code Playgroud)
但就像现在一样,范围存在问题,我如何从导入的mprint函数中将主模块命名空间作为字典.(不是那个my_print.py)
我希望我自己理解,如果没有,尝试从另一个模块导入该功能.(回溯在链接中)
它正在访问globals()dict my_print.py,但当然变量名在该范围内没有定义,有关如何实现这一点的任何想法?
如果它在同一模块中定义,该函数可以工作,但请注意我必须如何使用,globals()因为如果不是,我只会得到一个mprint()范围内的值的字典.
我已经尝试使用非局部和点符号来访问主模块变量,但我仍然无法弄明白.
[编辑01]:我想我找到了一个解决方案:
在my_print.py中:
def mprint(string='',dictionary=None):
if dictionary is None:
import sys …Run Code Online (Sandbox Code Playgroud) 我在Windows上运行文档中的示例:
julia> function compute_something(A::DArray)
B = darray(eltype(A), size(A), 3)
for i = 1:size(A,3)
@spawnat owner(B,i) B[:,:,i] = sqrt(A[:,:,i])
end
B
end
julia> A = drand(10, 15, 4)
julia> compute_something(A)
Run Code Online (Sandbox Code Playgroud)
但是我收到一个错误:
in compute_something: B not defined
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?
在Web REPL中,此示例有效.
我想创建一个引号,它将符号:abc保存在变量中x并将其推入数组中a.但是我只能获得变量abc.语法:$x似乎不正确(不是我想要的).这样做的语法是什么?:
julia> x = :abc
julia> expr = quote
a = []
push!(a, $x)
push!(a, :($x))
push!(a, :$x)
a
end
quote
a = []
push!(a, abc)
push!(a, $(Expr(:quote, :($(Expr(:$, :x))))))
push!(a, :$ * x)
a
end
Run Code Online (Sandbox Code Playgroud)
所需的输出是:
quote
a = []
push!(a, :abc)
a
end
Run Code Online (Sandbox Code Playgroud) 我不明白${}第四个和第六个提示符在做什么,我找不到任何关于此的文档,这本书Python for Unix and Linux System Administrator有一个类似于第六个提示符中的示例,其中变量不仅是前缀,而且$是也包含在{}以便将字符串嵌入另一个字符串中,如果我引用完整的表达式,它就会起作用,但是 [4 & 6] 中发生了什么?:
In [1]: test = 'TEST TEST TEST!!!'
In [2]: !echo test
test
In [3]: !echo $test
TEST TEST TEST!!!
In [4]: !echo ${test} # Don't understand this one.
TEST TEST!!!
In [5]: !echo {test}
TEST TEST TEST!!!
In [6]: !echo ${test}TEST!!! # Nor this one either.
TEST TEST!!!TEST!!!
In [7]: !echo '${test}TEST!!!'
$TEST TEST TEST!!!TEST!!!
Run Code Online (Sandbox Code Playgroud) 使用python 2.7.4和3.3.1:
from textwrap import dedent as dd
name='Maruja'
print(dd('''
{0}:
_.-.
'( ^{_} (
`~\`-----'\\
)_)---)_)
'''.format(name)))
Run Code Online (Sandbox Code Playgroud)
这是两个方面的关键错误:
$ python3 test.py # or python2 test.py
Traceback (most recent call last):
File "test.py", line 9, in <module>
'''.format(name)))
KeyError: '_'
Run Code Online (Sandbox Code Playgroud)
使用%运算符它可以工作:
from textwrap import dedent as dd
name ='Maruja'
print(dd('''
%s:
_.-.
'( ^{_} (
`~\`-----'\\
)_)---)_)
''' % name))
Run Code Online (Sandbox Code Playgroud)
没错,但为什么?
$ python3 test2.py # or python2 test2.py
Maruja:
_.-.
'( ^{_} (
`~\`-----'\
)_)---)_)
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚为什么会发生这种情况而且我已经在几个环境中进行了测试,它有什么问题?
我想重新定义或覆盖一些函数Base,而不是用户注意到这一点.我前一段时间发现了这个伎俩:
original_stderr = STDERR
redirect_stderr()
# code
redirect_stderr(original_stderr)
Run Code Online (Sandbox Code Playgroud)
这成了我的重复模式,所以我做了一个宏:
macro suppress_err(block)
quote
orig_err = STDERR
redirect_stderr()
val = $block
redirect_stderr(orig_err)
val
end
end
Run Code Online (Sandbox Code Playgroud)
但它从未像预期的那样表现(即使没有宏):
在Windows中:
julia> @suppress_err warn()
julia> @suppress_err error()
ERROR:
in error at error.jl:22
Run Code Online (Sandbox Code Playgroud)
适用于Linux的Windows子系统:
julia> @suppress_err warn()
[1] 17 abort (core dumped) julia
julia 7.69s user 2.36s system 106% cpu 9.441 total
Run Code Online (Sandbox Code Playgroud)
在Linux中:
julia> @suppress_err +(x, y) = x - y
ERROR: UndefVarError: #11#x not defined
in eval(::Module, ::Any) …Run Code Online (Sandbox Code Playgroud) 这是朱莉娅的文档。
它表示我们可以为 Julia 的函数设置可选参数。例如,
function parse(type, num, base=10)
###
end
Run Code Online (Sandbox Code Playgroud)
parse然后我们可以这样调用该函数:
parse(Int,"12",3)
parse(Int,"12")
Run Code Online (Sandbox Code Playgroud)
我已经测试过它并且确实有效。
现在我想对类型中的函数做同样的事情。这是一个例子,
type MyTest
testShow::Function
function MyTest()
this = new()
this.testShow = function(p1, p2 = 1, p3 = 2)
end
return this
end
end
Run Code Online (Sandbox Code Playgroud)
但我收到一个错误:
错误:LoadError:语法:“p2=1”不是有效的函数参数名称
我正在编写一个基于Python的列表推导的宏@vcomp(矢量理解)和一个条件子句,以简洁的方式过滤元素.
macro vcomp(comprehension::Expr, when::Symbol, condition)
comp_head, comp_args = comprehension.head, comprehension.args
comp_head ? [:comprehension, :typed_comprehension] && error("@vcomp not a comprehension")
when ? :when && error("@vcomp expected `when`, got: `$when`")
T = comp_head == :typed_comprehension ? comp_args[1] : nothing
if VERSION < v"0.5-"
element = comp_head == :comprehension ? comp_args[1] : comp_args[2]
sequence = comp_head == :comprehension ? comp_args[2] : comp_args[3]
else
element = comp_head == :comprehension ? comp_args[1].args[1] : comp_args[2].args[1]
sequence = comp_head == :comprehension ? comp_args[1].args[2] …Run Code Online (Sandbox Code Playgroud)