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

语言特性


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

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

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

Python的特性概括来讲如下:

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

现在来看个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的原因,其独特的语法需要我们先熟悉。

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

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

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获取到,欢迎下载

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

  1. [No000011F]Python教程2/9-安装Python 及其解释器介绍

    因为Python是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.在Windows上写Python程序,放到Linux上也是能够运行的. 要开始学习Python编程,首先 ...

  2. 灵魂画手的零基础python教程1:关于Python学习的误区、python的优缺点、前景

    滴~ 近段时间,因为工作项目的原因,阿菌要重拾起python这门语言了,所以顺势写一门python教程,精心的编排,配上漫画和视频,希望能帮助更多想接触编程的同学入门,课程将从基础语法开始讲起,和大家 ...

  3. Python教程(1.1)——配置Python环境

    在正式开始学习Python之前我们需要先配置好Python环境. Python Python可以从Python官方网站上,选择适合你的操作系统的版本下载.下载完之后,运行下载的可执行文件进行安装. 这 ...

  4. Python教程(一)Python简介

    Python就为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作“内置电池(batteries included)”.用Python开发,许多功能不必从零 ...

  5. SPSS python教程:[1]安装Python Essentials

    python机器学习-乳腺癌细胞挖掘(博主亲自录制视频)https://study.163.com/course/introduction.htm?courseId=1005269003&ut ...

  6. Python - 搭建Jupyter notebook环境

    1- Jupyter简介 HomePage:https://jupyter.org/ 安装指南:https://jupyter.org/install.html 官方文档:https://jupyte ...

  7. Python 在cmd中import模块成功,但是在jupyter notebook中No module xxx found

    由于需要用到python中的某个库,因此打开命令行窗口cmd,然后使用pip安装.安装成功后,在cmd中输入python调出python环境,import该模块并使用,可以正常使用.但是打开juypt ...

  8. 阿里巴巴资深技术专家雷卷:值得开发者关注的 Java 8 后时代的语言特性

    作者 | 阿里巴巴资深技术专家  雷卷,GitHub ID @linux-china 导读:在 Python.JavaScript 等一众编程语言崛起风靡之际,一代霸主 Java 风采虽不及当年,但仍 ...

  9. [Python Debug]Kernel Crash While Running Neural Network with Keras|Jupyter Notebook运行Keras服务器宕机原因及解决方法

    最近做Machine Learning作业,要在Jupyter Notebook上用Keras搭建Neural Network.结果连最简单的一层神经网络都运行不了,更奇怪的是我先用iris数据集跑了 ...

随机推荐

  1. Linux 自动挂载与fstab文件修复

    /etc/fstab文件 自动挂载就是写入/etc/fstab文件 vi /etc/fstab 其中,第九行是/分区的自动挂载信息,有6个字段 第一字段表示分区的UUID(硬盘通用唯一识别码,使用du ...

  2. ThinkPHP6.0 + Vue + ElementUI + axios 的环境安装到实现 CURD 操作!

    官方文档地址: ​ ThinkPHP6.0: https://www.kancloud.cn/manual/thinkphp6_0/1037479 ​ ElemetUI: https://elemen ...

  3. [原创][开源]SunnyUI.Net, C# .Net WinForm开源控件库、工具类库、扩展类库、多页面开发框架

    SunnyUI.Net, 基于 C# .Net WinForm 开源控件库.工具类库.扩展类库.多页面开发框架 Blog: https://www.cnblogs.com/yhuse Gitee: h ...

  4. Spyder汉化教程

    汉化包下载地址:https://www.lizenghai.com/archives/523.html 1.解压汉化包 2. 3.1.运行汉化补丁PS C:\WINDOWS\system32> ...

  5. spring cloud 集成分布式配置中心 apollo(单机部署apollo)

    一.什么是apollo? Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...

  6. yii2中的场景使用

    下面给大家介绍一下 yii2.0 场景的使用.小伙多唠叨一下了,就是担心有的人还不知道,举个简单的例子,现在在 post表里面有 title image content 三个的字段,当我创建一个 po ...

  7. CentOS 7设置静态IP并修改DNS

    1. 设置静态IP 首先需要确定网线插在服务器的哪一个网络接口上,接口旁边一般都有写.我这边是插在1号接口上的. 然后修改网络配置文件,文件位于 /etc/sysconfig/network-scri ...

  8. (九)HttpClient获取cookies

    原文链接:https://blog.csdn.net/cheny1p1ng/article/details/90780024 旧版本DefaultHttpClient 使用getCookieStore ...

  9. Python实现二分法和黄金分割法

    运筹学课上,首先介绍了非线性规划算法中的无约束规划算法.二分法和黄金分割法是属于无约束规划算法的一维搜索法中的代表. 二分法:$$x_{1}^{(k+1)}=\frac{1}{2}(x_{R}^{(k ...

  10. vc++如何知道cppdlg所关联的对话框?

    vc++ 6.0如何知道cppdlg所关联的对话框? 找a.cpp对应的a.h头文件里面找. https://blog.csdn.net/txwtech/article/details/1020824 ...