首页 >>  正文

python为什么没有指针

来源:baiyundou.net   日期:2024-09-21

整理 | 郑丽媛

出品 | 程序人生(ID:coder_life)

据历史悠久的汇编语言是程序员最讨厌的编程语言(占比 37%),其次便是 C++(17%)和 C(16%)。

作为一门面向机器的程序设计语言,汇编语言固然十分精细,但对于程序员而言却不太友好——不好记忆,里面也没有指针的概念,所有的变量、函数都由栈或堆上的偏移地址所代替。与高级编程语言相比,汇编在可读性、开发效率和可移植性上显然存在不足。

所以,我们自然觉得:都 2022 年了,在众多高级编程语言的包围下,还会有人将汇编作为程序员入门的第一个编程语言吗?有的,前阵子一位 Reddit 用户(以下用“小 R”代称)就发帖称:“我的叔叔,一位前程序员,建议我从汇编语言学起……”

建议原因:应该先敲下最难的“钉子”

小 R 表示,TA 最近对学习编程有点兴趣,因此找了之前做程序员的叔叔,想问问有啥入门建议,结果 TA 叔叔开口就是:“一定要远离那些简单的高级编程语言,如 Python 或 Ruby。”

叔叔对小 R 解释道,当年他第一次学习基础代码时,一度认为自己是个天才,因为他几天内就很好地掌握了新技能。直到后来他又接触到了 C 语言,才完全颠覆了他的自我认知——他被“狠狠”难住了一段时间,而且之前掌握的那些基础技能在学习 C 语言上完全没用。

“简单的编程语言显然不会教你任何关于编程和计算机究竟是如何工作的知识。你现在还年轻,有一个能吸收很多知识的‘海绵大脑’,还有许多互联网指南可参考,你应该先敲下最难的‘钉子’,把汇编或者 C 作为第一门语言,以便之后对任何事情都可以轻松学习。”

(图片下载自视觉中国)

不必对高级编程语言避之不及

显然,小 R 叔叔的这番言论跟现实中大多程序员的选择相悖,小 R 也因此茫然地将问题抛给了广大网友:“你们对此的看法是什么?”

部分网友认为,能说出这种观点的“叔叔”肯定是大龄程序员:

“他告诉你要以一种他自己都没尝试过的方式去做,而这个观点仿佛来自 30-40 年前。”

“你叔叔太老派了。如果他是在 1980 年之前毕业的,那可以理解,毕竟汇编在当时很常见。但到 1990 年以后,已经逐渐有更多的选择了。”

有网友调侃道,这种学习方法太过于“追本溯源”了:

“这感觉就像是说,在你开车之前,你首先要知道它的每一个部分是如何工作的。”

“既然这样,那就先学半导体物理,然后学晶体管,然后是 CMOS 逻辑,然后是逻辑门,然后是数字电路,然后是计算机构成,这样更能彰显你叔叔的‘厉害’。”

话虽如此,但每一门编程语言能流传至今,必定有其的意义,汇编也是如此,现在操作系统中依旧还有汇编的身影。被许多程序员厌恶的汇编语言,更适用于底层硬件,如单片机、工业控制、实时控制等,它更为精简,运行效率也更高。

两年前,曾有一位学过汇编的程序员分享道:

”我也学过汇编,做一个程序要写好多条命令,而且思路要清晰,对程序员智商要求非常高。我以前单位有几个八十年代大学毕业的程序员,智商真的是非常高。现在的编程真的很傻瓜化,从没学过编程的短期内也能很快自学编程。“

平心而论,学好汇编确实能深入理解计算机底层原理,但这并不意味着就一定要对高级编程语言避之不及——如今,高级编程语言的开发效率、适用范围都远超过汇编,更符合现在企业所追求的高效。

最后引用一位网友的建议:“如果你想成为编译器开发者或硬件工程师这类人,你可以好好学汇编;但如果你只是从事软件开发,最多根据自身能力适当了解一下汇编即可。”

那么,作为程序员的你,接触并学习的第一门编程语言是什么呢?

参考链接:https://www.reddit.com/r/learnprogramming/comments/wedgo2/my_uncle_a_former_programmer_has_recommended_that/

— ","force_purephv":"0","gnid":"9ffca47ffc4e9f7d1","img_data":[{"flag":2,"img":[{"desc":"","height":"80","s_url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752_1.gif","title":"","url":"https://p0.ssl.img.360kuai.com/t0186957a1ca5352752.gif","width":"640"},{"desc":"","height":"624","title":"","url":"https://p0.ssl.img.360kuai.com/t01a035ced8d6ed2153.jpg","width":"1080"},{"desc":"","height":"698","title":"","url":"https://p0.ssl.img.360kuai.com/t014ea920a33c5a4e05.jpg","width":"1024"}]}],"original":0,"pat":"art_src_1,fts0,sts0","powerby":"hbase","pub_time":1665303129000,"pure":"","rawurl":"http://zm.news.so.com/bba21c3c4c9e4180a85a03ad1b6d9fdc","redirect":0,"rptid":"cad2e59f079b569f","s":"t","src":"CSDN","tag":[],"title":""叔叔建议我远离 Python,从汇编语言学起......"

成郑沾1192该安装的python步骤都做到 python2.6为啥会无此指令?? -
柯狗霞18660847103 ______ 1. 你的 python2.6 安装到哪个目录了,是否是在你默认的搜索路径里($PATH)? 如果不在,需要使用全路径,比如 /path/to/my/python262. 你的python 可执行文件的名字是否叫 python26? 最好确认一下.请确认你用的名字就是可执行文件的名字.

成郑沾1192为什么用PyCharm编辑Python代码的时候,代码没有错,为什么代码下面还是有波浪线呢? -
柯狗霞18660847103 ______ 这个是因为你的语法不复合PEP8 Python 编码规范,比如方法名有大写,类名小写,等等,你可以把鼠标指到那个波浪线,会有提示的. File -> Settings -> Editor -> Inspections 这里面有各种脚本的设置项,找到 “Python”的设置 点开...

成郑沾1192python for循环为什么没有定义 -
柯狗霞18660847103 ______ 这是一个好问题!我是这样理解的:编程语言基本上都是英语为核心的,在英语中 for 的中文意思有多个,常见的是“对于”和“为了”和“因为”.for 循环似乎应该理解为“对于(每一个)” for i in range(10): print i 但是我们还能看到其他语言中有 ·foreach· 关键字,这个似乎更加贴切,因为从语义上 for i in range(10): print i 就是“对于在[0,10)范围内的每一个数,打印这个数”的意思.如果从英语上似乎用 foreach更加贴切.

成郑沾1192什么是猴子补丁 -
柯狗霞18660847103 ______ 在 Python 语言中,出现了个“ monkey-patches” 的词,直译就是“猴子补丁”,这个合成词两个部分,就其组成的单个部分而言都是常见词:monkey(猴子)、patches(补丁);那么 monkey-patches 到底是什么意思呢?就其词源(...

成郑沾1192电脑重装后再装python 发现右键没有python IDLE了 怎么办 . -
柯狗霞18660847103 ______ 额,直接进去安装目录内, 就在你的安装目录Lib\idlelib里面的 有一个叫做idle.bat的批处理文件,可以试一下看看是不是呢. 也可以通过执行下面两行脚本: import sys print sys.path 查看一下详细的系统变量,会显示出来你的Python的一些变量的.

成郑沾1192python,用 - - import--()怎么写语句“from sys import stdin”? -
柯狗霞18660847103 ______ 他们都错了. from sys import stdin之后你的这个scope的dict里是增加了stdin啊. 所以应该是: temp=__import__('sys') stdin=temp.stdin del temp

成郑沾1192python 中为什么不需要重载 -
柯狗霞18660847103 ______ 简单来说,Python中为什么不需要重载,重载要解决的是参数类型和参数个数的问题,对于类型,python不像是c语言整型要写int,字符串要写str,,,这些python都不需要.那么需要解决的就是传递参数个数问题,此时python可以传递列表呀,字典呀,可以使用*arg和**args呀,所以python根本不需要重载.

成郑沾1192为什么在python中有全局解释器锁,但Java,C++中却没有 -
柯狗霞18660847103 ______ Python语言并没有GIL.CPython(以及试图与CPython完全兼容的)实现中有GIL.PyPy的主线中也有GIL.Jython、IronPython都没有GIL.Java语言并没有GIL.JVM规范也没有GIL.目前JVM最主要的实现HotSpot VM中没有使用GIL,而是在...

成郑沾1192python 函数的参数 定义get - type的时候有个letter参数,使用函数的时候没指定参数怎么也可以啊 -
柯狗霞18660847103 ______ Python中函数参数的定义主要有四种方式:1. F(arg1,arg2,…) 这是最常见的定义方式,一个函数可以定义任意个参数,每个参数间用逗号分割,用这种方式定义的函数在调用的的时候也必须在函数名后的小括号里提供个数相等 的值(实际参数...

成郑沾1192Python是什么? -
柯狗霞18660847103 ______ 也许最初设计Python这种语言的人并没有想到今天Python会在工业和科研上获得如此广泛的使用.著名的自由软件作者Eric Raymond在他的文章《如何成为一名黑客》中,将Python列为黑客应当学习的四种编程语...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024