duangsuse::Echo
713 subscribers
4.24K photos
127 videos
583 files
6.46K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
duangsuse::Echo
clipboardd.py
#sysadmin #linux 这个
usbIP=ip route show 0.0.0.0/0 |awk '{print $3}'
usbTCP=12345
alias usbNc="ncat -i 1 ${usbIP} ${usbTCP} 2>/dev/null"
if [ "$1" = get ]; then
printf -|usbNc
echo
elif [ "$1" != '' ]; then
echo -n +echo "$1"|wc -c:"$1" |usbNc
fi

客户端脚本都写了🌚(附注:这里发不出反引号,等宽字部分就是被反引住 `` 的部分……
后来发现 nc -i 1s 及 2>/dev/null 的重定向可以一起去掉,明明不需要延时的(我脑抽了以为 stdin 重定向是等于启动新 nc 然后键入这些数据,不会EOF)
clip.sh
230 B
#tool #code #sysadmin #net 可惜不支持发文件🤔 当然这个也简单,本质上和发剪贴板没区别,只是剪贴板必须是字符串,文件的话不知如何保存好(可以开 intent)
Forwarded from wjm
不好意思有事我来打扰了。。。
https://t.me/dsuse/15301
请问一下这个对话发生在的群组是什么方便分享么(
Forwarded from dnaugsuz
@Pythonzh
Merlin Hong 应该是那个有名的红姐,擅长程序设计语言理论和 F# Elixir 函数式编程什么的
Forwarded from dnaugsuz
我当然有转发记录的
Forwarded from dnaugsuz
奇怪,我好像被封了
Forwarded from dnaugsuz
莫名其妙,犯啥事了。
算了,他们日常滥权
Forwarded from dnaugsuz
算了呗,凭他们对 Python 元编程动态性的那一点理解,俺继续做俺的项目,不是第一次了

就是很好奇不是立刻封的,那是为什么封的呢……
Forwarded from dnaugsuz
一群不干好事只晓得语言鄙视链的人,以为自己多聪明,聪明反被聪明误

以为自己能弄出那些别人早已组织好公开的 pattern 就多了不起,其实不过是一群 copycat ,真正搞懂了什么呢
Forwarded from wjm
鄙视链总感觉是在浪费时间。。我个人认为语言没那么重要,能完成想要的工作就行了
Forwarded from dnaugsuz
当然啊,他们的管理员特别不好相处,肯定是有些激进的管理员把我封了,之前就有过争议,懒得再说了
Forwarded from dnaugsuz
那我觉得应该去捕蛇裙🤔
因为我还算日常写py的
Forwarded from wjm
说真的感觉这个更友善。。
duangsuse::Echo
哇原来我之前在 #Haskell 里看到的就是这种…… 这个大佬很厉害 https://teek.readthedocs.io/en/latest/_modules/teek/_tcl_calls.html#init_threads def _pairs(sequence): assert len(sequence) % 2 == 0, "cannot divide %r into pairs" % (sequence,) return zip(sequence[0::2], sequence[1::2])…
from itertools import islice
def zipWithNext(xs): return zip(xs, islice(xs, 1, None))

list(zipWithNext([1,2,3]))
==[(1, 2), (2, 3)]

#Python
关于 fibonacci 数列, #Haskell 里容易定义:
fibs = 1:1:(zipWith (+) fibs (drop 1 fibs))
这是基于 Haskell 的可复现(无副作用/纯)序列+惰性求值实现的,而 Python 里若用等价的 fibs = chain([1,1], map(operator.add, zip(fibs, islice(1,None)))) 不能成功——表达式组织出generator对象的关键在于 map(add, zip(xs, xs[1:])) 里 zip 的流视口,它肯定要引用靠 zip() 本身生成的数字。

再看 Haskell 的定义等式,其生成式缓存是全局的(当然实现法有很多种但),可以理解为 fibs, (drop 1 fibs) 持 length -2、-1 的索引(此时就没有“预支”流导致循环引用的问题)
fibs = [1,1]
def _fibs_gen(i,n):
fibz = islice(fibs,i,None)
fibz1 = islice(fibz,1,None)
fibs[i:i+n] = map(operator.add, zip(fibz,fibz1))
def gen(buf, op, n_chunk=5):
i0 = 0
while True:
op(i0, n_chunk)
i0 += n_chunk
yield* buf[i:i+n
]

如果想写在一行内也可以,但需要 iself() 提供一个隐式上下文的流位置(才能引用自身 不然只能从流头开始),既然这样也就不得不使用 gen() 生成带视口的流了。
举个用例,当然索引的可变 boxed ref 弄 it=[i] 就行,关键在于让惰性流(其参数 lambda 的参数1)知道自己在对应 iself() 的什么位置就行。
fibs = iself(lambda fibs: chain([1,1], map(add, zip(fibs, drop(1,fibs)) )) )

Haskell GHC 可能没有这样简单,或许它是对 (drop 1 fibs) 进行了仅 1层 的惰性求值?这样性能很差,但写起来更有意思
(不对…… 理解错了, (drop1 fibs) 实际上不需要对「未求值的项」进行计算,它从一开始的 (1:1:) 就已经落后于序列尾2项了)
(所以说有些看起来了不得的东西原来只是太晦涩、不直接了吗……到底还是要缓存)

一般来说
fib 1 = 1
fib 2 = 1 -- (f 3) = (f 2)+(f 1)
fib n = (fib n-1)+(fib n-2)
#Haskell #code

这是递推法,理论上无缓存性能很渣(当然真的函数式里 memo,cps 属于基础),而上面实现的 py 版则是动态规划(迫真)