由于我正在为最终产品苦苦挣扎,因此将不胜感激。
我需要编写一个打开和读取文件的函数,返回一个字典,其中每个键是函数的名称,而值是该函数的参数列表。并且应该返回这样的内容。
{“ h”:[x],“ f”:[a,b],“ g”:[c]}
我正在传输的文件如下所示
def h(x):
f(x + 4, 9)
def f(a,b):
e = a * b
g(e)
def g(c):
b = 3
print(c)
打印(b)
到目前为止,我的代码看起来像这样,但是我不知道如何使它看起来像字典中的最终产品。
filename =“”
ddd = dict()
new = list()
def take_name():
global filename
filename= input("Please, type the name of the file:")
print(take_name())
def open_read():
global handle
handle= open(filename, 'r')
for line in handle:
line=line.rstrip()
if line.startswith('def'):
line=line.replace('def', " ")
line=line.replace(':', " ")
new.append(line)
print(new)
print(ddd)
print(open_read())
再次感谢您的帮助
答案 0 :(得分:1)
最好使用Python的解析器而非正则表达式。
假设您的意思是<script type="text/javascript">
$(document).ready(function () {
$("#RepfocusModelDropdown").change(function () {
var Id = $(this).val();
if (Id != null) {
$.ajax({
async: true,
type: "POST",
url: "./Create?handler=UserSelect",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: {
Id: Id
},
crossDomain: true,
dataType: "json",
success: function (response) {
alert(JSON.stringify(response));
},
error: function (response) {
alert(JSON.stringify(response));
}
});
$.ajax({
type: "POST",
url: "./Create?handler=AreaSelect",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: {
Id: Id
},
dataType: "json",
success: function (response) {
alert(JSON.stringify(response));
},
error: function (response) {
alert(JSON.stringify(response));
}
});
}
})
})
(因为{'h': ['x'], 'f': ['a', 'b'], 'g': ['c']}
看起来不是特别有用):
{"h":[x], "f":[a, b], "g":[c]}
但是,这只是一个基本片段,可能会更加复杂。首先,它只会为您提供顶级功能(您需要一些递归才能捕获子功能或方法)。另一方面,它忽略除位置(例如import ast
with open(filename) as f:
code = f.read()
module = ast.parse(code, filename)
functions = { statement.name: [arg.arg for arg in statement.args.args]
for statement in module.body if isinstance(statement, ast.FunctionDef)
}
print(functions)
)之外的各种可能的参数。如果您需要它们,则可以在了解AST的基础之后自行添加它们。
编辑:kwargs
和inspect
之间的显着区别是,您必须导入(即执行)源文件才能供{{1 }}; ast
对源文件本身起作用,而不执行它。两种方法都是有效的。但是如果您对文件有安全性担忧,或者您无法执行该文件(例如,由于依赖关系),或者如果您想从执行的代码中获取您无法获取的内容(例如,我上面提到的本地定义的函数),应该更喜欢inspect
。
答案 1 :(得分:1)
您可以使用内置的python模块检查完成所需的操作。 这里有一些代码可以帮助您入门,在本示例中,我正在处理一个名为dummy.py的文件,但是您可以使用类似this.
的导入方式df %>%
complete( Year, nesting( State, Grade ), fill = list( Yes = 0 ) ) %>%
group_by( Year, State, Grade ) %>%
summarise( x = sum( Yes ) / n() ) %>%
spread( State, x, fill = 0 )
# # A tibble: 4 x 5
# # Groups: Year [2]
# Year Grade AZ CA NY
# <int> <chr> <dbl> <dbl> <dbl>
# 1 2000 A 0.667 0.5 1
# 2 2000 B 1 0 0
# 3 2001 A 0 0 0
# 4 2001 B 0 0 1