是否可以获取模块内顶级代码的代码对象?例如,如果你有一个像这样的 python 文件:
myvar = 1
print('hello from top level')
def myfunction():
print('hello from function')
Run Code Online (Sandbox Code Playgroud)
并且您想要访问 的代码对象myfunction
,那么您可以使用myfunction.__code__
. 例如,myfunction.__code__.co_consts
将包含字符串'hello from function'
等...
有没有办法获取顶级代码的代码对象?也就是说,对于代码:
myvar = 1
print('hello from top level')
def myfunction():
print('hello from function')
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西__main__.__code__.co_consts
包含'hello from top level'
,但我找不到任何方法来得到这个。这样的事情存在吗?
当人们谈论F#时,他们有时会提到这个词top-level
;
什么top-level
意思?
例如在之前的SO Q&A中
错误FS0037有时,非常混乱
定义模块VS.NET与F#Interactive F#中
命名空间和模块之间的区别是什么?
F#
F#和MEF中的
AutoOpen属性:导出函数如何执行此F#函数
该术语也会在评论中定期出现,但对于那些问答我没有提及.
关于范围的维基百科文章涉及到这一点,但没有F#的具体细节.
F#3.x规范仅规定:
11.2.1.1函数和值的Arity一致性
括号表示一个
top-level
函数,它可能是计算函数值的第一类计算表达式,而不是编译时函数值.
13.1自定义属性
例如,STAThread属性应该放在
top-level
"do"语句之前.
14.1.8类型变量的名称解析
对于
top-level
包含表达式和类型的任何成员或任何其他构造,它最初为空.
我怀疑这个术语在不同的语境中有不同的含义:范围,F#交互,阴影.
如果您还可以解释F#前身语言(ML,CAML,OCaml)的起源,我们将不胜感激.
最后,我不打算将答案标记为几天,以避免仓促答案.
我们目前正在将我们的项目切换到 Kotlin,并遇到以下问题:
我们只需要在给定的类中使用某个扩展函数。因此,我们有两种可能性:(1)private
在文件顶层声明扩展函数或(2)private
在类内部声明扩展函数。
遵循MCVE:
顶级示例(文件C1.kt
):
private fun String.double() = this.repeat(2)
class C1 {
init {
println("init".double())
}
}
Run Code Online (Sandbox Code Playgroud)
内部类示例(文件C2.kt
):
class C2 {
private fun String.double() = this.repeat(2)
init {
println("init".double())
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
这两种方法有什么区别,只是在C1.kt
扩展函数String.double()
中其他可能的文件成员(例如同一文件中的其他类)也可以看到?
由于我们希望实现“尽可能 kotlinic”的代码,我们想知道这两种方法中的哪一种是建议的。上面的例子有官方建议/风格指南吗?我认为声明扩展函数尽可能接近其预期用途被认为是一种很好的做法,因此在上面的例子中C2
会建议结构?
我发现自己使用相同的定义来定义语法参数,除了它们的名称,所以我决定编写一个宏来使这更简单:
(define-syntax (test-case-parameter stx)
(syntax-parse stx
[(_ parameter:id)
#'(define-syntax-parameter parameter
(lambda (stx)
(raise-syntax-error stx "Can only be used inside test-case.")))]))
(test-case-parameter a)
(test-case-parameter b)
(test-case-parameter c)
Run Code Online (Sandbox Code Playgroud)
然而,我不想重复宏名称,我希望能够写:
(test-case-parameter a b c)
Run Code Online (Sandbox Code Playgroud)
但是我没有看到如何使用普通的省略号语法来实现这一点,因为我需要将所有内容包装在一个begin
可以创建新范围的内容中,并且我希望所有的语法参数就好像我已经为每个顶部写了一样水平.什么是正确的方法来实现这一目标?
如帖子标题中所述,尝试将字典快速转换为JSON数据时,我收到NSInvalidArgumentException-'JSON write中的无效顶级类型'
let userInfo: [String: String] = [
"user_name" : username!,
"password" : password!,
"device_id" : DEVICE_ID!,
"os_version" : OS_VERSION
]
let inputData = jsonEncode(object: userInfo)
Run Code Online (Sandbox Code Playgroud)
。。。
static private func jsonEncode(object:Any?) -> Data?
{
do{
if let encoded = try JSONSerialization.data(withJSONObject: object, options:[]) as Data? <- here occured NSInvalidArgumentException
if(encoded != nil)
{
return encoded
}
else
{
return nil
}
}
catch
{
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
我将Dictionary作为参数传递,但没有出问题。请帮助我。
谢谢!
我试图了解如何创建小部件。而且我发现以上三个函数正在用于创建窗口小部件,但是我无法提出一个窗口与另一个窗口的区别和优势。即使,我看了一下这个答案,仍然让我感到困惑(它也没说什么winfo_toplevel
)。
这是我的代码。
from tkinter import *
root = Tk()
root.title("Root widget")
root.mainloop()
window = Toplevel()
window.title("Window widget")
window.mainloop()
Run Code Online (Sandbox Code Playgroud)
在上面的代码上运行时,将创建“ Root”小部件。在关闭“根”时,将创建两个小部件,其中一个标题为“窗口小部件”,而另一个则不需要。关闭不需要的小部件时,“窗口小部件”也将被销毁。这里实际上发生了什么以及如何克服?
另一个示例:
class ldo(Frame):
def __init__(self, master = None):
Frame.__init__(self,master)
self.grid()
self.appOutline()
def appOutline(self):
top = self.winfo_toplevel()
self.menuBar = Menu(top)
top["menu"] = self.menuBar
self.subMenu1 = Menu(self.menuBar)
self.menuBar.add_cascade(label = "File", menu = self.subMenu1)
app = ldo()
app.master.title("Sample UI")
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
另一方面,此代码使用的winfo_toplevel()
是小部件看起来很好的地方。在这里,我的假设是,它Frame
起着创建小部件的作用,并且winfo_toplevel()
是其他tkinter项目的增强工具。但是想知道它实际上在做什么。
但是,以下代码段不起作用:
winf = winfo_Toplevel()
winf.title("Winfo Widget")
winf.mainloop()
Run Code Online (Sandbox Code Playgroud)
并返回这样的错误:
winf = winfo_Toplevel()
NameError: …
Run Code Online (Sandbox Code Playgroud) 删除最小化和最大化按钮后,是否可以显示我toplevel
和root
窗口的图标?我尝试使用,-toolwindow
但此后无法显示该图标。还有其他方法可以在仍然显示图标的同时从窗口中删除最小和最大尺寸按钮吗?
from tkinter import *
def top():
tp = Toplevel()
tp.geometry("300x300")
tp.attributes("-toolwindow", 1)
tp.iconbitmap("My icon.ico")
root = Tk()
root.geometry("400x400")
b = Button(root, text="open window with icon", command=top).pack()
root.mainloop()
Run Code Online (Sandbox Code Playgroud) 有什么办法可以在主窗口前面放置一个顶级窗口吗?
这是代码:
from tkinter import *
root = Tk()
root.geometry('1280x720')
def create_new_window():
root2 = Toplevel()
root2.geometry('500x500')
create_new_window()
mainloop()
Run Code Online (Sandbox Code Playgroud)
在这里,我希望root2
窗口始终保持在root
窗口的前面。
我尝试使用root2.attributes('-topmost' , 1)
,但问题是这一行也将窗口置于所有其他程序之上。
我想要的是顶层窗口应该只位于主窗口的前面,并且当我单击主窗口时它永远不应该返回。
在 tkinter 中有什么办法可以实现这一点吗?
如果有人能帮助我,那就太好了。
我有一个程序需要在 tkinter 中打开Toplevel
除主Tk()
窗口之外的窗口。在主窗口中,我有一个Scale
小部件,它每 100 毫秒随着after
调用更新一次。但是,在 Toplevel 窗口打开且比例更新的状态下,当我按下Toplevel
窗口中的“X”按钮时,Scale
停止移动。
这是我的代码:
from tkinter import Tk, Toplevel, Scale
root = Tk()
slider = Scale(root, orient='horizontal')
slider.pack()
num = 0
def main():
global num
slider.set(num)
num += 1
slider.after(500, main)
def toplevel():
win = Toplevel()
root.bind('<space>', lambda x: [main(), toplevel()])
root.mainloop()
Run Code Online (Sandbox Code Playgroud)
即使按住“X”按钮,如何保持滑块/刻度正常流动?
还有为什么会发生这种情况?
提前致谢!
为了能够在我的VHDL设计中支持可扩展性,我开始使用记录作为我的组件的输入和输出.目前,我正处于使用顶级架构中的端口映射将组件链接到外部的位置.问题是,记录有多个必须与不同来源链接的变量.
目前我在VHDL代码中使用的记录看起来像这样(名称已被假货替换):
TYPE some_record_input IS RECORD
input_one : sfixed(3 downto -32);
input_two : sfixed(3 downto -32);
input_rst : std_logic;
END RECORD;
TYPE some_record_output IS RECORD
output_one : std_logic_vector(15 downto 0);
output_dn : std_logic;
END RECORD;
Run Code Online (Sandbox Code Playgroud)
因此我正在使用fixed_pkg库来获取固定点.
这些记录在实体端口映射中使用如下.
ENTITY my_component IS
port
(
clk : IN std_logic;
data : IN some_record_input;
result : OUT some_record_output
);
END my_component;
Run Code Online (Sandbox Code Playgroud)
现在问题发生的部分.我在顶层使用这个组件将它与我的Altera Board可用的按钮和LED连接起来.这是通过在我的顶级实体的主体中使用端口映射来完成的:
A0 : my_component PORT MAP(clk => CLK, data => (input_one => IONE, input_two => ITWO, input_rst => RST), result => (output_one …
Run Code Online (Sandbox Code Playgroud)