饮冰三年-人工智能-Python-10之C#与Python的对比

时间:2021-04-12 08:54:37

  开篇的话:任何⼀⻔语⾔都不是完美的,建议各位不要拿⼀个语⾔的劣势去跟另⼀个语⾔的优势来去⽐较,语⾔只是⼀个⼯具。正如天龙八部里面,萧峰萧大侠用太祖长拳PK少林功夫一般。存在即合理!我想应该不用我说了吧,PHP......

    乔峰眼见旁人退开,蓦地心念一动,呼的一拳打出,一招“冲阵斩将”,也正是“太祖长拳”中的招数。这一招姿工既潇洒大方已极,劲力更是刚中有柔,柔中有刚,武林高手毕生所盼望达到的拳术完美之境,竟在这一招中青露无遗。来到这英雄宴中的人物,就算本身武功不是甚高,见识也必广博,“太祖拳法”的精要所在,可说无人不知。乔峰一招打出,人人都是情不自禁的喝了一声采!
这满堂大采之后,随即有许多人觉得不妥,这声喝采,是赞誉各人欲杀之而甘心的胡虏大敌,如何可以长敌人志气,灭自己威风?但采声已然出口,再也缩不回来,眼见乔峰第二招“河朔立威”一般的精极妙极,比之他第一招,实难分辨到底哪一招更为佳妙,大厅上仍有不少人大声喝采。只是有些人憬然惊觉,自知收敛,采声便不及第一招时那么响亮,但许多“哦,哦”“呵,呵!”的低声赞叹,钦服之忱,未必不及那大声叫好。乔峰初时和各人狠打恶斗,群雄专顾御敌,只是惧怕他的凶悍厉害,这时暂且置身事外,方始领悟到他武功中的精妙绝伦之处。
但见乔峰和玄难只拆得七八招,高下已判。他二人所使的拳招,都是一般的平平无奇,但乔峰每一招都是慢了一步,任由玄难先发。玄难一出招,乔峰跟着递招,也不知是由于他年轻力壮,还是行动加倍的迅捷,每一招都是后发先至。这“太祖长拳”本身拳招只有六十四招,但每一招都是相互克制,乔峰看准了对方的拳招,然后出一招愉好克制的拳法,玄难焉得不败?这道理谁都明白,可是要做到“后发先至”四字,尤其是对敌玄难这等大高手,众人若非今日亲眼得见,以往连想也从未想到过。

十九 虽万千人吾往矣

饮冰三年-人工智能-Python-10之C#与Python的对比

宏观对比

一、语言类型


1:编译型语言vs解释型语言

  1.1 what&why?什么是编译型语言?什么是解释型语言?为什么要区分编辑型和解释型

    计算机不能直接认识并执⾏我们写的语句,它只能认识机器语⾔(是⼆进制的形式)。

    通过编译器是把源程序的每⼀条语句都编译成机器语⾔,并保存成⼆进制⽂件,这样运⾏时计算机可以直接以机器语⾔来运⾏此程序,速度很快;

    ⽽解释器则是只在执⾏程序时,才⼀条⼀条的解释成机器语⾔给计算机来执⾏,所以运⾏速度是不如编译后的程序运⾏的快的.
饮冰三年-人工智能-Python-10之C#与Python的对比

  1.2 C#和python分别属于哪种类型?他们的优缺点是什么?

    C#可以认为是编译型语言(严格的说是混合型),python属于解释型语言。

    C#的优点是快,运行速度快。因为编译只做⼀次,运⾏时不需要编译,所以编译型语⾔的程序执⾏效率⾼。

    编译是一把双刃剑,代码如果修改就需要整个模块重新编译,而且需要根据运⾏的操作系统环境编译不同的可执⾏⽂件。

    正所谓:鱼和熊掌不可兼得。python的优点就是跨平台比较强,代码修改不需要停机,缺点就是每次运⾏的时候都要解释⼀遍。

    正所谓:两权相害取其轻 。随着软硬件的飞速发展,解释运行的时间和编译后再运行的时间差会越来越小,而python语言的“优雅”、“明确”、“简单”的优势也日趋明显。

2:强类型语言vs弱类型语言    

  强类型语言:简单理解不允许不同类型相加。优点是:能够享受代码提示功能,能够在编译期发现更多错误。

  C#是强类型语言,python也是强类型语言。我家门前有两棵树,一棵是枣树,另一棵还是枣树。--鲁迅

  即便如此还是有区别的。C#中的“变量”在开发时的类型便是明确的:String便是String,Int32就是Int32,当然C#也有var 或者Object这些类似弱类型变量,但是定义变量的时候必须确定类型;python变量定义时候不需要指明类型,可以先给其赋值为整形,再赋值成字符串类型。这种区别其实是静态语言和动态语言的区别。名可名,非常名。

二、python 特色


1:基础数据类型:

  python中最大的特点就是灵活(不用事先声明)、可嵌套。

2:解包

   2.1 左右个数相等  

    name, age, date = ['aaron', 20, '2020-02-02']

    print(name)  #输出结果 aaron ;  print(age)  #输出结果  20;   print(date) #输出结果 2020-02-02

  2.2 左边个数小于右边

    name, *age, date = ['aaron', 15,17,18,20, '2020-02-02']

    print(name)  #输出结果 aaron;   print(age)  #输出结果  [15, 17, 18, 20];  print(date) #输出结果 2020-02-02

  2.3 总结

  1. 自动解包支持一切可迭代对象
  2. python3中,支持更高级的解包操作,用星号操作使得等号左边的变量个数可以少于右边迭代对象中元素的个数。
  3. 特别是函数调用时,可以用 * 或者 ** 解包可迭代对象,作为参数传递。相当于可变参数。

  2.4 区别

    函数可变参数,区别C#中可以通过关键字params,但是使用程度远不及Python中普遍。

    在C#中区分两个函数是否相同是根据方法签名,方法签名包括方法名+参数列表。也就是方法名相同,参数列表不同,叫做重载。例如两个求和方法:sumFun(int a,int b),sumFun(int a,int b,intc) 在调用时,根据方法签名进行匹配调用。sumFun(1,2) 和 sumFun(1,2,3)。

    在python中,如果定义两个同名方法  def sumFun(a,b),def sumFun(a,b,c)。后面的会直接把前面的覆盖掉。调用的时候sumFun(1,2),会报错。内容大致为:sumFun方法缺少参数c。

3:函数

  3.1 函数名可以当做参数传递,当做结果返回

    C#中委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。可参考博客C#委托

    Python中函数名其实是内存地址。函数即变量。可以非常容易的进行传递,可参考博客变量与函数

4:类和对象

  C#和Python都是面向对象。首先定义一个类,然后通过对象实例化。进而对象可以调用类的相应方法。  

using System;
namespace HelloWorldApplication
{
class Person
{
public string name; // 名字
public int age; // 年龄
//定义构造函数
public Person(string name, int age)
{
this.name = name;
this.age = age;
}
public void sayHi(){
Console.WriteLine("Hi,我是: {0},我今年{1}", name,age);
}
}
class PersonTest
{
static void Main(string[] args)
{
Person p1 = new Person("张三",20);
p1.sayHi(); }
}
}

C#定义并实例化一个类

class Person:
# 定义构造方法
def __init__(self, name, age):
self.name = name
self.age = age def sayHi(self):
print("Hi,我是: %s,我今年%s" %(self.name,self.age)) # 调用 p = Person("张三",18) p.sayHi()

Python中定义并实例化一个类

  C#中定义类的时候需要声明该类相应的属性并指定数据类型,并且通过构造方法(方法名和类名一样)给属性赋值;Python中也是先调用__new__构造方法,然后通过__init__初始化方法给进行相应赋值。

  C#在对象初始化的时候通过new 类名(数据类型必须跟构造函数一致)。Python中不需要使用new 关键字。

现在发现,只有年龄是不够的,需要加上这句话是哪一年说的。那么C#的类修改起来就比较麻烦了。Python类不用做调整,只需要在调用处对方法进行修改即可

class Person:
# 定义构造方法
def __init__(self, name, age):
self.name = name
self.age = age def sayHi(self):
print("Hi,我是: %s,我今年%s" %(self.name,self.age)) # 调用 p = Person("张三",18)
p.Year=2020
def sayHi(self):
print("Hi %s,我是: %s,我今年%s" % (self.Year,self.name, self.age))
p.sayHi=sayHi
p.sayHi(p) #Hi 2020,我是: 张三,我今年18 p2 = Person("李四",20)
p2.sayHi() #Hi,我是: 李四,我今年20

添加属性+修改方法

 

微观对比

一、数据类型


1:基本数据类型  

  1.1 数字类型

    1.1.1 整型的除法   

c# 中的除法
int a = 39/8 ; //a 4
python 中的除法
取全值 a = 39/8 ; #a 为 4.875
取商 a2 = 39//8 ; #a2 为 4
取余 和C#中一致 a3 = 39%8 ; #a3 为 7
幂运算 a4 = 2 ** 5; #a3 为 2*2*2*2*2=32

Python中的除法和幂运算

  1.2 字符串

    1.2.1 字符串表示方法     

C#中
"" 用双引号如("我是字符串")
Python中
"我是字符串"
'我是字符串'
"""我是字符串"""
'''我是字符串'''

python中有4种方法表示字符串类型    

    1.2.2 字符串可以做乘法,表示多次输出      

n1 = "Aaron"
n2 = n1 * 10

字符串做乘法表示多次输出

  1.3 列表    

C# 中 只能指定某一个数据类型
List<string> listStr = new List<string>();
C# 中的数组
int[] numbers = new int[5] {1, 2, 3, 4, 5}; python 适用于多种类型
li=[1,12,19,"name",["张三",["",21]"李四"],"Aaron",True]; #中括号扩起来,,分割.比C#和Java中强大 list

列表

  1.4 强制类型转换  

C#中强制类型转换是:新变量=(类型)变量
double d = 5673.74;
int i;
// 强制转换 double 为 int
i = (int)d;   python 中强制类型转换是:新变量=类型(变量)
i = int("")

强制类型转换

2:其他数据类型

PS:更多关于基本数据类型可参考基础之运算符与数据类型

二、语法


1:基础语法

  1.1 语句结束符

      C#每句结尾需要;分割。python中可以以;分割,也可以以换行符分割。

  1.2 注释    

注释符

  1.3 逻辑运算符

   分别是运算符号的不同,变量值的类型不通过

   python中的与、或、非分别是 and、or、not。示例:a and b。

   python中的变量值可以是布尔类型,也可以是字符串等其他类型。具体细节可参考Python基础之运算符与数据类型

   C#  中的与、或、非分别是 &&、||、! 示例:a && b。  

   C#  中的变量值只能是布尔类型。

 1.4 循环

  1.4.1 while循环

    while 可以加else

while 条件:
print("ok")
else:
print("结果")

while else

  1.4.2  for循环

v = range(5)
for item in v:
print(item);
# 输出结果
#
#
#
#
#
# 输出结果

三、具体功能对比


1:文件读写操作

    C#中文件读取

    java中文件读取

    python中文件读取

2:网络数据采集操作

   例如同一个功能,查看博客园中,我都写了哪些随笔,都是什么时间写的.做一个数据的采集分析。

  C#中数据采集

  python中数据采集 ps:python中可以利用Scrapy框架,更便捷进行数据分析

饮冰三年-人工智能-Python-10之C#与Python的对比的更多相关文章

  1. 饮冰三年-人工智能-Python-28 企业官网(组合搜索)

    1 2:组合搜索 2.1 创建model类 from django.db import models class Direction(models.Model): """ ...

  2. 饮冰三年-人工智能-Python-11之HelloWorld

    1:安装不在介绍,下载软件下一步即可,配置环境变量(Python37会默认配置环境变量的) D:\Programs\Python\Python37\Scripts\;D:\Programs\Pytho ...

  3. 饮冰三年-人工智能-Python-22 Python初识Django

    1:一个简单的web框架 # 导包 from wsgiref.simple_server import make_server #自定义个处理函数 def application(environ,st ...

  4. 饮冰三年-人工智能-Python-21 Python数据库MySql

    一:下载与安装 1:下载地址:https://dev.mysql.com/downloads/mysql/ 2:安装MySql 打开下载文件解压到指定文件目录.(我这里解压目录为D:\MySql\my ...

  5. 饮冰三年-人工智能-Python-20 Python线程、进程、线程

    进程:最小的数据单元 线程:最小的执行单元 一: 1:线程1 import threading #线程 import time def Music(): print("Listen Musi ...

  6. 饮冰三年-人工智能-Python-19 Python网络编程

    Socket:套接字.作用:我们只需要安照socket的规定去编程,就不需要深入理解tcp/udp协议也可以实现 1:TCP协议 1.1  客户端服务端循环收发消息 # 1:引入stock模块(导包) ...

  7. 饮冰三年-人工智能-linux-08 软件包管理(Python的安装)

    1:软件包存放的位置 media/CentOS_6.9_Final/Packages文件夹下 2.RPM就是Red Hat Package Manger(红帽软件包管理工具)的缩写. 2.1 常用的命 ...

  8. 饮冰三年-人工智能-Python-30 python开发中常见的错误

    1:触发条件:创建的实体类生成到数据库表时报错 报错信息:TypeError: __init__() missing 1 required positional argument: 'on_delet ...

  9. 饮冰三年-人工智能-Python-23 Python PyCharm 使用中常见的问题

    一:软件工具使用中遇到的问题 1:AttributeError: module 'pip' has no attribute 'main'问题 处理方法: a:找到JetBrains\PyCharm ...

随机推荐

  1. 记录一下git 的常用命令

    以后如果要写一个东西,最好先搭建一个本地仓库,用版本控制对其进行操作,可能一开始有一些麻烦,但是很有可能会受益无穷. 说到git,必然会和github联系起来. 不管是在ubuntu里面还是在Wind ...

  2. WPF使用IDataErrorInfo进行数据校验

    这篇博客将介绍如何使用IDataErrorInfo进行数据校验.下面直接看例子.一个Customer类,两个属性(FirstName, Age) class Customer { public str ...

  3. Android Failure &lbrack;INSTALL&lowbar;FAILED&lowbar;OLDER&lowbar;SDK&rsqb;

    今天编译工程发现 提示“ Failure [INSTALL_FAILED_OLDER_SDK]” 最后发现最小minSdkVersion 超过当前机器的版本,修改配置表中的minSdkVersion, ...

  4. java高并发锁的3种实现

    初级技巧 - 乐观锁 乐观锁适合这样的场景:读不会冲突,写会冲突.同时读的频率远大于写. 以下面的代码为例,悲观锁的实现: Java代码   public Object get(Object key) ...

  5. jQuery&period;proxy&lpar;&rpar; 函数详解

    jQuery.proxy()函数用于改变函数的上下文. 你可以将指定函数传入该函数,该函数将返回一个新的函数,其执行代码不变,但函数内部的上下文(this)已经被更改为指定值. 该函数属于全局的jQu ...

  6. 问题:AJAX的send参数里,空格以及它后面的数据在传递时消失(已解决&rpar;

    今天,我在写关于前端向后台传递一些数字进行排序,并把结果返回到前端的程序.我用的是POST方式,须要在send里面写键值对. 前端和后台都写完,但是,前端传递给后台的数据是一部分,我检查了下,发现获取 ...

  7. 消息中间件:rabbitmq安装

    转自:https://blog.csdn.net/qq_27384769/article/details/79465954 1.下载Erlangwget  http://erlang.org/down ...

  8. 配置文件——节点&lt&semi;machineKey&gt&semi;的作用,强随机生成

    <machineKey>这个节允许你设置用于加密数据和创建数字签名的服务器特定的密钥.ASP.NET自动使用它来保护表单验证Cookie,你也可以将它用于受保护的视图状态数据.同时,这个密 ...

  9. 【LeetCode每天一题】String to Integer &lpar;atoi&rpar;&lpar;字符串转换成数字&rpar;

    Implement atoi which converts a string to an integer.The function first discards as many whitespace ...

  10. 给大一新生学习c程序的一些建议的一些建议

    这是一篇给刚学习c程序的学弟们的一篇日志.如果想学好c程序,以及不想走太多弯路,希望能看一下这篇文章,如果说基础较好,或者说已经是大二,大三,这篇文章不会有什么帮助. 刚转到软件工程系,加了几个新生群 ...