A. 如何看待海淀妈妈们认为python是儿童才学的低端编程
说得其实很对。
首先说,少儿编程就是智商税,编程这东西说白了就是人类说计算机的语言,让计算机这个苦力帮你干活。这玩意没啥少儿不少儿的。
真正的难点在三,
第一 怎么说话计算机才懂,冯诺依曼机要说话机器听懂得告诉他内存怎么挪,堆栈怎么分配,然后在此之上一堆语言为了把机器语言翻译得更像人话,各有各的特点也各有各的代价。
第二 算法,这需要数学知识。
第三,实际工程里复杂的库的应用,这要经验积累, 多当调包侠。
这三点和小时候玩的编程语言本身关系不大, 学学简单的for, while啥的啥语言都差不多。 所以说小时候学啥scratch, python, 不如让娃娃好好玩。脑子灵活了人话说好了,再来学电脑说话。
然后再说Python和c++, 现在小孩子如果要搞信息奥林匹克,好歹学c++是个实现工具,可以没事的时候先学着, 以后打信奥啊都有用。 那学Python有啥用呢?
知道你Python厉害,可以爬虫,可以自动化,可以炼丹,可以跑量化,可以做回归。 可小孩子学了Python干嘛呢? 难不成去kaggle打数据分析的比赛? 如果都没有用那不就是学着玩么。 可Python学着玩真需要报班么?那么多资源。
所以啊对少儿编程来说,c++就是比Python有用。 要么不花钱报班孩子爱学哪个语言学哪个,反正自己玩。 要逼着孩子学,那还是c++吧。
B. 如何使用Python实现并发编程
多线程几乎是每一个程序猿在使用每一种语言时都会首先想到用于解决并发的工具(JS程序员请回避),使用多线程可以有效的利用CPU资源(Python例外)。然而多线程所带来的程序的复杂度也不可避免,尤其是对竞争资源的同步问题。
然而在python中由于使用了全局解释锁(GIL)的原因,代码并不能同时在多核上并发的运行,也就是说,Python的多线程不能并发,很多人会发现使用多线程来改进自己的Python代码后,程序的运行效率却下降了,这是多么蛋疼的一件事呀!如果想了解更多细节,推荐阅读这篇文章。实际上使用多线程的编程模型是很困难的,程序员很容易犯错,这并不是程序员的错误,因为并行思维是反人类的,我们大多数人的思维是串行(精神分裂不讨论),而且冯诺依曼设计的计算机架构也是以顺序执行为基础的。所以如果你总是不能把你的多线程程序搞定,恭喜你,你是个思维正常的程序猿:)
Python提供两组线程的接口,一组是thread模块,提供基础的,低等级(Low Level)接口,使用Function作为线程的运行体。还有一组是threading模块,提供更容易使用的基于对象的接口(类似于Java),可以继承Thread对象来实现线程,还提供了其它一些线程相关的对象,例如Timer,Lock
使用thread模块的例子
import thread
def worker():
"""thread worker function"""
print 'Worker'
thread.start_new_thread(worker)
使用threading模块的例子
import threading
def worker():
"""thread worker function"""
print 'Worker'
t = threading.Thread(target=worker)
t.start()
或者Java Style
import threading
class worker(threading.Thread):
def __init__(self):
pass
def run():
"""thread worker function"""
print 'Worker'
t = worker()
t.start()