Python的重要语言特性(习语)是什么
我想知道StackOverflow社区认为Python的重要语言特性(习惯用法)是什么。将程序员定义为Pythonic的特性 Python(pythonic)习语——“代码表达式”,是Python语言的自然或特征 另外,所有Python程序员应该尽早学习哪些习惯用法? 提前谢谢 相关的:Python的重要语言特性(习语)是什么,python,idioms,Python,Idioms,我想知道StackOverflow社区认为Python的重要语言特性(习惯用法)是什么。将程序员定义为Pythonic的特性 Python(pythonic)习语——“代码表达式”,是Python语言的自然或特征 另外,所有Python程序员应该尽早学习哪些习惯用法? 提前谢谢 相关的: 与列表用法相关的所有内容。 理解、生成器等。本页涵盖了所有主要的python习惯用法:让我印象特别深刻的两件事是动态类型和python中使用的各种列表,特别是元组 Python对列表的痴迷可以说是LISP
理解、生成器等。本页涵盖了所有主要的python习惯用法:让我印象特别深刻的两件事是动态类型和python中使用的各种列表,特别是元组 Python对列表的痴迷可以说是LISP-y,但它有自己独特的风格。像这样的一行:
return HandEvaluator.StraightFlush, (PokerCard.longFaces[index + 4],
PokerCard.longSuits[flushSuit]), []
甚至
return False, False, False
只是看起来像Python,其他什么都没有。(从技术上讲,在Lua中也可以看到后者,但Lua通常是相当Pythonic的。)从更高级的角度来看,理解Python如何在内部使用词典。类、函数、模块和引用都只是字典上的属性。一旦理解了这一点,就很容易理解如何使用强大的uuu getAttr\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu和uuuuuuuuuu call\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu “你能适应的规则 手掌上放着一大袋 钩子” python中的几乎所有内容都遵循相同的简单标准。一切都是可访问、可更改和可调整的。语言级别的元素很少 例如,len(数据)内置函数
len(data)
只需检查data.\uu len\uu()
方法,然后调用它并返回值。这样,len()
就可以在任何实现\uuuu len\uuuu()
方法的对象上工作
首先学习类型和基本语法:
dir()
函数\uuuu内置\uuuuu
\uuuu len\uuuu
这样的覆盖(有很多)永远不要忘记Python的禅宗(蒂姆·彼得斯)
装饰师得到我的选票。你还可以在其他地方写一些类似的东西:
def trace(num_args=0):
def wrapper(func):
def new_f(*a,**k):
print_args = ''
if num_args > 0:
print_args = str.join(',', [str(x) for x in a[0:num_args]])
print('entering %s(%s)' %(f.__name__,print_args))
rc = f(*a,**k)
if rc is not None:
print('exiting %s(%s)=%s' %(f.__name__,str(rc)))
else:
print('exiting %s(%s)' %(f.__name__))
return rc
return new_f
return wrapper
@trace(1)
def factorial(n):
if n < 2:
return 1
return n * factorial(n-1)
factorial(5)
Python中的一个重要习惯用法是docstrings 每个对象都有一个_doc__属性,可用于获取该对象的帮助。您可以在模块、类、方法和函数上设置_udoc__;属性,如下所示:
# this is m.py
""" module docstring """
class c:
"""class docstring"""
def m(self):
"""method docstring"""
pass
def f(a):
"""function f docstring"""
return
x = 5
""" pseudo docstring for x """
Let's instantiate our class::
>>> a=Something(text="yes")
>>> a.text
yes
Now call this method and check the results::
>>> a.canify()
>>> a.text
yes, I can
import timeit
def foo(x, y, z):
return x**y % z # Can also be 'pow(x, y, z)' which is way faster.
timeit.timeit('foo(5, 6, 3)', 'from __main__ import *', number = 100)
# timeit.timeit(testcode, setupcode, number = number_of_iterations)
现在,当您键入help(m)
,help(m.f)
等时,它会将文档字符串打印为帮助消息
因为它只是普通对象内省的一部分,所以可以由文档生成系统(如epydoc)使用,也可以由unittest用于测试目的
它也可以用于更非常规(即非惯用)的用途,如英语中的语法
我更感兴趣的是,尽管在大多数对象上,doc是只读属性,但您可以在任何地方使用它们,如下所示:
# this is m.py
""" module docstring """
class c:
"""class docstring"""
def m(self):
"""method docstring"""
pass
def f(a):
"""function f docstring"""
return
x = 5
""" pseudo docstring for x """
Let's instantiate our class::
>>> a=Something(text="yes")
>>> a.text
yes
Now call this method and check the results::
>>> a.canify()
>>> a.text
yes, I can
import timeit
def foo(x, y, z):
return x**y % z # Can also be 'pow(x, y, z)' which is way faster.
timeit.timeit('foo(5, 6, 3)', 'from __main__ import *', number = 100)
# timeit.timeit(testcode, setupcode, number = number_of_iterations)
文档工具(如doctest)可以提取它们并正确设置它们的格式(而不是保留在代码格式中的普通注释)。另一件你不能尽早开始的事情可能是测试。这里特别是doctest是一种通过同时解释代码来测试代码的好方法 doctest是一个简单的文本文件,包含一个交互式解释器会话和如下文本:
# this is m.py
""" module docstring """
class c:
"""class docstring"""
def m(self):
"""method docstring"""
pass
def f(a):
"""function f docstring"""
return
x = 5
""" pseudo docstring for x """
Let's instantiate our class::
>>> a=Something(text="yes")
>>> a.text
yes
Now call this method and check the results::
>>> a.canify()
>>> a.text
yes, I can
import timeit
def foo(x, y, z):
return x**y % z # Can also be 'pow(x, y, z)' which is way faster.
timeit.timeit('foo(5, 6, 3)', 'from __main__ import *', number = 100)
# timeit.timeit(testcode, setupcode, number = number_of_iterations)
如果例如a.text返回不同的内容,则测试将失败
doctest可以位于docstring或独立文本文件中,并通过使用执行。当然,也可以使用更知名的单元测试。这里有一个可以帮助您。两者之间的区别是什么:
[ foo(x) for x in range(0, 5) ][0]
及
答复:
在第二个示例中,foo只被调用一次。如果foo有副作用,或者用于构造列表的iterable很大,这可能很重要。使用字符串替换:
name = "Joe"
age = 12
print "My name is %s, I am %s" % (name, age)
当我不在Python编程时,简单的使用是我最怀念的。
< P>个人,我很喜欢用缩进定义Python语法,而不是用“开始”和“结束”(如微软的Basic和Visual Basic——我不喜欢这些)或者使用左、右括号(如C、C++、java、Perl—I一样)。 这真的让我很惊讶,因为尽管缩进对我来说一直很重要,但我并没有对它制造太多的“噪音”——我和它一起生活,而且它被认为是一种能够读懂别人的“意大利面”的技能此外,我从未听过其他程序员建议将缩进作为语言的一部分。直到Python!我只希望我首先意识到这个想法 对我来说,这就好像Python的语法迫使您编写好的、可读的代码好吧,我要离开我的肥皂盒。;-我认为在线教程和书籍只谈论做事,而不是用最好的方式做事。随着