任何输出到文件/控制台的内容都会产生一些 I/O 开销。在每个垃圾收集事件上增加几毫秒的延迟肯定会对性能产生一些影响。
但实际上,您的应用程序必须经历很多这些过程,并且在您注意到之前承受相当大的负载。不经过测试很难判断。
这是因为numpy.multiply.reduce()
将范围列表转换为numpy.int32
类型的数组,并且reduce操作溢出了可以存储在32位中的内容某些点:
>>> type(numpy.multiply.reduce(range(1, 50, 2)))
<type 'numpy.int32'>
正如 Mike Graham 所说,您可以使用 dtype 参数来使用 Python 整数而不是默认值:
>>> res = numpy.multiply.reduce(range(1, 50, 2), dtype=object)
>>> res
58435841445947272053455474390625L
>>> type(res)
<type 'long'>
但是在这种情况下使用 numpy 处理 python 对象是没有意义的,最好的解决方案是 KennyTM 的:
>>> import functools, operator
>>> functools.reduce(operator.mul, range(1, 50, 2))
58435841445947272053455474390625L
正如迈克所说,这取决于环境。在 .NET 中,有“Hello {0}”,多种语言使用“Hello %s”,使用 MooTools 的 JavaScript 使用“Hello {name}”等等。 “{0}”和“%s”都取决于参数的顺序(这可能是一个缺点)。
如果您对如何自己实现它感兴趣,这里有一个在 javascript 中使用正则表达式的示例:
// Variables should be an object at the current form:
// {name: 'John', age: 13}
function substitute(string, variables)
{
var result = string.replace(/\\?\{([^{}]+)\}/g, function(match, name) {
if(match.charAt(0) == '\\') return match.slice(1); //If there was a backslash before the first {, just return it as it was.
return (variables[name] != undefined) ? variables[name] : '';
});
return result;
}
不应该硬移植到支持正则表达式的其他语言。
Todd 的脚本非常出色,但无法解决您的问题,即您的浏览器在 SMTP 之前超时。这就是为什么您只能看到页面的一半,并且看不到任何可用于调试 SMTP 设置的错误消息。
解决办法是直接运行PHP脚本。没有超时。
如果由于 ISP 不提供 shell 访问权限而无法执行此操作,请创建一个每分钟运行一次的 cron 作业。 Cron 会将输出通过电子邮件发送给您,其中包含完整的调试详细信息。
public class XYZ extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.main);
Calendar c = Calendar.getInstance();
System.out.println("Current time => "+c.getTime());
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String formattedDate = df.format(c.getTime());
// formattedDate have current date/time
Toast.makeText(this, formattedDate, Toast.LENGTH_SHORT).show();
// Now we display formattedDate value in TextView
TextView txtView = new TextView(this);
txtView.setText("Current Date and Time : "+formattedDate);
txtView.setGravity(Gravity.CENTER);
txtView.setTextSize(20);
setContentView(txtView);
}
}
这个 ApplyCurrentValues in EF 4 问题有答案。
应该是
db.Countries.Attach(db.Countries.Single(c => c.ID == countryToEdit.ID));
如果您附加一个空白存根对象,则布尔字段将初始化为 false。 ApplyCurrentValues 调用发现存根和编辑对象之间的布尔值没有变化。
上面的代码添加了另一个数据库查询,但我可以接受。
您的旋转者从事不同的活动吗?
如果是,那么您可以通过 Intent(请参阅 putExtra 部分)并从下一个活动中检索值,以便您可以相应地设置下一个微调器。
编辑:
这是一个更改第二个和第三个微调器中所选项目的示例。 更新侦听器(onItemSelected 方法)
使用您的逻辑Activity
private Spinner s;
private Spinner s2;
private Spinner s3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
String[] myList = new String[] { "Hello", "World", "Foo", "Bar" };
String[] myList2 = new String[] { "Hello2", "World2", "Foo2", "Bar2" };
String[] myList3 = new String[] { "Hello3", "World3", "Foo3", "Bar3" };
s = (Spinner) findViewById(R.id.spinner1);
s2 = (Spinner) findViewById(R.id.spinner2);
s3 = (Spinner) findViewById(R.id.spinner3);
s.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList));
s2.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList2));
s3.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, myList3));
s.setOnItemSelectedListener(new OnItemSelectedListener(){
@Override
public void onItemSelected(AdapterView<?> parent, View v,
int pos, long id) {
s2.setSelection(pos);
s3.setSelection(pos);
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}});
}
: main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_width="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:orientation="vertical">
<Spinner android:id="@+id/spinner1" android:layout_height="wrap_content" android:layout_width="fill_parent" />
<Spinner android:id="@+id/spinner2" android:layout_height="wrap_content" android:layout_width="fill_parent" />
<Spinner android:id="@+id/spinner3" android:layout_height="wrap_content" android:layout_width="fill_parent" />
</LinearLayout>
NSString *path = [[NSBundle mainBundle] pathForResource:@"plistfilename" ofType:@"plist"];
NSDictionary *dict = [[NSDictionary alloc] initWithContentsOfFile:[NSString stringWithFormat:@"%@", path]];
NSString *body = [dict objectForKey:@"Keyname"];
使用它任何人都可以从 plist 文件中读取数据。
我开始寻找一个矢量化的解决方案,以避免lapply()
跨长向量的单字符串解决方案之一。失败
为了找到现有的解决方案,我不知何故掉进了一个兔子洞
煞费苦心地用 C 语言写了一个。相比之下,它最终变得非常复杂
此处显示的许多单行 R 解决方案(不,感谢我决定也
想要处理 Unicode 字符串以匹配 R 版本),但我想我会
分享结果,以防有一天它能以某种方式帮助某人。这是什么
最终变成了这样:
#define R_NO_REMAP
#include <R.h>
#include <Rinternals.h>
// Find the width (in bytes) of a UTF-8 character, given its first byte
size_t utf8charw(char b) {
if (b == 0x00) return 0;
if ((b & 0x80) == 0x00) return 1;
if ((b & 0xe0) == 0xc0) return 2;
if ((b & 0xf0) == 0xe0) return 3;
if ((b & 0xf8) == 0xf0) return 4;
return 1; // Really an invalid character, but move on
}
// Find the number of UTF-8 characters in a string
size_t utf8nchar(const char* str) {
size_t nchar = 0;
while (*str != '\0') {
str += utf8charw(*str); nchar++;
}
return nchar;
}
SEXP C_str_chunk(SEXP x, SEXP size_) {
// Allocate a list to store the result
R_xlen_t n = Rf_xlength(x);
SEXP result = PROTECT(Rf_allocVector(VECSXP, n));
int size = Rf_asInteger(size_);
for (R_xlen_t i = 0; i < n; i++) {
const char* str = Rf_translateCharUTF8(STRING_ELT(x, i));
// Figure out number of chunks
size_t nchar = utf8nchar(str);
size_t nchnk = nchar / size + (nchar % size != 0);
SEXP chunks = PROTECT(Rf_allocVector(STRSXP, nchnk));
for (size_t j = 0, nbytes = 0; j < nchnk; j++, str += nbytes) {
// Find size of next chunk in bytes
nbytes = 0;
for (int cp = 0; cp < size; cp++) {
nbytes += utf8charw(str[nbytes]);
}
// Assign to chunks vector as an R string
SET_STRING_ELT(chunks, j, Rf_mkCharLenCE(str, nbytes, CE_UTF8));
}
SET_VECTOR_ELT(result, i, chunks);
}
// Clean up
UNPROTECT(n);
UNPROTECT(1);
return result;
}
然后我将这个怪物放入一个名为 str_chunk.c
的文件中,并使用 R CMD SHLIB str_chunk.c
进行编译。
为了尝试一下,我们需要在 R 端进行一些设置:
str_chunk <- function(x, n) {
.Call("C_str_chunk", x, as.integer(n))
}
# The (currently) accepted answer
str_chunk_one <- function(x, n) {
substring(x, seq(1, nchar(x), n), seq(n, nchar(x), n))
}
dyn.load("str_chunk.dll")
所以我们在 C 版本中实现的是获取向量输入并返回一个列表:
str_chunk(rep("0123456789AB", 2), 2)
#> [[1]]
#> [1] "01" "23" "45" "67" "89" "AB"
#>
#> [[2]]
#> [1] "01" "23" "45" "67" "89" "AB"
现在我们开始进行基准测试。
我们以 200 倍的改进开始,对于长向量
短弦:
x <- rep("0123456789AB", 1000)
microbenchmark::microbenchmark(
accepted = lapply(x, str_chunk_one, 2),
str_chunk(x, 2)
) |> print(unit = "relative")
#> Unit: relative
#> expr min lq mean median uq max neval
#> accepted 229.5826 216.8246 182.5449 203.785 182.3662 25.88823 100
#> str_chunk(x, 2) 1.0000 1.0000 1.0000 1.000 1.0000 1.00000 100
……然后缩小到明显不那么令人印象深刻的 3 倍改进
大字符串。
x <- rep(strrep("0123456789AB", 1000), 10)
microbenchmark::microbenchmark(
accepted = lapply(x, str_chunk_one, 2),
str_chunk(x, 2)
) |> print(unit = "relative")
#> Unit: relative
#> expr min lq mean median uq max neval
#> accepted 2.77981 2.802641 3.304573 2.787173 2.846268 13.62319 100
#> str_chunk(x, 2) 1.00000 1.000000 1.000000 1.000000 1.000000 1.00000 100
dyn.unload("str_chunk.dll")
那么,值得吗?好吧,绝对不考虑花了多长时间
实际上可以正常工作 - 但如果这是在一个包中,它就会
在我的用例中节省了大量时间(短字符串,长向量)。
尝试 git update-index --assume-unchanged --
--假设不变
--no-假设不变当指定这些标志时,记录的对象名称
路径未更新。相反,这些
选项设置和取消设置“假设
路径的“未更改”位。当
“假设不变”位已打开,git
停止检查工作树文件
对于可能的修改,所以你
需要手动取消设置该位来告诉
git 当你改变工作树时
文件。有时这会很有帮助
正在处理一个大项目
lstat(2) 非常慢的文件系统
系统调用(例如cifs)。此选项也可以用作粗略的文件级机制来忽略
跟踪文件中未提交的更改
(类似于 .gitignore 的作用
未跟踪的文件)。你应该记住
显式 git add 操作
仍然会导致文件
从工作树中刷新。 git
会(优雅地)失败,以防万一
需要修改索引中的这个文件
例如,在合并提交时;因此,
如果假设的未跟踪文件是
更改上游,您将需要
手动处理这种情况。
不幸的是,快速回答是否定的。但是,您可以非常接近合理的语法:
至少它比
String.format
更具可读性和可预测性!The quick answer is no, unfortunately. However, you can come pretty close to a reasonable syntaks:
It's more readable and predictable than
String.format
, at least!字符串格式中的命名占位符