精华内容
下载资源
问答
  • 很多非程序员的朋友咨询Python相关的事儿。(前两年是前端)所以今天不讲技术,纯BB。PS:另外,本来想开坑做技术科普。由于筹备不足延后一些在做。毕竟,专栏修改打字就行了。视频比较难改需要一次性传达正确的...

    最近被各种Python的小广告轰炸。也有很多非程序员的朋友咨询Python相关的事儿。(前两年是前端)

    所以今天不讲技术,纯BB。

    PS:另外,本来想开坑做技术科普。由于筹备不足延后一些在做。毕竟,专栏修改打字就行了。视频比较难改需要一次性传达正确的信息。不能拿起嘴来就说(当然,专栏我也从来不是拿起嘴来就说的)。所以需要比较专业的人士帮忙审校。所以近期只能专栏了。仍然那句话,如果说的有问题。欢迎指摘。4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

    进入正题吧:Python是啥:

    编程语言。和大多数编程语言一样。它只能帮助人类完成一些重复性劳动。

    至于语言特性,简单 + 你得准备个游标卡尺,真的,游标卡尺非常重要。

    Python的适用场景:

    爬虫、树莓派机器人编程(这个还挺有趣的,不过就是看个人爱好吧。。)、数据分析、机器学习、深度学习、自然语言处理。4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

    该不该学一门编程语言,从来是看学习者的目的,所以就目的展开:听说python程序员薪资很高,我想转行:

    趁早歇菜。Python程序员确实工资高,是因为它的适用场景。工资高是因为Python程序员大多在企业里做机器学习、深度学习或者自然语言处理算法等等。这些工程师的工资,并不是因为他们会Python。更多的是因为编程语言背后复杂的算法、数据结构、系统设计、经验。简单的讲,如果还在为了挂高数而苦苦挣扎。真的没必要。

    我的工作中有大量的数据需要处理。想提高工作效率:

    恭喜你,很适合。确实可以提高工作效率。因为目前的编程语言来讲。Python无疑是最容易上手,且最适合处理数据的。花些时间学习,磨刀不误砍柴工。但是,Python只能帮你处理重复性劳动,并不是像宣传的那样duang的一下出了PPT、报表、word...需要编程,思考数据的内在逻辑,数据量没有那么大,或者处理方式总在变、而且编程语言又没有那么熟练的情况下,甚至没有用excel效率高。

    编程可以锻炼逻辑思维,想学一个编程语言入门:

    也是比较适合学习Python的。因为,确实比较容易上手。但是,每一种编程语言在思维逻辑的训练上绝不是语言本身。所以单单是看完课程,能写一些简单的程序其实并不达到目的。在看完教程 且 可以完成课程作业的情况下。后续可以去刷Leetcode。以及看一本叫算法导论的书。学了个语言才是刚刚开始。

    会编程特别炫技:

    我觉得,比起学Python。去学C/C++才比较炫技。当然可以拿Python入门。但是并不会炫技。

    技术宅,想鼓捣。

    这个目的不说啥了。估计应该不需要看课程,已经会了其他编程语言。只是多一个玩玩。4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

    如何学好:

    其实大多数Python课程大纲都大同小异。Hallo world ->?基础数据格式 ->面向对象->?条件语句->循环语句->高级数据格式->递归->实例(爬虫、数据处理)。

    这里需要注意的是,到实例之前,所有编程语言都大同小异。就这点东西。基础打牢。

    至于什么叫基础打牢:

    比如基础数据格式:在内存里怎么存的,占多少bit,所以范围是多少。再比如高级数据格式的字典:hash索引是啥?怎么存储的。搜索时间复杂度多少 空间复杂度又是怎样的。hash key碰撞怎么解决的?

    再比如递归:具体每一步怎么调用的。所以我写的递归,到底执行了几次调用?调用栈是什么样子的?

    等等等等。不一一例举。

    另外,课程就是 师傅领进门,修行真的是在个人

    此处不推荐某某某课程,B站就有很多免费的 还有付费的。没太大差异。要说差异只有看着想不想睡觉。。自己试着写写就不想睡觉了,真的。

    最后: 多动手,别光看

    4aa545dccf7de8d4a93c2b2b8e3265ac0a26d216.png

    周末吃太辣了,今儿胃疼。而且,我现在是音视频工程师。虽然研究生阶段搞得自然语言处理和图像识别,但是也是好几年前的事儿了。只能给初学者一点建议。要是伤及谁的利益,有本事你来打我呀?02db465212d3c374a43c60fa2625cc1caeaab796.png

    交流群:711929228

    本期问题:yuv420p指的是啥?

    答案:像素格式。

    展开全文
  • 当我听完后, 便回了一句,我为什么要去当程序员啊?据我所知,在培训班学习python的主要是完全没有任何编程基础,听信各类培训班所言,认为python容易入手,同时以后的收入不低的毫无编程基础小白。不过,从我这一....

    最近在和朋友聊天的时候,朋友问了我这样一个问题,问我:你报培训班学习python有用吗?听说程序员虽然工资高,但是工作强度很大,天天加班而且还会遇到中年危机,不像律师,会计这种越老越挣钱。当我听完后, 便回了一句,我为什么要去当程序员啊?

    据我所知,在培训班学习python的主要是完全没有任何编程基础,听信各类培训班所言,认为python容易入手,同时以后的收入不低的毫无编程基础小白。

    不过,从我这一年多的学习下来,我可以很负责的告诉诸位,

    如果你是为了当一名程序员,那么最好不要从python学起,如果你是为了学一门可以在以后工作上用到的计算机技术,那么python是你的最优选择,相比之下Excel都可以不用掌握

    。为什么这么说,下面我会从以下两个个方面为大家解释。

    1 python容易学不过是一种推销的手段。

    为什么小白选择编程语言的时候往往都会去学python,我想大部分是听了所谓的python是编程中最容易学习的语言。就这样好像许多人都觉得python好学,就连我的大学老师一提到python就说这个容易,让我们有时间可以去学一学。

    不过,我这一年学下来,却并不这么认为。所谓python容易学习,是指它的代码书写量上是比较好掌握的,别的语言要十几行代码才能实现的功能,python可能只要几行,量少固然是比较容易记忆和掌握的,但是我们都知道,绝大多数程序员的看家本领是什么?其实是CV大法,有了这个方法,代码量的大小又有什么意义,更何况代码量的多与少其实到了一定程度只是增加了你的工作量,并没有增加难度。

    但是在其背后的原理以及对语言深层次的理解上,不论是python还是Java,亦或是C,对于没有经过系统的理论学习的人来说都是很难弄懂的,换而言之,只要你能把这些东西弄明白,任何语言都可以很轻松的掌握,这也是为什么C语言是大学计算机专业必学的课,因为它是所有高级语言中最接近底层,通过它可以更好的将计算机程序的运行原理解释。

    这是想成为一名优秀程序员必须要掌握的知识,而这在培训班是不会教授给大家的,因为他们知道,即使告诉你,你也未必会懂,所以往往会告诉大家以后遇到某某情况这样写就可以了。这对于不想当程序员的人来说是完全够了,但是对于一名程序员来说是完全不够,因为你以后是靠代码为生,所以必须要做到知其然,知其所以然。而这个知其所以然的过程对于零基础的人来说将会是痛苦万分的,至少我在了解背后原理的时候是掉了不少的头发。

    况且,

    你以为掌握了一门python就可以去当程序员了吗?这显然是错误的

    ,拿python的django框架举例,学习django不仅要你掌握python的语法,还要你懂得数据库的使用,Git的使用,简单的JS,HTML,CSS的基础,当然最重要的是要掌握Linux的使用,掌握了这些,你才有资格去应聘一名python的后端开发师。

    而这些内容,怎么可能会在几个月里面就能学会呢?那些补习班所谓的六个月拿到高薪不过是吸引你去学习的噱头,

    任何一门语言没有个几年的积淀,怎么可能完全掌握?

    所以不要认为python容易,python容易学只是一种噱头,如果你想当好一名程序员的话,python与其他语言一样,都是需要时间去磨练的。而有这个时间,为何不去学C,学Java呢?至少目前来看前者是语言的常青树,后者是当下需求最大的语言之一,工作岗位也比python多不少,所以你真的想从事程序员一职,目前建议先从C或者java入手,

    而且掌握了C或者java以后在学python也不会花很多的时间

    c83b5606c497488f89c3a59824c48362

    2 python就像二十年前的Word和Excel

    众所众知,二十年前,计算机还没有走进家家户户的时候,还没有几个人会使用Word和Excel这些办公软件,可是现在一看,几乎绝大多数岗位都对这些有一定的要求。而究其原因还是这些软件简单,方便,实用。而python也具备这些条件。

    也许有人会问,你之前不才说python不好学吗?没错,python不好学,但是针对那些想要从事程序员的人来说,因为他们不仅要理解python如何运行,还要明白更多的关于计算机的其它知识。但是对于一般人来说,我虽然知道这些东西是如何运行的,但是我知道这样做可以实现自己的某个目的,最为重要的是我不需要关心代码的运行效率和耦合性。

    对于前者,大家很好理解,我使用Excel表去统计数据,需要知道为什么用SUM函数就可以求和吗?用PS去修图,需要知道套索工具抠图的原理吗?很明显我们是不需要的,我们只要会用就可以了,即只要知其然,而不需知其所以然。

    python亦是如此,之前说过python由于语法结构简洁,所以一般人可以很快的入门,不过这个入门对于我们来说并没有太大的用处,因为你即使入门了,也很难写出一个像样的代码。不过没关系,你写不出来,但是别人可以写出来啊,python有着极其庞大的第三方库,这些库封装了各种各样的代码,可以实现各种各样的功能,我们可以直接拿过来使用,而不需要自己动手写。我们在使用这些代码的时候也并不需要知道这些代码是如何实现这一功能的。

    以爬虫为例,request库是爬虫常用的库,对于以后要从事爬虫的人来说,request的库仅仅只是所要学习的一小部分,但是对于我们来说,request库几乎可以满足个人爬虫的全部需求,这段时间在家,闲着无聊便从网上爬了十几部小说来看,而代码总和一共也不过50行,我也不需要考虑爬取效率,被反扒等情况,并且也不至于因为这个就被抓去吃牢饭。

    7c15011b56fa4d41b51c26f5f0ffebce

    当然你要把某些库学到极致也不是容易的事,这和我们把word,Excel用到极致是一样的。不过我们掌握其基础,就可以解决自己的很多问题,岂不美哉。

    对于代码的运行效率和耦合性,我想大家或多或少都有所耳闻,什么python虽然语法简单,但是因为是面向对象,所以运行效率差;什么代码要高耦合,低内聚才是好代码。这都是说给程序员听得,对于一般人来说根本不需要达到这个要求。

    继续以爬虫为例,我们都知道爬虫最为关键的两点一是可靠的获得数据,二便是高效的获取数据。为了高效的获得数据,减少爬虫的时间,线程,分布式等都应运而生。

    不过这与我们又有什么关系呢?我们只要注重前者,确保数据能够被获取即可,因为个人爬虫一般不会爬的数据不会太大,假设你是一名股民,再过一个月上市公司就要发2019年的财务报表了,你要批量下载这些报表,因为你要分析数据。假设一个报表的pdf文件为3M,目前中国工3500多家上市企业,那么满打满算你也就爬10G的数据,这看似很多,其实与那些爬虫公司以T为单位爬取的数据来比只不过是九牛一毛而已。

    所以我们不必关心程序的运行效率,因为对于我们一般人来说几分钟或者几小时的等待是可以接受的。因此,对于与python相关一些知识我们也可以不必掌握,例如之前所说的线程,分布式等。

    同样的,既然我们对程序的运行效率都没有要求,那么我们对代码的书写格式更没有要求了,因为我们写的代码往往是一次性的,也不是给别人看的,最为重要的是代码基本上都写的很烂,不过又有什么关系呢?反正我有不是靠代码吃饭的,只要能实现我的目的,代码再烂又有谁在乎呢?

    总而言之,学会python后,虽然上限无法猜测,但是下限一定不会很低,就像Excel表一样,真正用的好的人其实也是要花很多时间的,不过我们只要会基础,那么基本上就够了,如果遇到一些自己不会的操作,直接百度一下,不就可以了吗?python不也一样吗?如果遇到一些自己预期之外的错误,直接面向百度编程,基本都能解决问题,虽然你不知道为什么。

    44197ef7fd6141eebf76068bfa94c5bd

    好的,说了这么多,我想大家都或多或少有些明白吧。

    想要当一名程序员,那么最好不要从python入门,因为简单的入门往往会带来痛苦的深入。

    如果你想选一门语言,作为一种提升自己素质的技术,那么非python莫属。

    如果你已经工作了,我个人的建议是掌握python的语法后,直接学习数据处理与分析,因为对数据进行高效的利用是几乎是每个企业关心的重点之一。当然这里不是让你向机器学习和人工智能上面发展,不过掌握一些基础的数据处理和分析,就足以使你比其他人更快更好的完成一些简单繁琐的信息处理工作,至少比使用Excel进行数据处理要快的多,这会让你更快的脱颖而出。

    如果你还在上大学,那么我建议学完python语法,可以先学django或flask这些web框架,然后在学数据分析。因为在大学有很多时间,而且自己写个网站也是个值得骄傲的事,如果你的网站创意想法好的话,说不定还会有人访问然后发展起来了呢?毕竟梦想还是要有的,万一实现了呢?最为重要的是,在你毕业后实在找不到工作,也可以靠这个在一家小公司暂时救救急。

    最后,给大家两句关于python忠告

    一:爬虫写的好,不一定牢饭吃得饱,说不定吃的是满汉全席呢!因为爬虫不等于黑客。

    二:人工智能不是你想学会就能学的,如果你想学,首先要确保自己高数过得去,据我所知,培训机构的机器学习的班级几乎都是研究生。

    2ba2303a9e0e45afb66a773c362a269e

    展开全文
  • 程序员学Python》--源码 本书是针对程序员或其他学过过至少一种编程语言、一些编程经验的人们(如学过计算机基础课程的大学生)的Python编程著作。本书假定读者对于计算机的基础概念、程序和编程,都一定的...
  • C#程序员学习 Python

    千次阅读 2016-01-01 19:02:16
    孙广东 2016.1.1

    孙广东  2016.1.1

    交互:

    C# 执行Python代码:

    http://stackoverflow.com/questions/11779143/run-a-python-script-from-c-sharp

    反着来:

    http://stackoverflow.com/questions/3260015/run-a-c-sharp-application-from-python-script


    Python语言的特点:
    高级语言
    内置电池(大量的标准库)
    解释型(有时JIT编译)
    面向对象(尤其是Python 3)
    强类型动态语义
    语法强调可读性
    支持重用通过模块和包

    Python程序的“形状” :
        Python定义代码块(在Python中使用 空格 和 冒号)。



    看一个 Demo:

    import random
    
    def get_days():
        # List<string> days = new List<sting>();
        # days[]
        days = ['mon','tues','wed','thurs','fri','sat','sun']
        return days
    
    def get_random_report():
        weather = ['sunny', 'lovely','cold']
        return weather[ random.randint(0, len(weather) - 1)]
    
    def main():
        days = get_days()
    
        for day in days:
            report = get_random_report()
            print("On {0} it will be {1}.".format(day, report))
    
    if __name__ == "__main__":
        main()

    C# 都有什么呢?


    一、 Everything is an object (一切皆对象)

    C# :

    class Document: object
    {
        public void Serialize()
        {
            // ...
        }
    
        public override string ToString()
        {
            return "I am a document ";
        }
    }

    Python:

    class Document(object):
        def serialize(self):
            print("太好了!")
    
        def __str__(self):
            return "I am a document."


    二、IEnumerable + foreach loops

    C# :

            int[] numbers = new[] {1, 2, 3, 4, 5, 6};
            foreach (var n in numbers)
            {
                Console.Write(n + ",");
            }
    class ShoppingCart : IEnumerable<Tuple<string, float>>
    {
        List<Tuple<string, float>>  cartItems = new List<Tuple<string, float>>();
    
        public void Add(string name, float price)
        {
            cartItems.Add(new Tuple<string, float>(name, price));
        }
    
        public IEnumerator<Tuple<string, float>> GetEnumerator()
        {
            return cartItems.GetEnumerator();
        }
    
        IEnumerator IEnumerable.GetEnumerator()
        {
            return cartItems.GetEnumerator();
        }
    }


    Python :

    numbers = [1, 2, 3, 4, 5, 6]
    
    for n in numbers:
        print(n, end=',')
    for v in enumerate(numbers):
        print(v, end=',')
    for index, k in enumerate(numbers):
        print(k, end=',')
    class CarItem:
        def __init__(self, name, price):
            self.price = price
            self.name = name
    
        def __repr__(self):
            return "({0}, ${1})".format(self.name, self.price)
    
    class ShoppingCart:
        def __init__(self):
            self.__items = []
    
        def add(self, cart_item):
            self.__items.append(cart_item)
    
        def __iter__(self):
            return self.__items.__iter__()
    
    print()
    print()
    
    cart = ShoppingCart()
    cart.add(CarItem("CD", 19.99))
    cart.add(CarItem("Record", 17.99))
    
    for item in cart.items:
        print(item)



    三、Properties (int Age {get; set;})

    C# :

        class ShoppingCart
        {
            List<Tuple<string, float>> cartItems = new List<Tuple<string, float>>();
    
            public float TotalPrice
            {
                get
                {
                    float total = 0;
                    foreach (var item in cartItems)
                    {
                        total += item.Item2;
                    }
                    return total;
                }
            }
        }

    Python :

    class ShoppingCart:
        @property
        def total_price(self):
            total = 0.0
            for item in self.__items:
                total += item.price
            return total

    print("Total price is ${0:,}".format(cart.total_price))
    


    四、Anonymous types (匿名类型)

    C#:

        public static void Main(String[] args)
        {
            var o = new
            {
                Id = 2,
                Registered = true
            };
    
            Console.WriteLine(o);
    
            if (o.Registered)
            {
                Console.WriteLine("They are registered...");
            }
        }

    python:

    class AnonObject(dict):
        __getattr__ = dict.get
        __setattr__ = dict.__setitem__
    
    person = {
        "name": "Michael",
        "age": 40
    }
    anonPerson = AnonObject(name = "Michael", age=40)
    
    print(anonPerson)
    print(anonPerson["name"])
    print(anonPerson.name)
    print(anonPerson.age)

    五、Lambda expressions

    C#:

        private static IEnumerable<int> FindNumbers(Predicate<int> predicate)
        {
            for (int i = 0; i < 100; i++)
            {
                if (predicate(i))
                {
                    yield return i;
                }
            }
        }
    
        private IEnumerable<int> nums = FindNumbers(n => n%11 == 0);
        // [0, 11,22,33,44,55,66,77,88,99]

    python:

    def get_numbers(limit, predicate):
        for n in range(0, limit):
            if predicate(n):
                yield n
    
    def divide_by_ll(n):
        return n % 11 == 0
    
    output = list(get_numbers(40, divide_by_ll))
    print(output)
    def get_numbers(limit, predicate):
        for n in range(0, limit):
            if predicate(n):
                yield n
    
    # def divide_by_ll(n):
    #     return n % 11 == 0
    
    output = list(get_numbers(40,lambda n : n % 11 ==0 ))
    print(output)



    六、NuGET package management



    七、Entity Framework 》ORMs



    八、ASP.NET MVC