社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python语言的细微差别[复制]

mattbasta • 6 年前 • 1843 次点击  

可能重复:
Common Pitfalls in 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开发,并希望了解一些有助于平滑开发时间和消除尝试和错误的秘密。感谢您的洞察力!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/30328
 
1843 次点击  
文章 [ 5 ]  |  最新文章 6 年前
MAK
Reply   •   1 楼
MAK    14 年前

蟒蛇代码通常比C类代码快得多。

类似:

new_list=[]
for i in xrange(len(old_list)):
   new_list.append(some_function(old_list[i]))

最好写为:

new_list=[some_function(x) for x in old_list]

new_list=map(some_function,old_list)
Ignacio Vazquez-Abrams
Reply   •   2 楼
Ignacio Vazquez-Abrams    14 年前

例外是你的朋友。

与使用返回值指示错误的C和PHP等语言不同,python使用异常来中断程序,而不是允许错误导致进一步的问题。

Community Lieven Keersmaekers
Reply   •   3 楼
Community Lieven Keersmaekers    8 年前

线程不会像您想象的那样工作,而且可能不应该像您习惯使用它们那样使用线程。对于很多人来说,这是一个巨大的挑战,尤其是那些习惯于Java的用户。 子类线程 实现可运行接口来执行异步工作,并且在有语言支持的情况下并行运行线程(在具有多个CPU核心的计算机上)。

一般来说,您可能根本不需要线程,而需要子进程。见 my answer 对这个问题 "python threading and performace?" .

(一般来说,可能有更好的方法。)

John La Rooy
Reply   •   4 楼
John La Rooy    14 年前

例如,通常的方法是这样的

try:
    value = cache[key]
except KeyError:
    value = cache[key] = redownload(key)
Thomas
Reply   •   5 楼
Thomas    14 年前

这一次我花了几个小时才弄明白我是什么时候在一个真正的程序中第一次遇到它的:

函数的默认参数是可变的静态值。

def foo(bar = []):
  bar.append(1)
  print(bar)

foo()
foo()

这将打印

[1]
[1, 1]