7

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

 3 years ago
source link: https://www.cnblogs.com/mantgh/p/13232252.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

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


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

599309-20200705144623522-153379521.png

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

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

599309-20200703180525033-1975491730.png

 Python的特性概括来讲如下:

  • 包含大量的基础类型,如:数字(int, float,long)、字符串(ASCII和Unicode)、集合(list)和字典等
  • 支持面向对象编程,支持类和多继承
  • 支持代码模块和库
  • 支持异常捕获。允许抛出异常获得更清晰的错误信息
  • 动态类型,但有限支持强类型。不兼容的类型一起运算(例如字符串和整形相加)会导致抛出异常,帮助快速定位错误。
  • 支持高级编程特性,例如generator(类似C#的迭代器),列表生成式等
  • 自动内存管理。不必从代码手动管理内存

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

599309-20200705115231447-1738457495.png

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
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#时是完全不一样的,对于其它语言的开发人员下面的几个建议是非常棒的:

  • python.org的文档非常棒,简洁明了。好消息是官方文档有中文版,不用破费钱包去买书了也不用担心英文看不懂,官方文档完全够了
  • 尽早扫一遍内置的库和函数名,熟悉这些内置函数,可以大大减少你的代码量!
  • 丢掉大部分花括号和分号,Python里大部分场景都不会用到
  • Python的字符串也是不可变的,每次改动都会创建一个新的字符串对象。这点和C#一致
  • Python不支持函数重载。但函数参数为动态类型且可传递动态数量的参数,因此可以达到接近函数重载的效果
  • Python没有指针,一切都是对象引用
  • 至少阅读一次官方教程,然后浏览下函数库参考文档(至少看一下目录,你遇到的大部分问题里面可能会有可以帮到你的)

 

599309-20200705115616726-361079257.png

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更合适。

599309-20200705121350622-1894311068.png

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

599309-20200705123355767-1998704461.png

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

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

599309-20200705124640530-1527575865.png

由于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的环境。

599309-20200705125211408-351717713.png

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

Jupyter Notebook


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

599309-20200705125538353-22173400.png

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#,分别运行上面的示例代码,效果如下:

599309-20200705132136422-329473077.png
599309-20200705144824089-1867794009.png

关于如何安装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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK