精华内容
下载资源
问答
  • L = [ i*i fori inrange(5) ]forindex, data inenumerate(L, 1):print(index, ':', data)去除 import 语句和列表的定义,实现同样的功能,不使用 enumerate 需要 4 行代码,使用 enumerate 只需要 2 行代码。...

    L = [ i*i fori inrange(5) ]

    forindex, data inenumerate(L, 1):print(index, ':', data)

    去除 import 语句和列表的定义,实现同样的功能,不使用 enumerate 需要 4 行代码,使用 enumerate 只需要 2 行代码。如果想把代码写得简洁优美,那么,大家要时刻记住:在保证代码可读性的前提下,代码越少越好。显然,使用 enumerate 效果就好很多。

    (2)any

    在内置函数中,sort、sum、min 和 max 是大家用得比较多的,也比较熟悉的。像 any 和 all 这种函数,大家都知道,并且觉得很简单,但是使用的时候就想不起来。我们来看一个具体的例子。

    我们现在的需求是判断 MySQL 中的一张表是否存在主键,有主键的情况,如下所示:

    mysql> show index from t;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| Table |Non_unique | Key_name |Seq_in_index | Column_name |Collation | Cardinality |Sub_part | Packed |Null | Index_type |Comment | Index_comment |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| t |0| PRIMARY |1| id |A | 0 |NULL | NULL || BTREE || |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+1row inset (0.00sec)

    我们再来看一个没有主键的例子,如下所示:

    mysql> show index from t;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| Table |Non_unique | Key_name |Seq_in_index | Column_name |Collation | Cardinality |Sub_part | Packed |Null | Index_type |Comment | Index_comment |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+| t |0| id |1| id |A | 0 |NULL | NULL || BTREE || || t |1| idx_age |1| age |A | 0 |NULL | NULL |YES | BTREE || |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+2rows inset (0.00sec)

    在这个没有主键的例子中,虽然没有显式地定义主键,但是它有一个非空的唯一索引。在 InnoDB 中,如果存在非空的唯一约束,那么,这一列将会被当做主键。综合前面两种情况的输出,我们知道,要判断一张表是否存在主键,不能通过是否存在一个 key_name 名为 PRIMARY 的索引来判断,而应该通过 Non_unique 为 0 和 Null 列不为 YES 来判断。

    说完了需求,我们来看一下具体的实现。使用 pymysql 连接数据库,数据库中的每一行,将会以元组的形式返回,如下所示:

    (('t', 0, 'PRIMARY', 1, 'id', 'A', 0, None, None, '', 'BTREE', '', ''),)

    也就是说,我们现在要遍历一个二维的元组,然后判断是否存在 Non_unique 为 0,Null 列不为 YES 的记录。具体实现代码如下:

    defhas_primary_key():forrow inrows:ifrow[1] == 0androw[9] != 'YES':returnTruereturnFalse

    非常简单,但是,如果我们使用 any() 函数的话,代码将会更短。如下所示:

    defhas_primary_key():returnany(row[1] == 0androw[9] != 'YES'forrow inrows)

    利用动态语言特性写出简洁优美的代码

    在上一节中, 我们介绍了一些利用 Python 语言特性来编写简洁优美代码的例子。这一节,我们来看一个利用 Python 语言高级特性的例子。Python 作为一门动态类型语言,与 C、C++、Java 等静态类型语言有着显著的区别。下面我们将介绍其中的一个高级特性,这个特性充分演示了动态类型语言与静态类型语言的差异。更多的 Python 语言高级特性,我们将在随后的章节中介绍。

    在这个例子中,我们会收到很多不同的请求,对于不同的请求,调用不同的请求处理函数,这个需求如此常见,相信大家应该见过这样的代码:

    ifcmd == 'A':process_a()elifcmd == 'B':process_b()elifcmd == 'C':process_c()elifcmd == 'd':process_d()else:raiseNotImplementException

    对于接收消息并调用不同的处理函数来说,上面的代码是很直观、也很容易想到的。但是,这段代码存在一个比较严重的问题。随着消息增加,if 语句不断壮大,这段程序最后将变得无法维护。

    很多优秀的开源项目也会有类似的需求,但是,它们会使用其他方法解决这个问题。例如,在 Redis 系统中,会使用字典保存命令到执行函数之间的映射关系。当接收到一条新的命令时,先判断该命令是否存在于字典中,如果不存在,则说明不支持该命令。如果存在,则通过命令名称从字典中获取函数的指针,并通过函数指针的方式去调用相应的处理函数。如下所示:

    structredisCommandredisCommandTable[] = {{"get",getCommand,2,"rF",0,NULL,1,1,1,0,0},{"set",setCommand,-3,"wm",0,NULL,1,1,1,0,0},{"setnx",setnxCommand,3,"wmF",0,NULL,1,1,1,0,0},{"setex",setexCommand,4,"wm",0,NULL,1,1,1,0,0},

    我们也可以参照 Redis 的实现方式,使用字典保存命令与命令处理函数之间的映射关系。但是,在 Python 语言中,还可以做得更好。

    Python 语言是一门动态类型语言,具有自省(introspection)的能力。所谓自省,就是可以编写程序来处理其他已有的程序。例如,对于这里的需求,可以先根据请求的名称,判断相应的处理模块是否具有对应的处理函数。如果有,则获取相应的处理函数,然后进行调用。这么说或许比较抽象,我们来看一个具体的例子。

    假设现在有一个名为 Person 的类,该类只有一个 name 属性,此外,该类有一个名为 get_first_name 的方法和一个名为 get_last_name 的方法。如下所示:

    classPerson(object):def__init__(self, name):self.name = namedefget_first_name(self):returnself.name.split()[0]

    defget_last_name(self):returnself.name.split()[-1]

    为了进行更好的说明,我们在 IPython 中进行功能演示。在 IPython 中导入 Person 这个类,并创建一个对象。如下所示:

    In [1]: fromperson importPersonIn [2]: jason = Person('Jason Statham')

    Python 是一门动态类型的语言,我们可以在程序中处理已有的程序。例如,我们可以通过 Python 内置的 dir 函数,查看 jason 这个对象的所有属性。如下所示:

    In[3]: dir(jason)Out[3]:['__class__','__dict__','__doc__','get_first_name','get_last_name','name']

    我们已经看到了 jason 这个对象拥有的属性,并且,Python 内置的 dir 函数会返回这些属性的列表。现在,我们想测试某个属性是否存在,如果对象存在这个属性,则获取这个属性。这个任务可以由 Python 内置的 hasattr 和 getattr 函数来完成。如下所示:

    In[4]: hasattr(jason, 'get_first_name')Out[4]: TrueIn[5]: action = getattr(jason, 'get_first_name')

    In[6]: action()Out[6]: 'Jason'

    In[7]: action = getattr(jason, 'get_last_name')

    In[8]: action()Out[8]: 'Statham'

    在这段程序中,首先通过 hasattr() 函数来判断对象是否具有某个属性,然后,通过 getattr() 获取该属性。由于我们获取到的属性是一个方法,因此,可以直接进行调用。由此可见,无论我们想要获取 get_first_name还是 get_last_name,都可以通过 getattr() 获取到属性,然后进行调用。

    上面这段程序对我们有什么启发呢?假设有一个类,这个类中对每一条请求都有对应的处理函数。简单起见,假设请求的名称和处理函数同名。那么,我们可以通过 hasattr() 函数判断客户端是否拥有相应的属性,如果没有,则说明客户端不支持该请求。如果有,我们可以通过 getattr() 获得该请求的处理函数,然后调用该函数进行处理。

    在这个例子中,我们只应用了非常简单的 Python 自省能力。包括通过 hasattr() 方法判断对象是否具有相应的属性,通过 getattr() 获取对象的属性。使用 Python 的自省,不用像其他编程语言一样,使用一堆的 if / else 语句来处理不同的消息。也不用像 Redis 一样,专门维护一个字典来保存每个消息及其对应的处理函数。因此,提高了程序的可扩展性。

    像写文章一样写代码

    关于如何能够写出 Pythonic 的代码,我的观点是:不管用什么语言,都应该努力写出简洁优美的代码。如果不能,那推荐看看《重构》和《代码整洁之道》,虽然这两本书使用的是 Java 语言,但是,作者要传递的思想同样适用于 Python。此外,我也有以下经验传授给大家,希望能够帮助新同学快速地写出还不错的代码。

    像写文章一样写代码

    准确无歧义

    完整无废话

    注意排版以引导读者

    注意标点符号以帮助读者

    保证可读性的前提下,代码尽可能短小

    下面,我们来看一个 “利用标点符号以帮助读者” 的例子。在 Python 里面,空行是会被忽略的,也就说,有没有空行,有多少空行,对 Python 解释器来说都是一样的。但是,有没有空行对程序员来说可就不一样了,会显著影响程序的可读性。

    随机生成 1000 个 0~999 之间的整数,然后求它们的和。这里是没有空行的例子:

    importrandomdefsum_num(num, min_num, max_num):i = 0data = []fori inrange(num):data.append(random.randint(min_num, max_num))total = 0foritem indata:total += itemreturntotalif__name__ == '__main__':printsum_num(1000, 0, 1000)

    这里是有空行的例子:

    importrandomdefsum_num(num, min_num, max_num):i = 0data = []fori inrange(num):data.append(random.randint(min_num, max_num))

    total = 0foritem indata:total += item

    returntotalif__name__ == '__main__':printsum_num(1000, 0, 1000)

    读者可以用心感受一下这两段代码,代码一模一样,唯一的区别是第二段代码多了几个空行,有空行的代码,明显看起来更加舒适愉悦。在用汉语写作文的时候,老师一直教导我们要合理地使用标点符号,合理地分段。其实,写代码和写文章是一样的。写代码时,大家可以这样想象:换行是逗号,空一行是句号,空两行是分段。至于逗号,因为我们总是在一行中写一条语句,所以,逗号是可以忽略的,如果你在一行中写了多条语句,就好比在写作文的时候没有正确地使用逗号,也让人难以理解。如果你从来不空行,所有代码堆积在一起,就好比没有句号,让人读起来很累。同理,不分段也不是好习惯。

    总结

    所谓 Pythonic,其实并没有大家想得那么神秘,最终目的都是写出简洁优美的代码,其思想在各个语言中都是一样的。如果你用其他编程语言写不出简洁优美的代码,那么你也没办法用 Python 写出简洁优美的代码。如果你能用其他语言写出很好的代码,那么还是需要深入了解 Python 这门语言特有的一些语法,并能够充分利用这些语言特性。这样,才能够写出 Pythonic 的代码。

    关于 Pythonic、关于 Python 语言的高级特性、关于编程中容易犯的错误,无法在一篇文章中详细介绍。如果读者在看完这篇文章以后,还有一种意犹未尽的感觉,那么,就跟随我一起来学习《Python高质量编程》吧!

    作者介绍

    赖明星,架构师、作家。现就职于腾讯,参与并主导下一代金融级数据库平台研发。有多年的 Python 开发经验和一线互联网实战经验,擅长 C、Python、Java、MySQL、Linux 等主流技术。国内知名的 Python 技术专家和 Python 技术的积极推广者,著有《Python Linux 系统管理与自动化运维》一书。

    2019年第三届MySQL技术嘉年华将于5月25日上海举行,早鸟票仅99元,想听姜老师现场来讲讲自己与PG的爱恨情仇,以及其他大佬们的MySQL开源之道,莫要错过。点击下方阅读原文即可报名。会后我们也可以聊聊深圳与上海,聊聊房子车子,聊聊各种江湖八卦。

    长期坚持原创真的很不容易,多次想放弃。坚持是一种信仰,专注是一种态度!点赞和转发是对作者最好的褒奖哟~~

    PS:想要加入IMG微信群的同学(目前仅峨眉群有坑,少林、武当两群已满),可私信我微信82946772,备注:申请加入峨眉,猎头勿扰返回搜狐,查看更多

    展开全文
  • 你不仅需要调通代码,还需要在理解代码功能的基础上对代码进行故障排解。 2. 确保你使用的是OpenCV V2版本。 3. 为了保证脚本进行正常,你需要配备一个功能正常的网络摄像头。 4. 首先浏览一下其他人的点评和问题,...

    以下是Shantnu Tiwari的客座文章,作者有着在底层编程和嵌入式领域十年的工作经验。在发现Python语言之前的几年时间里,Shantnu Tiwari一直忍受着C/C++语言编程的不便,但Python使作者感到耳目一新。现在作者开始展现其对Python语言编程的热爱。

    在本文中我们将向您介绍一个异常简单的使用Python语言和开源库OpenCV的人脸识别方法,供此开启人脸识别之旅。

    在回复区提出任何问题之前:

    1. 不要略过文章而直接去尝试运行程序代码。你不仅需要调通代码,还需要在理解代码功能的基础上对代码进行故障排解。

    2. 确保你使用的是OpenCV V2版本。

    3. 为了保证脚本进行正常,你需要配备一个功能正常的网络摄像头。

    4. 首先浏览一下其他人的点评和问题,因为有可能你的问题别人已经提出过。

    多谢。

    OpenCV

    OpenCV介绍

    OpenCV是计算机视觉领域最受欢迎的库。OpenCV最早是使用C/C++语言进行编写的,现已支持Python语言捆绑使用。

    OpenCV使用机械学习算法对图像中的人脸进行搜索。由于有着与人脸一样复杂的原因,不存在一项简便的测试可以告知人们是否能够识别出人脸。相反,算法需要对成千上万细小的模式和特征进行匹配。面部识别算法被分解成成千上万很小的、易理解的任务,每一个任务较易实现。这些任务被称为分类器。

    像人脸一样,你可能有6,000个基于更多的分类器在进行人脸检测过程中,每一个分类器都需要进行匹配(当然要在一定的误差范围内)。但这其中就有问题了。在人脸识别过程中,算法从图片的左上角开始向右下角按小块逐步进行匹配,对每一个小块的识别过程中,算法都会持续的问:“这是人脸么?这是人脸么?这是人脸么?”由于在每个小块有着6000甚至更多的匹配项需要进行匹配,你可能会有无数的计算要执行,这些计算将引发你的电脑发生死机。

    为解决这个问题,OpenCV使用了级联技术。那什么是级联?最适当的答案就在字典中。级联就是一个瀑布或者一系列的瀑布。

    像一系列的瀑布过程一样,OpenCV级联将人脸检测过程拆分成了多个过程。在每一个图像小块中只进行一次粗略的测试。如果测试通过,接下来进行更详细的细节测试,依次重复。检测算法中有30至50个这种过程或者级联,只有在所有过程成功后才会最终识别到人脸。这样做的好处是在最初的几个过程中大多数的图片将会因不满足测试而被过略掉,算法可以无需浪费时间对每一张图像的6,000个属性进行检验。人脸识别算法运行耗时由数小时级降至实时级。

    级联实现

    理论听起来非常复杂,但实现起来去非常简单。级联其实就是一组包含了OpenCV用于进行目标识别的数据组成的XML文件。只需使用你想用的级联对你的代码进行初始化操作,其余过程由级联替你完成。

    鉴于人脸识别是如此的普适,OpenCV包含了大量的用于人脸识别、眼部识别、手部及腿部识别的内置级联。甚至还包含了对非人物对象识别使用的级联工具。例如,你是一个香蕉店的老板,OpenCV就有一个对消费者偷香蕉的行为追踪的级联。

    OpenCV安装

    首先需要找到适合你电脑的安装文件。

    我发现安装OpenCV才是整个过程中最难的部分。如果你最到了奇怪的无法解释的报错,有可能是因为库冲突,32位和64位差异等。我总结的最简单方法是安装一台Linux虚拟机然后从头开始安装。

    一旦安装完成,开启一个Python会话,然后输入以下代码对安装是否正常进行确认:

    $ python

    如果没有任何报错,可以继续以下步骤。

    理解代码

    让我们开始分解真实的代码,可以从repo网站下载。需下载脚本face_detect.py,图片abba.png和XML文件haar_cascade_frontalface_default.xml三个文件。

    # Get user supplied values

    imagePath = sys.argv[1]

    cascPath = sys.argv[2]

    首先将相片和级联名称传递给命令行的参数。我们将会使用Abba相片和由OpenCV提供的进行人脸检测的默认级联。

    # Create the haar 级联

    facecascade = cv2.cascadeClassifier(cascPath)

    现在我们创建了级联,并用我们的人脸级联初始化了它。这样就把该级联载入内存并且可以使用了。记住,级联就是一个包含了用于人脸检测的数据的XML文件。

    # Read the image

    image = cv2.imread(imagePath)

    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

    下面是读取图片并进行灰度转换。在进行灰度转换过程中已经完成了OpenCV的多个操作步骤。

    # Detect faces in the image

    faces = facecascade.detectMultiScale(

    gray,

    scaleFactor=1.1,

    minNeighbors=5,

    minSize=(30, 30),

    flags = cv2.cv.CV_HAAR_SCALE_IMAGE

    )

    这个函数检测实际的人脸,因此是关键代码,所以我们仔细检查一下选项。

    1. detectMultiScale function是一个检测对象的通用函数。由于我们调用它检测人脸,所以它就将检测人脸。第一个选项是图片灰度转换的相片。

    2. 第二个选项是scaleFactor。由于可能存在部分人脸距离相机相对较近,从而与较远处的人脸相比,尺寸较大。比例因子可以进行抵消补偿。

    3. 检测算法使用了一个活动窗口进行目标检测。minNeighbors选项定义了在其声明人脸被找到前,当前对象附件的目标数量。同时,minSize选项给出了每个窗口的大小。

    在这些方面我采用了常用值。在实际中你可以对窗口尺寸、补偿系数等进行调试直到找到最适合的值。

    函数的返回值是一组四边型,四边型内是算法检测到的人脸。下一步,我们将对函数的这些返回值进行循环。

    print "Found {0} faces!".format(len(faces))

    # Draw a rectangle around the faces

    for (x, y, w, h) in faces:

    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

    这个函数返回4个值:四边型的X轴、Y轴位置,四边型的宽度W和高度H。

    使用以上4个值调用内置函数rectangle画出一个四边型。

    cv2.imshow("Faces found" ,image)

    cv2.waitKey(0)

    最后,展示这个图片给用户,并等待用户的一个键盘输入。

    结果检查

    让我们再对Abba图片进行一次测试。

    $ python face_detect.py abba.png haar级联_frontalface_default.xml

    25行Python代码完成人脸识别

    这个工作正常,其他图片检测结果如何?

    25行Python代码完成人脸识别

    那个…不是人脸。让我们再试一次。我修改了参数设置,发现将scaleFactor设置成1.2可以将识别错识的人脸过滤掉。

    25行Python代码完成人脸识别

    发生了什么?好吧,第一张相片使用了一个高相素相机在较近的距离进行拍摄。第二张相片貌似是使用的手机在较远距离进行的拍摄。这就是参数scaleFactor需要修改的原因。就像我说过的,你需要根据不同测试案例对算法进行不同的参数设置从而避免误识别的发生。

    需要注意的是,由于采用了基于机械学习的算法,检测结果永远无法达到100%精确。大多数案例中你都能得到较好的结果,但偶尔算法也会检测到错误的对象,就像检测到错误的人脸一样。

    代码在这里。

    使用网络摄像头

    如果你想便用摄像头怎么办?OpenCV从摄像头按帧抓取图片后你就可以按帧进行人脸检测了。你需要一台高性能计算机,虽然我已用了五年的笔记本可以应付这项工作,但我也只是偶尔才测试一次。

    展开全文
  • 还能继续写代码吗?这位年轻的全栈工程师在 HackerNews 上发出了求助信息。这位工程师表示,他有 7 年工作经验,主要从事 JavaScript 项目,还有一些 PHP。对于一个没有正规教育经历的年轻人来说,他走到这一...

    一位 24 岁的程序员,两年前被诊断出尤塞氏综合症(又称遗传性耳聋-色素性视网膜炎综合征)。随着时间的推移,这一疾病可能会逐渐夺走他的听力、视力。那么,以后的职业生涯该怎么办?还能继续写代码吗?这位年轻的全栈工程师在 HackerNews 上发出了求助信息。

    这位工程师表示,他有 7 年工作经验,主要从事 JavaScript 项目,还有一些 PHP。对于一个没有正规教育经历的年轻人来说,他走到这一步实属不易。急速下降的视力让他不得不考虑以后的人生,但在编程方面已经付出了那么多,他也不想轻易放弃。

    因此,他想知道:

    有盲人前端工程师吗?

    什么样的软件工程适合视力受限的人?后端吗?

    除了屏幕朗读器,还有哪些工具能帮助视力受损的程序员?

    你所在的公司会雇佣盲人程序员吗?如果会,效果怎么样?他们都做哪种编程项目?

    身患先天性疾病是一件令人悲伤的事,但生活还是要继续。作者的提问在 HackerNews 上获得了不少暖心的回复,并迅速被顶到了 3000+的热度:我们很少看到会有如此意见一致的情况。在这其中,也有盲人程序员现身说法。

    用户 @kolanos 的回答获得了最多的点赞:

    你绝对可以继续担任软件工程师,我就是活生生的例子。这并不简单,尤其是在一开始。有一段时间你会觉得自己需要付出双倍的努力才能跟得上自己的同行。但最终你会发现随着自己越来越习惯使用辅助工具,你将掌握一些别人不具备的能力。

    例如,如果你熟悉了屏幕朗读功能,你可以把语音的速率调到 1.75 到 2 倍——这样一来你就成了唯一能够听懂屏幕阅读器在说什么的人。你会成为团队中阅读、打字速度最快的人(因为打错了字母听起来不对劲),就像聆听一首熟悉的歌曲,然后在旋律中敲出每一个音符一样。

    另外,由于代码不再以块的形式呈现在眼前,你会发现自己构建的代码越来越接近于脑中所想。视力正常的人也会事先思考,但它们在脑中的构想仍然趋向于视觉化。如果放弃了 2D 表达,你会发现非视觉构想图更加没有界限。你会惊讶于没有视觉局限时,自己的记忆力有多么出色。

    闭着眼写的代码反而更接近脑中所想?这一说法也得到了其他盲人开发者的共鸣。网友 @TriNetra 表示,其实写代码是一件在脑海里进行的工作:

    我是一名全栈工程师,在前端和后端系统方面都有着丰富的经验。我在 Windows 上用 Jaws 屏幕朗读器工作,而且经常使用 AutoHotkey 来提高自己的生产力。我曾在微软等公司工作,从 2016 年开始经营自己的咨询及产品公司。

    对于第一个问题,你可以做前端编程,但肯定需要一些帮助来验证 UI 设计。在任何一个像样的项目中,我更喜欢让能看见的同事处理看和感受方面的事情(主要是 CSS,虽然我懂 CSS),因为我觉得把时间花在这上面不太划算。你最好有一个 UI 专家帮你。软件开发者有很多其他的事情要做,尤其是基于 SPA 的项目。

    对于第三个问题,Visual studio 非常适合开发和 debug(至少适用于.net 相关的语言)。如果你用的是 Windows 系统,尝试使用 autohotkey,用快捷键和热字符串将一些重复性操作和文本自动化。

    另一件重要的事是找到同事正在使用的 UI 工具的替代品。不要仅仅因为你的团队在用某个工具就跟风,毕竟别人只会根据你的交付能力而不是工具来评价你。

    最后,我非常同意 @kolanos 的说法。编程是一项在脑海中进行的活动,每个人都必须先在大脑中构思程序的表现形式,然后再付诸于代码。

    这个答案同时也回答了有没有人雇佣盲人程序员的问题。还有人表示自己 80 年代在贝尔实验室工作的时候就见过一位视力有障碍的大神,「他的编码速度比其他人都慢,但在某种程度上,这是他的秘密力量,因为他的代码几乎从未在测试中失败过。」可见,身体上的障碍并没有将程序员的职业生涯堵死。

    对于盲人程序员身上这种「神秘的力量」,亚马逊零售无障碍软件工程师 Michael Forzano(也是一位盲人)解释说,视力正常的人们通常是视觉动物,他们仰赖白板以及绘制图表,透过视觉学习和理解。但盲人没有这些视觉工具,因此他们必须在脑中建立心智图,借以记忆代码结构、系统特定的组件甚至是文档位置,也因此对于系统的整体架构有了独特理解。很多时候,Michael Forzano 的同事还需要他来说明特定系统运作的方式。

    在工具方面,暖心的网友们也给出了不少建议。

    一位用户名为 ddevault 的网友(也在经历视力下降)推荐使用平铺窗口管理器,有助于用更加逻辑化的方式组织窗口:https://git.sr.ht/~sircmpwn/dotfiles/tree/master/bin/swaytalk。

    此外,ta 还写了一些带有语音合成功能的 Vim、Weechat(IRC chat)使用插件:https://git.sr.ht/~sircmpwn/dotfiles/tree/master/lib/vim/vimspeak.vim、https://git.sr.ht/~sircmpwn/dotfiles/tree/master/.weechat/python/talkative.py。

    还有人推荐了谷歌盲人科学家 T. V. Raman写的语音桌面工具 Emacspeak,这款工具可以让盲人上网变得更加方便。T. V. Raman 是谷歌颇具传奇色彩的盲人科学家,他 14 岁时就因为青光眼失去了视力。由于自己就是盲人,T.V.Raman 非常了解盲人的需求,他改进了计算机朗读软件,让多项应用变得对盲人更加友好,为这个人群带来了巨大的便利。

    除了针对盲人开发的工具以外,目前还有一些适合其他身体障碍人士的工具。

    谷歌 2019 年曾经发布一款名为 Live Transcribe 的语音识别引擎,可在手机端上使用人工智能算法为对话带来实时字幕,为听障人士提供方便。

    该项目的主要负责人,谷歌研究科学家迪米特里·卡维斯基(Dimitri Kanvesky)也是一名聋哑人。他出生于俄罗斯,1 岁失去了听力。但在美国期间他还学会了使用英语说话。

    迪米特里现在可以使用自己发明的技术与他人实现接近完美的交流。

    在看了这么多建议之后,这位年轻的工程师表示,他会努力尝试这些机会,并设法接触一些盲人编程社区的成员,为自己的下一步做好准备。

    展开全文
  • 一、编程零基础可以学会python吗?首先我要说Python是一种解释...Python是面向对象语言这意味着Python支持面向对象的风格或代码封装在对象的编程技术。Python是初学者的语言:Python对初级程序员而言,是一种伟大的语...

    一、编程零基础可以学会python吗?

    首先我要说Python是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

    Python是交互式语言:这意味着,您可以在一个Python提示符,直接互动执行写你的程序。Python是面向对象语言这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

    Python是初学者的语言:Python对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到WWW浏览器再到游戏。

    以上内容是我从python官网复制的概括,其实我想用更简洁的语言来概括一下,但是我觉得这样的解释,可以让大家更好的明白。它的结构简单,还有一个明确的语法,所以对于一个编程零基础的人来说,入门这们语言是一个不错的选择。

    20181212132356402.jpg

    二、我数学和英语不怎么好,学python是不是要重新去把数学和英语学一下。

    我感觉,仅仅代表个人观点,一般问这个问题的同学,我感觉基本都是不想学习这门语言的,内心根本没有真的想要去想要学习,因为,我也不是给大家灌什么鸡汤,你我都是成年人,你觉得我给你灌鸡汤有什么用吗?我也不想给谁灌什么鸡汤,因为如果你真的想要去学一样东西,或许你可能你真的不会让你的英语不好,数学不好成为你学习python的理由。

    20181212132410327.jpg

    三、都说学编程都要先学习C语言,我是不是先去把C语言学了再来学习python.。

    对于这个问题,大家有没有什么好的建议,你要学编程,你要学python,真的不用去学习什么C语言,去学什么java,再来学习python.,你要学习python,,直接学习python就是了,况且java和c语言相对于python更加的复杂,对于一个初学编程的同学来说,这么复杂的代码我想你是不能接受的,或许你看见这么复杂的代码之后,哇,这门语言好难啊,算了,不学了,还是好好的去搬自己的砖吧。

    四、我自学python很久了,很迷茫,没有一个好的学习路线和规划。

    这个问题是我不能解决的,因为每个人都有每个人都有自己的学习方法和路线,你要找一个适合自己的学习路线很难,你可以照着别人的学习路线来学习,慢慢摸索,然后成为自己的学习路线,还有大家可以可以加下我的学习交流群,我们有一个系统的学习框架图,你可以照着我们的学习框架图进行学习,这样你就知道自己目前学习什么,学完这个之后再学习什么,但是最重要的还是坚持。

    20181212132424568.jpg

    五、python这个语言要学到什么程度才可以去公司应聘呢?

    对于学完python,学到什么程度可以到公司应聘岗位,其实这个问题大家可以去各大的招聘网看看,看看现在公司要求的都是什么人才,现在基本的公司要求的人才都是要半年以上的开发经验的,要熟悉两门以上的框架,比如:flask,django等,最近就有一个朋友就来联系我,说他们的公司招一个有web后端三年以上的开发经验,精通爬虫,熟悉flask,django等框架,后面的我也不给大家说了,薪资我看了还是客观的,2w+,说实话,就我,仅仅代表我,在我身边我看见自学python到公司应聘的基本没有,而且真正能坚持自学学习python的基本没有。

    六、java,c语言,python,三者到底学什么好,python现在学完好就业吗?

    首先,我想说的的是,我不排斥任何语言,任何语言学出来,只要学好,都是不错的,只要自己付出不亚于任何人的努力!

    这就是最近很多的同学问我的问题,当然这是很多的初学python都会面对的问题,这里面有你吗?如果有你,我希望本文章对你有帮助,也希望能帮到大家,因为你我都是热爱python的编程语言爱好者。

    目前有正在学习python,对python这门语言感兴趣的同学,可以加入我下面的学习交流群,群里有很多的新手,不乏也有几个大神,你也可以加入我们一起来学习,而且群里每晚八点半是有python课程的直播的,有想学习python的同学可以加入我们,因为你我都是python热爱者。

    再者,对于零基础学习python给大家以下的建议:

    20181212132437739.jpg

    互联网是一个快速发展的时代,也是一个共享的时代,现在只要需要什么东西,我们去网上度娘,基本就能解决,但是,现在在网上已经有不少的学习python的公开课程,其中也有很多的精品,按理说,不缺少我们基础类型的课程,但是呢,大家应该注意一个问题,不管是公开课程还是出版的书,大多数都是面对的有有一定编程经验的人,不管是写的还是讲的,都是面对的有一定编程经验的人,python对于他们来说,已经不是第一的高级编程语言,根据现在的了解,目前很大的大学都已经把c语言和java列为学生学习的第一语言了。

    但是,在我看来,真正适合做为学习高级语言编程的第一的恰恰是python,有一本书,叫《与孩子一起学习编程》这本书的定位是将python列为编程学习的第一门语言,然而,由于读者对象是孩子,很多"成年人”不屑一顾,当然,里面的讲法与"实战”有点距离,导致以"找工作”、"工作需要”为目标的学习者,认为这本书跟自己要学的方向相差甚远。

    所以为了弥补那本书的缺陷,我在这里向大家介绍另几本书籍:不管是高中生,大学生,或者是想要学习编程,还有有一定编程经验的读者,

    1.《python学习手册:第三版》,这本书是学习语言基础比较好的一本书了,里面的内容包括了可移植,功能强大,易于使用,是编程独立应用程序和脚本应用程序的理想选择。

    2.《笨方法学python第三版》这是一本python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的初学者使用,这本书的机构非常简单,这本书作为python入门挺不错。

    现在为什么很多的初学python把这个语言作为学习编程语言的第一门语言呢?其优势在一下几点:

    ·入门容易,避免了其它语言的繁琐。

    ·接近我们的自然语言和平常的思维方法。

    .学习完这门语言之后,能够直接"实战”——用在工作上。

    ·学习完这门语言之后,能够顺利理解并学习其它语言。

    ·python本身功能强大,一门语言也可以打天下,省却了以后的学习成本。在传智播客接受python培训后4个半月就可以就业成为python大神。

    展开全文
  • java好学吗

    千次阅读 2018-09-13 09:39:54
    欢迎使用Markdown编辑器写博客 ...代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I...
  • 首先先了解下派森?...那python好学吗?先来了解下python这门计算机语言的特点:1、语法简略和传统的 C/C++、Java、C# 等言语比较,Python 对代码格局的要求没有那么严厉,这种宽松使得用户在编写...
  • 现在越来越多的人想要学习Python课程,在学习Python的过程中不少人都会关注学习Python难吗?今天小编就为大家详细的解读一下吧。0基础学习Python语言可以吗?...Python对于代码的要求是非常严谨的,...
  • 现在越来越多的人想要学习Python课程,在学习Python的过程中不少人都会关注学习Python难吗?今天小编就为大家详细的解读一下吧。0基础学习Python语言可以吗?...Python对于代码的要求是非常严谨的,...
  • Python好学吗?这种小白比较担心也比较顾虑的事情,那今天我们就一起探讨一下这个问题。相较于其他编程语言来说,Python简单易学,同样一个程序,使用C可能需要1000行代码,使用Java需要100行代...
  • python好学吗Python是一门适合零基础人员的语言,至于Python好好学,我觉得根据的情况来决定的,每个人受时间长短不同,自然学习起来效率也是不一样的,不过Python相对于其他的编程语言来说,语法简单、上手容易、...
  • 爬虫的原理是利用代码模拟浏览器访问网站,与浏览器不同的是,爬虫获取到的是网页的源代码,没有了浏览器的翻译效果。2.首先,我们进行页面获取,python爬虫的话很多模块包提供给开发者直接抓取网页,urllib,urllib...
  • 手工编程就是要靠编代码,软件编程的话需要具备一定的计算机应用能力,其实编程并没有大家想象的枯涩难懂,关于编程我们听听十年行业经验的数控工程师的看法。1.首先明确学习cnc加工中心的目的,这并不是简简单单的我...
  • 简单来说互联网是由一个个站点和网络设备组成的大网,我们通过浏览器访问站点,站点把HTML、JS、CSS代码返回给浏览器,这些代码经过浏览器解析、渲染,将丰富多彩的网页呈现我们眼前。爬虫是什么?如果我们把互联网...
  • 好学不好学?目前加工中心编程分为两种,手工编程和软件编程。 手工编程就是要靠编代码,软件编程的话需要具备一定的计算机应用能力,其实编程并没有大家想象的枯涩难懂,关于编程我们听听十年行业经验的数控工程师的...
  • Python有什么好学的”这句话可不是反问句,而是问句哦。主要是煎鱼觉得太多的人觉得Python的语法较为简单,写出来的代码只要符合逻辑,不需要太多的学习即可,即可从一门其他语言跳来用Python写(当然这样是好事,谁...
  • 一、编程零基础可以学会python吗?首先我要说Python是一种解释...Python是面向对象语言这意味着Python支持面向对象的风格或代码封装在对象的编程技术。Python是初学者的语言:Python对初级程序员而言,是一种伟大的语...
  • 好学吗?软件测试课程分为三个阶段,软件测试基础、编程开发技术、自动化测试工具。软件测试科目相比软件开发类的课程来说代码少,不很难学。认真学习都可以学得会。除了学习技术支持、开发语言及相关的测试技术外,...
  • 对于所有编程语言来说,web前端可以算是最容易入门的编程岗位了,web前端简单来说就是做网页开发的代码人员,你所看到的所有网站页面都是由前端程序员用代码实现的。 虽然说web前端开发入门容易,但想要深入提升就没...
  • 对扩展开放,对修改关闭,业务需求是不断变化的,当程序需要扩展的时候,不要去修改原来的代码,而要灵活使用抽象和继承,增加程序的扩展性,使易于维护和升级,类、模块、函数等都是可以扩展的,但是不可修改。...
  • Python是一个非常适合初学者入门的编程语言。...2.易于阅读:Python代码定义的更清晰。3.易于维护:Python的成功在于它的源代码是相当容易维护的。4.一个广泛的标准库:Python的最大的优势之一是丰...
  • 敢问有哪种编程语言?...举个例子,比如完成同一个任务,C语言需要写1000行代码,Java只需要写100行,而Python可能只要20行。基于语言的特性,我们可能会更偏爱Python,也就会自然而然的认为Python简单。其实在探讨...
  • 一、编程零基础可以学会python吗?首先我要说Python是一种解释...Python是面向对象语言这意味着Python支持面向对象的风格或代码封装在对象的编程技术。Python是初学者的语言:Python对初级程序员而言,是一种伟大的语...
  • 前言:履带准备(Python安装的前提下)爬虫需要做的第一件事是确定的对象来抓取数据。在这里我将百度主页的地址标志形象作为一个例子。...履带的原理是使用代码来模拟浏览器访问一个网站。与浏览器,爬虫获取网页...
  • Flutter可以与现有的代码一起工作。在全世界,Flutter正在被越来越多的开发者和组织使用,并且Flutter是完全免费、开源的。简单来说,Flutter是一款移动应用程序SDK,包含框架、控件和一些工具,可以用一套代码同时...
  • 少儿编程python学啥?好不好学、有用吗来源:搜学搜课 时间:2020/9/17 15:14:21Scratch、Python、C+学习的不同之处就目前国内少儿编程教育体制来说 ,合适中国青...既不需要懂英文,也不需要敲代码,只需按照一...
  • 编程好学吗?多长时间才能学会编程? 这个因人而宜。通常情况下,从实现第一个“Hello World”,到比较熟练的编写代码,这个过程可能比学习其它的计算机技术要长一些。 比如学习Photoshop,很多人有三两个月就可以...
  • 如果是想入行做软件开发工作,那么对于初级程序员,企业的要求通常是能够做代码实现,并且不是核心的代码,也就是做好规定,做好接口,让你去填充其中的实现。这一类工作可能前端程序或者简单的后端业务逻辑方面需求...

空空如也

空空如也

1 2 3 4 5 6
收藏数 103
精华内容 41
关键字:

代码好学吗