2016-04-17 19 views
-4

我需要学习Python来完成一些数据操作。当我阅读这些文件时,那里的文件写得非常好,所以我对一些隐藏的信息感到非常沮丧。例如:Python文档中的隐藏规则是什么?

  1. 在Python官方文档

    random.sample(population, k)

    什么是人口?它是什么类型的?根据以下内容,它似乎是一个列表?那么,这是函数接收的唯一有效类型吗?

  2. 官方numpy的文件: numpy.random.random_sample

    标题是numpy.random.random_sample(size=None)和下段说,

    size: int or tuple of ints, optional

    Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn.

    是什么意思?所以,实际上有两个参数,第一个是尺寸,第二个是形状,它是可选的?所以如果我想通过2个参数,我应该写random.random_sample(5,[m,n,k])还是random.random_sample(5, m, n k)

这些文件非常简短,作者似乎很害羞地演示该库的用法。他们似乎总是试图隐藏我们的某些东西。我想知道是否有一些我应该学会理解所有这些魔法的Python习俗?

+0

Python是动态类型的,所以有几种类型(例如'list','tuple',...),可以是一个'population' - 正如文档所说的,*“sequence or set”*。在你的第二个例子中,你需要'((m,n,k))',否则你显然传递的不止是单个记录的参数。它是*“int **或**整数”*。我认为这主要是一个阅读理解问题,而不是隐藏的规则或魔法。 – jonrsharpe

+0

杰恩说。通常,好的Python程序员编写的函数将接受任何有意义的类型。所以'random.sample'将接受_population_任何序列类型,或者实际上任何具有明确定义长度的迭代。所以你可以传递它一个列表,元组,甚至是一个集合。或者你自己的自定义对象可以像一个定义明确的长度的迭代器那样工作。 –

+0

请不要沮丧。取而代之的是Jupyter/IPython笔记本!使用内部帮助并尝试一些事情。 –

回答

0
  1. 被采样的人口类型大致是“可迭代的”。我假设底层实现正在进行油藏采样,这只需要数据可以通过一次。如果你喜欢,你可以传入一个元组。

  2. 尺寸参数可以是符合文档的整数或“形状”(3元组)。形状的三个组成部分将被相乘在一起给出大小。因此,该函数只接受一个参数。

Python是不是静态类型,因此没有固定的类型特定的参数“必须”有,而且被调用的函数可以自由地区别对待不同的输入。

在链接的numpy文档页面上有两个调用函数的示例。

  1. 我没有看到使用简单循环和调用随机数生成器的任何错误。可能有一个库函数,但这只会影响代码和两行代码之间的区别。没什么大不了。
+4

FWIW,传递给'random.sample'的迭代器需要有一个长度,所以你不能将它传递给一个生成器,否则会引发'TypeError:'generator'类型的对象没有len()'。 –

0

请参阅文档中的教程,这些是在进一步学习之前必须清楚的基本知识。

Q1。熟悉鸭打字。它是Python,Ruby等动态类型语言的核心内容之一。只要它嘎嘎声,它就是一只鸭子。所以这里的参数可以是任何序列或集合。 Q2302。只要接收函数可以处理它,就没关系。所以如果你通过int它可以处理它,它也可以处理tuple。所以就语义学而言,这很好。

+0

第二个不是鸭子打字;它们是两种不同的水鸟,更像是多态性。 – jonrsharpe

+0

@jonrsharpe是的。这就是为什么我没有复制/粘贴第一行。“接收函数认为它是一只鸭子......”。编辑它。谢谢。 –

+0

@jonrsharpe我会称它为鸟类打字或其他东西。 –