给你超能力的伴侣

sidekick的Python项目详细描述


快速启动

从pip安装… 啊!

并导入几个重要的名称

啊!

下面的示例展示了您所能做的事情。

斐波那契数

让我们从经典开始。这就产生了 斐波那契数

啊!

说明

iterate 创建生成每个数字的无限迭代器 通过将第一个参数中的函数应用于生成的最后n个元素 按顺序。 n 由初始序列的大小给出,其中 我们的例子是2。斐波那契序列显然是由 最后两个元素。

我们使用magic对象 x y 构造求和函数。 它们是函数因子,返回与表达式对应的lambda 他们参与其中。因此, x+1 对应于 lambda x:x+1 以及 x+y lambda x,y:x+y 。如果你熟悉 haskell家族,它应该类似于u an infix operator的 操作符部分语法<;https://wiki.haskell.org/section

类似地,将许多有用操作包装在列表中的 l 魔术对象。 在上面的例子中,l[:10]创建一个返回列表片段的函数 在0到10之间(不包括)。 l[0] 将创建一个函数来获取 第一个元素, l[::2] 将每两个元素提取一次,依此类推。

最后,管道符号将左边的参数传递给 右边。这只适用于启用了sidekick的函数和模拟 unix shell中的管道。也许有一天python可以拥有一个本地管道操作符 像 其他函数式语言<;https://elm-lang.org/docs/syntax'35;operators>;

黄金比例

上面的代码片段只使用前10个斐波那契数。让我们继续 遍历序列以找到与黄金比率很好的近似值。

>>> ratios = (y / x for (x, y) in sk.window(2, fibonacci))
>>> sk.until_convergence((X == Y), ratios) | sk.last
1.618033988749895

说明

窗口 从 原始序列,例如, sk.window(2,[1,2,3,4]) ==>; (1,2),(2,3),(3,4) 。 生成器的理解然后使用这些连续元素计算比率。

最后,第二行遍历一个序列,直到谓词函数 在sk.until_convergence的第一个参数中返回true。而不是 设置一些小的变化间隔,我们测试相等性并等待 因为两个计算值之间的差异小于浮点值 精度。

欧拉数

以下代码片段使用泰勒公式计算指数 $exp(x)=和{n=0}^{infty}分形{x^n}{n!}$计算欧拉数

>>> factorials = sk.iterate_indexed((X * Y), 1, start=1)
>>> partial_sums = sk.sums(map((1 / X), factorials))
>>> sk.until_convergence((X == Y), partial_sums) | sk.last
2.7182818284590455

说明

iterate_indexed 迭代函数 f(i,x) 传递两个索引 迭代和x的最后一次求值以生成下一个结果。通过写作 写下几个例子很容易看出给定的参数会产生 阶乘序列。

第二步创建一个部分和序列 阶乘的最后,我们迭代直到收敛,测试两个连续的 元素是相等的。

埃拉托舍内斯筛

《埃拉托舍内斯的筛》<;https://en.wikipedia.org/wiki/sieve\u of埃拉托舍内斯>; 是一个简单的算法,用于选择连续整数列表中的所有素数。 列表必须以第一个质数p(a.k.a.,2)开头,并通过排除 每个P元素。下一个有效数字将是质数p'。这个 对每个新的质数重复该过程,直到到达列表的末尾。

我们会这样做,只是最初的数字列表是无限的。

>>> def sieve(nums):
...     p, nums = sk.uncons(nums)
...     yield p
...     yield from sieve(n for n in nums if n % p != 0)
>>> primes = sieve(N[2, 3, ...])
>>> primes | L[:10]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

说明

sieve函数中的第一行使用 uncon 提取第一个 元素并返回对其余元素的迭代器。正如我们 如前所述,第一个元素是素数,所以我们只给出它。这个 函数的最后一行将筛选应用于排除 p的倍数。

最后,我们用 2,3,… 来调用sieve。数字是创建的 由专门用于创建数字序列的特殊对象 n 。 它非常灵活,在上面的例子中 创建从2开始的自然数并按步骤无限期进行 1。事实上,我们可以很容易地使代码的操作速度提高一倍 用 n[2,3,5, …] 初始化筛子,使其按步骤移动 两个而不是一个。这样可以避免检查偶数 前进不是质数。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在表被注释到配置之前获取表的元数据?   java滚动条不会出现在JList上   java JOGL监视器GPU内存   java为什么要使用RecyclerView onDraw延迟   java定制Oppo Reno 2 Z CPH1951(手机型号)的固件(闪存文件)   java自定义线程池执行器   java如何解决发布版本中重复的jar条目[com/安卓/volley/R.class]?   java如何使用Bukkit API触发事件?   java在blazemeter jmeter RTE插件中使用ctrl+w输入   C#/Visual Studio的java JDT等价物   java为什么当maxread值很大而收到的消息数量很小时,卡夫卡消费者会无限期消费?   java游戏2。x:包含模板列表的绑定模型   带压缩的java日志旋转   运行时。exec用java运行程序读取它正在做什么