Python语言细微差别
可能重复的问题:
Python中的常见陷阱
我正在学习Python,之前接触过很多种编程语言。在过去的五年里,我写了不少Java、C++、VB.Net和PHP。很多人可能会同意,一旦你学会了一种编程语言,学习另一种语言其实就是了解它们在语法和最佳实践上的不同。
从PHP转过来后,我已经习惯了很多脚本语言的特性。例如,像这样的代码让我觉得很有趣:
# Retrieve the value from the cache; otherwise redownload.
if(!($value = $cache->get($key)))
# Redownload the value and store in the cache.
$cache->set($key, $value = redownload($key));
不过,Python不把赋值看作一个表达式。另一方面,它支持一些很不错的特性,比如in
这个用法,我觉得这是历史上最伟大的发明之一。x in y
比!empty($y[$x])
要好得多。
还有哪些细微差别、"缺失"的特性和性能瓶颈是我需要注意的呢?我希望能尽可能顺利地过渡到Python开发中,并希望能学到一些技巧,帮助我减少开发时间,避免反复试错。非常感谢你的见解!
5 个回答
2
线程并不像你想的那样工作,可能也不应该像你习惯的那样使用它们。这对很多人来说是个大坑,尤其是那些习惯于Java的人。在Java中,通常的做法是继承Thread,实现Runnable接口来进行异步工作,而且语言本身支持在多核CPU的机器上并行运行线程。
一般来说,你可能根本不需要线程,而是应该使用子进程。可以看看我对问题"python threading and performace?"的回答这里。
(更一般来说,可能还有更好的方法。)
3
对于你的例子,通常的做法是这样的
try:
value = cache[key]
except KeyError:
value = cache[key] = redownload(key)
4
我第一次在一个真实的程序中遇到这个问题时,花了我几个小时才搞明白:
函数的默认参数是一个可以改变的静态值。
def foo(bar = []):
bar.append(1)
print(bar)
foo()
foo()
这段代码会输出
[1]
[1, 1]