写给.NET开发者的Python教程(一):C# vs Python: 语言特性、Conda和Jupyter Notebook环境

时间:2020-07-05 15:07:47   收藏:0   阅读:72

承接上篇,本文会从语言特性、开发环境和必备工具来带领大家进入Python的世界。

 

语言特性


 

首先一起看下C#和Python在语言特性层面的对比,他们作为截然不同的两类面向对象高级语言,在语言层面上有何异同。

技术图片

 

 

 

 

注:本系列均采用.NET Core为C#代码的运行环境,Python则为Python 3

 

上表对部分语言特性简单做了对比,C#作为一门编译型静态语言,和Python这样的解释性动态语言,虽然差异较大,但同为面向向对象的高级语言,Python的很多概念仍然是无关编程语言的。

技术图片

 Python的特性概括来讲如下:

 

现在来看个LeetCode上经典问题两数之和的例子,粗略感受下语法差异。这两段代码都要从数组nums里面,找出相加和等于target的两个整数,用数组的形式返回:

技术图片

Python

class Solution:
    def twoSum(self, nums, target):
        dict={}
        for i in range(len(nums)):
            n=nums[i]
            t=target-n
            if t in dict:
                return [dict[t],i]
            dict[n]=i
        return None

C#

public class Solution {
    public int[] TwoSum(int[] nums, int target) {
        var dict=new Dictionary<int,int>();
        for(var i=0;i<nums.Length;i++){
            var t=target-nums[i];
            if(dict.ContainsKey(t)){
                return new int[]{dict[t],i};
            }else{
                dict[nums[i]]=i;
            }
        }
        return null;
    }
}

 

同样的一段逻辑,借助一个字典快速找出两个目标数字。但是从代码结构上来看,至少有以下几点差异:

  1. Python代码不以;号换行
  2. Python以缩进来确定代码层级,这个槽点比较多(游标卡尺梗)
  3. Python不使用public之类的访问修饰符
  4. Python不要求声明对象类型(可以主动声明),动态类型
  5. Python使用def定义方法,同时不要求声明返回值类型(可以主动声明)
  6. 循环语句和条件语句与C#语法不同,使用:号声明代码块,后续会详细介绍

这也是大多熟悉C语言系语法的开发人员不习惯Python的原因,其独特的语法需要我们先熟悉。

 

Think in Python

编写Pyhton代码的思考方式和我们编写C++/C#时是完全不一样的,对于其它语言的开发人员下面的几个建议是非常棒的:

 技术图片

 

 

 

Conda和开发环境


 对.NET开发人员而言,Conda(Anaconda)是个陌生的工具,但它可谓是目前机器学习必备的开发环境。Anaconda是一套数据科学工具包,在全球拥有 2000 多万用户,是单台机器上进行Python/R 数据科学和机器学习开发最简单的方法。它是世界上最流行的Python分发平台,包含了使用数千个开源包和库,个人版是开源免费的。

我们的目标是让C#开发者也能使用Python进行机器学习开发,因此采用Anaconda作为Python开发环境。下面开始安装Anaconda,这里我们安装Windows版:https://repo.anaconda.com/archive/Anaconda3-2020.02-Windows-x86_64.exe

目前Anaconda默认可选的Python版本有两个,分别是3.7和2.7。鉴于2.7已经不再更新,因此对于新程序的开发,采用Python 3更合适。
技术图片

安装过程没什么难度,这里建议勾选“将Anaconda添加到Path环境变量”。这样可以直接使用conda命令,熟练后在PowerShell里直接操作命令行会非常方便。

技术图片

 

PyCharm是一款流行的功能强大的IDE,这里提供了针对Anaconda的免费社区版,推荐使用。同时强烈安利微软的VSCode,对Anaconda的集成也做得很棒。

技术图片

一旦安装完成,在开始菜单中即可看到Anaconda Navigator和Jupytor Notebook等应用。Anaconda Navigator是一个可视化管理conda环境的应用,可以管理Python环境、切换包来源和安装工具。所有功能均可以通过命令行操作,熟练之后使用CLI命令会效率更高。

 

技术图片

由于Conda原始源在国内速度较慢,建议切换到国内源。这里推荐华中科技大学的conda源,添加方法如下:

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/

conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/

conda config --set show_channel_urls yes

此外,如您电脑此前无python环境,此时默认的python环境将会成为conda的环境。

技术图片

 

 

 关于conda的教程我这里不再赘述,大家可以自行查阅Conda文档以了解。

 

Jupyter Notebook


 

和Conda一样,Jupyter Notebook同样是机器学习必不可缺的一款Python可视化交互编程软件。它允许我们像记笔记一样,将文本和代码混合到一起,并能将代码执行结果可视化展示,提供非常直观的开发体验。

技术图片

 

Jupyter Notebook目前支持超过40多种编程语言,包括Python和C#;同时允许将notebook导出为多种格式,包括HTML、图片, 视频, LaTeX, 和自定义MIME类型的文件.;此外很多大数据工具和语言都集成了它,例如Apache Spark, Python, R 、Scala、pandas, scikit-learn, ggplot2, TensorFlow等等。

conda默认就包含了Jupyter Notebook因此可以直接启动,这会打开一个浏览器窗口,这就是Jupyter notebook的入口。在这里可以操作文件,编写notebook。

技术图片

 

 

 

 点击右上角New按钮,即可创建新笔记本。此时要为笔记本选择一个Kenerl(运行环境),我这里集成了C#的插件,因此可以看到.NET运行环境:

技术图片

 

这里我分别创建一个Python笔记本notebook-py.和一个C#笔记本notebook-c#,分别运行上面的示例代码,效果如下:

技术图片

 

技术图片

 

 

 

关于如何安装C#插件到Jupyter Notebook,请查看微软官方博客:

https://devblogs.microsoft.com/dotnet/net-core-with-juypter-notebooks-is-here-preview-1/

 

总结


 

最后,本章就先介绍Pyhton和必备组件就先到这里了,后续将详细介绍Python的核心语法,欢迎订阅。

本文的notebook均可在Github获取到,欢迎下载??: https://github.com/ChangweiZhang/Python-Tour-For-dotnet

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!