我注意到它与 functools.partial 以及 python 源代码本身一起工作。例如下面来自collections.py
from operator import itemgetter as _itemgetter, eq as _eq
from keyword import iskeyword as _iskeyword
import sys as _sys
import heapq as _heapq
Run Code Online (Sandbox Code Playgroud)
这样做的理由是什么?如果这是 C++,我知道它可能会导致命名空间冲突,但是在 python 中,这些名称不是导入它们的模块的本地名称吗?除非有人确实导入 *,但不鼓励这样做,所以我不确定这就是原因。
我的Android应用会打开图片并对其进行操作.我的活动要求打开图像,如下所示:
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent,
"Complete action using"),
PICK_FROM_FILE);
Run Code Online (Sandbox Code Playgroud)
执行此操作时,它会启动一个包含三到四个选项的对话框,例如ES文件资源管理器:文件,图库等.
我希望将其作为Bitmap使用BitmapFactory.decodeFile(path).
当我从ES文件资源管理器中选择文件时,路径计算如下:
String path = imageData.getData().getPath();
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于从Gallery或Files中选择图像/external/images/media/38,例如path的值.
所以我做了一个检查,转换这样一个以外部开头的路径:
if (path.startsWith("/external")) {
path = getFilePathFromUri(imageData.getData());
}
private String getFilePathFromUri(Uri uri) {
Cursor cursor = managedQuery(uri,
new String[] { MediaStore.Images.Media.DATA },
null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
Run Code Online (Sandbox Code Playgroud)
这会将上述路径转换为/mnt/sdcard/dcim/Camera/2011-11-13_15-33-24_304.jpg现在可用于此目的BitmapFactory.decodeFile(path).
我知道硬编码这样的检查(/ external)不是一个好主意,是否有更好的,也许是通用的方法来解析Intent中返回的URI的格式?