我在另一个和第三个函数里面有一个函数。如何在第三个函数中调用嵌套函数?我可以使用任何特殊的库吗?我不能编辑()或b(),只能编辑c()。
def a():
def b():
print("hi")
def c():
# code only here to call b() to print
答案 0 :(得分:0)
由于Python作用域的工作方式,这是不可能的。 b()是a()的局部,因此在c()中不存在。
编辑:评论者是正确的,我最初给出的建议不起作用 - 所以这绝对不可能。答案 1 :(得分:0)
执行此操作时,函数b
在a
内本地定义。这意味着默认情况下无法在a
之外访问它。有两种主要方法可以解决这个问题,但都涉及修改a
:
global
关键字(不推荐)
def a():
global b
def b():
print("hi")
此处global
关键字将b
设置为全局变量,以便您可以通过c
内的正常调用来访问它。 This is generally frowned upon.
从a
返回功能并将其传递给c
def a():
def b():
print("hi")
return b
def c(b):
#your code
然后,当您致电c
时,您应该将b
传递给a
,b = a()
c(b)
将返回该a
。你可以这样做:
c
或者,每次拨打c(a())
时,您都可以致电c
,因此:
def c():
b = a()
#your code here
如果您选择这样做,则可以定义c
:
`c()`
这将允许您简单地正常呼叫@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
,因此:
// Prepare Blob support
const Blob = RNFetchBlob.polyfill.Blob;
const fs = RNFetchBlob.fs;
window.XMLHttpRequest = RNFetchBlob.polyfill.XMLHttpRequest;
window.Blob = Blob;
uploadImage = (uri, imageName, mime = "image/jpg") => {
return new Promise((resolve, reject) => {
const uploadUri =
Platform.OS === "ios" ? uri.replace("file://", "") : uri;
let uploadBlob = null;
const imageRef = db
.storage()
.ref("images/")
.child(imageName);
fs.readFile(uploadUri, "base64")
.then(data => {
return Blob.build(data, { type: `${mime};BASE64` });
})
.then(blob => {
uploadBlob = blob;
alert("blob is " + JSON.stringify(blob));
return imageRef.put(blob, { contentType: mime });
})
.then(() => {
uploadBlob.close();
return imageRef.getDownloadURL();
})
.then(url => {
resolve(url);
})
.catch(error => {
reject(error);
});
});};