首页 文章 精选 留言 我的

精选列表

搜索[AI编程],共10000篇文章
优秀的个人博客,低调大师

Python 编程语言的核心是什么?

云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 为什么要问这个问题? 我想要用Python实现WebAssembly,这并不是什么秘密。这不仅可以让Python进入浏览器,而且由于iOS和Android都支持将JavaScript作为应用的一部分运行,因此Python也可以进入移动开发。想到这些我就觉得兴奋。 但是每当想到创建一个新Python实现的艰巨任务时,我就会不断地问自己: “Python究竟是什么?” 我们使用CPython已经很长时间了,以至于我怀疑我们大多数人都认为“ Python == CPython”。PyPy试图将兼容做到极致,所以他们打算实现CPython的实现细节。基本上,我所知道的大多数Python实现都会为通过CPython的测试套件而努力,并尽可能与CPython兼容。这就有点可怕了。 CPython实现的Python非常动态,它公开了许多东西,只有当你以某种方式使用解释器实现Python才有意义。例如,PyPy有一个基本的解释器使用JIT,但是你可以通过Python中的很多东西来迫使PyPy关闭JIT并坚持使用字节码。仅凭REPL就让Python变得十分动态,因为输入到REPL的所有内容都会由解释器动态地解析、编译和执行。 因此我开始思考:Python到底是什么的问题?这门语言的核心究竟是什么?究竟Python实现需要覆盖到哪些基本功能,才能成为人们心目中认可的Python实现?还有以我来看,将Python直接编译成WebAssembly的实现需要付出多少代价? Python是否需要REPL? 我真正开始思考这个问题是当我开始思考将Python编译成WebAssembly都需要什么的时候。这并不是要实现另一个解释器,而是从Python源代码产生静态的WebAssembly,并且它依然可以称为“Python”。 我知道的,通过eva()或compile()进行动态编译可能不容易实现,因为WebAssembly的安全模型会在加载时验证模块。这意味着没有办法在其他代码的内存空间内运行任意代码,这可能会加剧实现REPL的难度。 但这让我思考:Python真的需要REPL吗?别误会我的意思,它非常方便,但是我的意思是,如果某个实现不包含REPL,那么它还是Python吗?我认为无REPL的Python仍然是Python,只是缺少(可能是关键的)功能。 这不禁让我思考必须将Python的哪些部分视为“ Python”的想法。 没有locals()行不行?能够将定义的所有局部变量及其值都收集到一个字典中,这是非常动态的东西。如果你使用像CPython这种解释器,那么只需要从当前的执行帧里取一些东西就能获得locals。但在编译语言中,实现这一点需要大量工作,因为你必须知道应当何时收集这些信息,因为调用locals()的时候并不一定所有信息都存在。 如果有人重载了locals()怎么办?同样,在CPython中这也不是什么问题,因为builtins模块有一个__dict__属性,只需要重载它,就会向下传递到以后的调用中。但在编译语言中,做类似的检测需要大量的工作,最终会影响性能。 那么sys.settrace()呢?它会触发每个字节的回调,而如果代码已经编译,这一点是无法实现的。尽管你可以通过检查每行末尾是否设置了跟踪函数来模仿这一行为,但这似乎有点过了,因为绝大多数情况下这种钩子并不存在(尽管可以实现为编译器开关)。 那么sys._getframe()呢?编译语言并不一定能够直接访问每个执行帧,那么你还要不要模拟这一行为?由于任何函数都可以请求执行帧,你必须时刻准备着提供执行帧。 可见,Python中有很多东西加剧了编译的难度(因此Nuitka拥有更大的能力来应对这一挑战)。但是我敢打赌,上面提到的内容在99.9%的情况下都不会使用,因此,如果这些功能没有实现,那么是否仍可以将其视为“Python”? 具备多少兼容性才有意义? 这个问题我没有很好的答案。但是这个问题的答案标志着实现Python的难度以及与现有软件的兼容性。我会说,我认为WebAssembly不需要支持大量的Python软件。WebAssembly可以访问Rust和JavaScript等其他语言生态系统,因此你需要的某个东西完全有可能在其他语言中已经实现了。 我没有答案 也许我们可以开发一个将Python代码直接转换为WebAssembly并牺牲性能兼容性的编译器。也许我们可以开发针对WebAssembly设计的解释器,同时与先前已有的代码保持兼容性。也许可以仅在其WebAssembly工作中支持RustPython。也许Pyodide可以实现这一点。我认为这些都有可能,这些都有可能激发人们的兴趣,进而产生更好的结果。 对此,你怎么看呢? 原文:https://snarky.ca/what-is-the-core-of-the-python-programming-language/ 【云栖号在线课堂】每天都有产品技术专家分享!课程地址:https://yqh.aliyun.com/live 立即加入社群,与专家面对面,及时了解课程最新动态!【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK 原文发布时间:2020-07-14本文作者:Brett Cannon本文来自:“csdn”,了解相关信息可以关注“csdn”

优秀的个人博客,低调大师

(编程)10个Python练手小程序

【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。 2.程序源代码: for i in range(1,5): for j in range(1,5): for k in range(1,5): if( i != k ) and (i != j) and (j != k): print (i,j,k) 阿里云代金券2000元免费领取地址:https://promotion.aliyun.com/ntms/yunparter/invite.html新老阿里云账户均可领取!可用于购买阿里云服务器ECS、云数据库RDS、虚拟主机、安骑士、DDoS高防IP等100多云计算产品。 代金券自领取之日起,有效期是30天,请及时使用,过30天后还可以重新领取。 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。 2.程序源代码: bonus1 = 100000 0.1bonus2 = bonus1 + 100000 0.500075bonus4 = bonus2 + 200000 0.5bonus6 = bonus4 + 200000 0.3bonus10 = bonus6 + 400000 * 0.15 i = int(raw_input('input gain:n'))if i <= 100000: bonus = i * 0.1 elif i <= 200000: bonus = bonus1 + (i - 100000) * 0.075 elif i <= 400000: bonus = bonus2 + (i - 200000) * 0.05 elif i <= 600000: bonus = bonus4 + (i - 400000) * 0.03 elif i <= 1000000: bonus = bonus6 + (i - 600000) * 0.015 else: bonus = bonus10 + (i - 1000000) * 0.01 print 'bonus = ',bonus 【程序3】 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? 1.程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后 的结果满足如下条件,即是结果。请看具体分析: 2.程序源代码: include "math.h"main(){long int i,x,y,z;for (i=1;i<100000;i++) { x=sqrt(i+100); /x为加上100后开方后的结果/ y=sqrt(i+268); /y为再加上168后开方后的结果/ if(xx==i+100&&yy==i+268)/如果一个数的平方根的平方等于该数,这说明此数是完全平方数/ printf("n%ldn",i); }} '''import mathfor i in range(10000): #转化为整型值x = int(math.sqrt(i + 100))y = int(math.sqrt(i + 268))if(x x == i + 100) and (y y == i + 268): print i 题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊 情况,闰年且输入月份大于3时需考虑多加一天。 2.程序源代码: year = int(raw_input('year:n'))month = int(raw_input('month:n'))day = int(raw_input('day:n')) months = (0,31,59,90,120,151,181,212,243,273,304,334)if 0 <= month <= 12: sum = months[month - 1] else: print 'data error' sum += dayleap = 0if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): leap = 1 if (leap == 1) and (month > 2): sum += 1 print 'it is the %dth day.' % sum 【程序5】 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 1.程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换, 然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。 2.程序源代码: l = []for i in range(3): x = int(raw_input('integer:n'))l.append(x) l.sort()print l 【程序6】 题目:用号输出字母C的图案。 1.程序分析:可先用’’号在纸上写出字母C,再分行输出。 2.程序源代码: print 'Hello Python world!n'print '' 10for i in range(5): print ' ' print '' 10print 'n' 6 【程序7】 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个。不同字符,图形不一样。 2.程序源代码: a = 176b = 219print chr(b),chr(a),chr(a),chr(a),chr(b)print chr(a),chr(b),chr(a),chr(b),chr(a)print chr(a),chr(a),chr(b),chr(a),chr(a)print chr(a),chr(b),chr(a),chr(b),chr(a)print chr(b),chr(a),chr(a),chr(a),chr(b) 【程序8】 题目:输出9*9口诀。 1.程序分析:分行与列考虑,共9行9列,i控制行,j控制列。 2.程序源代码: include "stdio.h"main(){ int i,j,result; printf("n"); for (i=1;i<10;i++) { for(j=1;j<10;j++) { result=ij; printf("%d%d=%-3d",i,j,result);/-3d表示左对齐,占3位/ } printf("n");/每一行后换行/ }}for i in range(1,10): for j in range(1,10): result = i * j print '%d * %d = % -3d' % (i,j,result) print '' 【程序9】 题目:要求输出国际象棋棋盘。 1.程序分析:用i控制行,j来控制列,根据i+j的和的变化来控制输出黑方格,还是白方格。 2.程序源代码: include "stdio.h"main(){int i,j;for(i=0;i<8;i++) { for(j=0;j<8;j++) if((i+j)%2==0) printf("%c%c",219,219); else printf(" "); printf("n"); }}import sysfor i in range(8): for j in range(8): if(i + j) % 2 == 0: sys.stdout.write(chr(219)) sys.stdout.write(chr(219)) else: sys.stdout.write(' ') print '' 【程序10】 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 1.程序分析:用i控制行,j来控制列,j根据i的变化来控制输出黑方格的个数。 2.程序源代码: import syssys.stdout.write(chr(1))sys.stdout.write(chr(1))print '' for i in range(1,11): for j in range(1,i): sys.stdout.write(chr(219)) sys.stdout.write(chr(219)) print ''

优秀的个人博客,低调大师

OCaml 4.10.0 发布,函数式编程语言

OCaml 4.10.0 发布了。OCaml 是一种快速、简洁、而强大的应用程序开发语言,开发工具包含交互式顶层解释器,字节码编译器以及最优本地代码编译器。Ocaml 有一个巨大标准库,使得可以像Python或者 Perl 语言一样可以方便地开发各种应用程序。 更新内容如下: 新的最适合主堆的分配器 OCaml 多核的初步运行时工作 现在在配置时强制执行不可变的字符串 用户定义的索引运算符,用于多维数组 即将推出:statmemprof,一个新的统计内存分析器 手册的各种改进 GADT 更精确的穷举性检查 许多错误修复 更新说明:https://github.com/ocaml/ocaml/releases/tag/4.10.0

优秀的个人博客,低调大师

静态类型编程语言

以下由中文社区翻译,能力有限,如有翻译错误,欢迎加入 QQ 群指正! Nim 团队很高兴为大家带来 1.0.4 版本发布的消息, 这是我们在 Nim 1.0.0 之后发布的第二个补丁版本。 想要了解更多关于 1.0.0 版本的细节,可以查看我们两个月前 版本发布说明。 距离前一个版本的发布尽管只是过去了一个月的时间, 但这次的版本已经包含了超过 70 次新的提交, 新修复了 20 个问题, 让我们的 1.0 版本变成了更好的样子。 安装 1.0.4 如果你已经用 choosenim 安装了之前版本的 Nim , 升级到 Nim 的 1.0.4 版本会非常简单: $ choosenim update stable 如果你还没有安装 choosenim , 你可以通过 这些说明 来下载和安装 choosenim, 当然你也可以按照我们的 安装 页面直接安装。 更新日志 你可以 在我们的 GitHub 仓库中 查阅此版本的变更日志以及 Nim 的其余源码。 附《更新日志》 语言层面的变更 模仿早期版本的 Nim ,在运行时取消了对无符号整数转换的检查。 文档中已针对这一改进做出了说明。查看 https://github.com/nim-lang/RFCs/issues/175 了解更多细节 (#12688) 添加了 or detectOs(Manjaro),这样当检测到系统为 Manjaro 时,调用原生的包管理器会使用 pacman 进行包管理 (#12587) --os:ios 编译指令现在也代表了 macosx (#12585) 导出了 nim.cfg 解析器,现在其他工具也可以调用 readConfigFile 了 (#12602) BUG 修复 修复了 “在 OSX 上多次调用后,gorgeEx() 失败”的问题 (#12337) 优化和加强了 posix 模块 (#10723) 修复了 “Nim 的语法检查 允许使用 gorgeEx(),但不允许 writeFile()” 的问题,现在这两个都被提示 don’t run staticExec for ‘nim suggest 了 (#12491) 修复了 “一个算数的低级错误: -3 mod 7 == 3” (#12514) 修复了 “后端集成文档中 c2nim 链接失效” 的问题(#12537) 修复了 “‎具有默认值的泛型参数会导致不正确的泛型类型解析‎” 的问题 (#12528) 修复了 “再次出现的问题: compiler/vmgen.nim(354, 20) false leaking temporary 10 slotTempInt [AssertionError] (#12547) 修复了 “Windows 上的 64 位(只有在 64 位上有问题) nim 编译/链接断开” (#12536) 修复了 “除了最新的 devel 版本No =destroy for elements of closure environments other than for latest devel –gc:destructors” (#12577) 修复了 “[1.0.0] 无法使用 –cpu:avr 进行编译” (#12395) 修复了 “使用无效的对象变体会导致编译器崩溃” (#12379) 修复了 “import 之前写的编译指示会被静默忽略” (#5050) 修复了 “ strformat + asyncdispatch + const 同时使用会报错” 的问题 (#12612) 修复了 “--nimblePath 是附加的,需要一个无痛的解决方案” (#12601) 修复了 “nim.cfg 中 –define:FOO:VAL 的语法没有文档或者缺失” (#12367) 修复了 “使用宏生成的 vm 字符串无法正常使用” (#12670) 修复了 “staticRead() 引入的静态文件变更时,会强制触发重新编译。” (#12663) 修复了终止处理程序中调用 throw 引发的崩溃 (#12572) 修复了用于 具有字符串字段的对象 的 newLit (#12542) 文档更新 给 Math 模块添加了文档 (#12460) 修复了许多无效的链接,尽量将链接替换为了链接到文档内部 (#12463) sequtils:在示例中替换掉了已经遗弃的 ‘random’ 用法 (#12515) 给整型添加了文档 (#12513) 修复了代码风格的错误 (#12545) 修正文档和注释中的几个错误 (#12553) 添加文档以更好地区分 getProjectPath, getCurrentDir 和 currentSourcePath (#12565) doc/tut3.rst: 修复了介绍中的错别字 (#12607) 添加了指向 packaging 和 distro 页面的链接 (#12603) 修复了 $*(dt: DateTime) 的说明 (#12660) 在 manual.rst 中对 experimental / parallel 加入了示例以明确区别 (#12472) 修复手册中错误的章节层级关系 (#12724)

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册