首页

文章

c语言和python哪个好入门

发布网友 发布时间:2022-03-03 12:47

我来回答

10个回答

热心网友 时间:2022-03-03 14:16

从开始看Python到现在也有半个多月了,前后看了Python核心编程和Dive into
Python两本书。话说半个月看两本,是个人都知道有多囫囵吞枣,这也是因为我暂时没有需求拿这个做大型开发,主要是平时的小程序test用一用。所以

我的策略是,整体浏览,用到时候现查。话说这核心编程第一版太古老了,老在讲2.2之前的东西,我看的翻译电子版,翻译得也不好,很晦涩。看完这个后还有
点云里雾里,看网上人家说DIP好,啄木鸟还有免费电子文档,就找来看这个。怎么说呢,讲的比核心编程好,但不适合第一次看的初学者。我之所以觉得讲得
好,是因为看核心编程,有些概念还有些模糊,看了这本书就明白不少了。要是初学者上来就看这本,保证不好理解。

下面就是在学习的过程中,在翻阅资料的过程中,总结的一些C和python比较明显的不同之处,有大方向的,也有细节的。肯定没有总结完,比如动态

函数,lambda这些,我都懒得往上写了。实际上,作为两种完全不同的语言,下面这些差异只是冰山一角而已。权当抛砖引玉吧,至少应该对和我有相同研究

兴趣,正在考虑是否学习另一门语言的朋友有点帮助。此文也算是DIP的学习笔记吧。顺带说一句,要是有朋友了解,可以帮忙推荐一下实战性强的Python
教材,语言这东西,不多练手,光比划,是不可能学好的。

学习目的

我的以后的研究方向是嵌入式,显然,C语言是我的主要语言。我不是一个语言爱好者,我以前觉得,对于做研究而不是应用的人来说,了解多门语言,不如

精通一门语言。之所以去看python,主要还是因为python更有利于快速开发一些程序,也是因为现在认识到,研究和应用是不能分离的。个人以为,要
想在计算机工程的竞争中立足,必须懂C语言。因为真正要做高性能编程,
不可能将机器的体系架构抛到脑后让Python虚拟机(或Java虚拟机等)帮你搞定所有底层。越来越多的CPU
core,越来越恐怖的内存性能瓶颈,对于上层开发人员来说,无所谓,但是对高性能程序开发人员来说,这些是无法透明的。很多应用,还是自己掌控比较有
效。这些场合中,汇编和C还是不可替代的。但是,光知道C是不够的,掌握一门面向对象语言,相对更高层的语言,不仅对以后的个人发展有利,也会对自己的技
术认识产生帮助。

如果要问对我来说谁更重要,我觉得还是C更重要。C的学习曲线更陡,貌似简单,实际上到处都是陷阱,看上去比较简单低效的程序,也不是学1,2个月

就能搞定的。谈到优化的深层次和难度嘛,需要的功底是按年算的。但是一旦你C语言的基础打好了,对计算机的理解,对其他语言的理解都是大有裨益的。比如,

如果你有C基础,可以说,学过1天python,就能写的出来一些不短的程序。后面的优化也不是什么大不了的算法,都是非常基本的语句换来换去。当然这里
不是说 Python不好,实际上,上层应用,Python比C方便的不是一个层次。

很多人觉得,既然懂C了,那么进一步掌握C++应该是水到渠成,但C++不是C的超集,而我又不喜欢C++的繁琐和巨大,所以才决定看一看Python。我很喜欢Python的优雅与快捷。

语言类型

和C不一样,Python是一种动态类型语言,又是强类型语言。这个分类怎么理解呢?大概是可以按照下列说明来分类的:

静态类型语言

一种在编译期间就确定数据类型的语言。大多数静态类型语言是通过要求在使用任一变量之前声明其数据类型来保证这一点的。Java和 C 是静态类型语言。

动态类型语言

一种在运行期间才去确定数据类型的语言,与静态类型相反。Python 是动态类型的,因为它们确定一个变量的类型是在您第一次给它赋值的时候。

强类型语言

一种总是强制类型定义的语言。Java 和 Python 是强制类型定义的。您有一个整数,如果不明确地进行转换 ,不能将把它当成一个字符串。

弱类型语言

一种类型可以被忽略的语言,与强类型相反。VBScript 是弱类型的。在 VBScript 中,您可以将字符串 ‘12′ 和整数 3 进行连接得到字符串’123′,然后可以把它看成整数 123 ,所有这些都不需要任何的显示转换。

对象机制

具体怎么来理解这个“动态确定变量类型”,就要从Python的Object对象机制说起了。Objects(以下称对象)是Python对于数据

的抽象,Python中所有的数据,都是由对象或者对象之间的关系表示的,函数是对象,字符串是对象,每个东西都是对象的概念。每一个对象都有三种属性:

实体,类型和值。理解实体是理解对象中很重要的一步,实体一旦被创建,那么就一直不会改变,也不会被显式摧毁,同时通常意义来讲,决定对象所支持的操作方

式的类型(type,包括number,string,tuple及其他)也不会改变,改变的只可能是它的值。如果要找一个具体点的说明,实体就相当于对

象在内存中的地址,是本质存在。而类型和值都只是实体的外在呈现。然后Python提供一些接口让使用者和对象交互,比如id()函数用来获得对象实体的
整形表示(实际在这里就是地址),type()函数获取其类型。

这个object机制,就是c所不具备的,主要体现在下面几点:

1 刚才说了,c是一个静态类型语言,我们可以定义int a, char
b等等,但必须是在源代码里面事先规定。比如我们可以在Python里面任意一处直接规定a =
“lk”,这样,a的类型就是string,这是在其赋值的时候才决定的,我们无须在代码中明确写出。而在C里面,我们必须显式规定char *a =
“lk”,也就是人工事先规定好a的类型

2 由于在C中,没有对象这个概念,只有“数据的表示”,比如说,如果有两个int变量a和b,我们想比较大小,可以用a ==
b来判断,但是如果是两个字符串变量a和b,我们就不得不用strcmp来比较了,因为此时,a和b本质上是指向字符串的指针,如果直接还是用==比较,
那比较的实际是指针中存储的值——地址。

在Java中呢,我们通过使用 str1 == str2 可以确定两个字符串变量是否指向同一块物理内存位置,这叫做“对象同一性”。在 Java 中要比较两个字符串值,你要使用 str1.equals(str2)。

然后在Python中,和前两者都不一样,由于对象的引入,我们可以用“is”这个运算符来比较两个对象的实体,和具体对象的type就没有关系
了,比如你的对象是tuple也好,string也好,甚至class也好,都可以用”is”来比较,本质上就是“对象同一性”的比较,和Java中
的==类似,和 C中的pointer比较类似。Python中也有==比较,这个就是值比较了。

3
由于对象机制的引入,让Python的使用非常灵活,比如我们可以用自省方法来查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行
操作。用这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先并不知道名称的函数。 这些操作在C中都是不可想象的。

4 还有一个很有意思的细节,就是类型对对象行为的影响是各方面的,比如说,a = 1; b =
1这个语句中,在Python里面引发的,可能是a,b同时指向一个值为1的对象,也可能是分别指向两个值为1的对象。而例如这个语句,c = []; d
= [],那么c和d是肯定指向不同的,新创建的空list的。没完,如果是”c = d =
[]“这个语句呢?此时,c和d又指向了相同的list对象了。这些区别,都是在c中没有的。

最后,我们来说说为什么python慢。主要原因就是function call
overhead比较大。因为所有东西现在都是对象了,contruct 和destroy 花费也大。连1 + 1 都是 function
call,像’12′+’45′ 这样的要 create a third string object, then calls the string
obj’s __add。可想而知,速度如何能快起来?

列表和数组

分析Python中的list和C中的数组总是很有趣的。相信可能一些朋友和一样,初学列表的时候,都是把它当作是数组来学的。最初对于list和数组区别的定性,主要是集中在两点。首先,list可以包含很多不同的数据类型,比如

["this", 1, "is", "an", "array"]

这个List,如果放在C中,其实是一个字符串数组,相当于二维的了。

其次呢,list有很多方法,其本身就是一个对象,这个和C的单纯数组是不同的。对于List的操作很多样,因为有方法也有重载的运算符。也带来一些问题,比如下面这个例子:

加入我们要产生一个*列表,用下面这个语句

A = [[None] * 2] * 3

结果,A的值会是

[[None, None], [None, None], [None, None]]

初一看没问题,典型的二维数组形式的列表。好,现在我们想修改第一个None的值,用语句

A[0][0] = 5

现在我们再来看看A的值:

[[5, None], [5, None], [5, None]]

发现问题没有?这是因为用 * 来复制时,只是创建了对这个对象的引用,而不是真正的创建了它。 *3 创建了一个包含三个引用的列表,这三个引用都指向同一个长度为2的列表。其中一个行的改变会显示在所有行中,这当然不是你想要的。解决方法当然有,我们这样来创建

A = [None]*3
for i in range(3):
A[i] = [None] * 2

这样创建了一个包含三个不同的长度为2的列表。

所以,还是一直强调的,越复杂的东西,越灵活,也越容易出错。

代码优化

C是一个很简单的语言,当我们考虑优化的时候,通常想得也很简单,比如系统级调用越少越好(缓冲区机制),消除循环的低效率和不必要的系统引用,等
等,其实主要都是基于系统和硬件细节考虑的。而Python就完全不一样了,当然上面说的这些优化形式,对于Python仍然是实用的,但由于
Python的语法形式千差万别,库和模块多种多样,所以对于语言本身而言,就有很多值得注意的优化要点,举几个例子吧。

比如我们有一个list L1,想要构建一个新的list L2,L2包括L1的头4个元素。按照最直接的想法,代码应该是

L2 = []
for i in range[3]:
L2.append(L1[i])

而更加优化和优美的版本是

L2 = L1[:3]

再比如,如果s1..s7是大字符串(10K+),那么join([s1,s2,s3,s4,s5,s6,s7])就会比
s1+s2+s3+s4+s5+s6+s7快得多,因为后者会计算很多次子表达式,而join()则在一次过程中完成所有的复制。还有,对于字符串操作,
对字符串对象使用replace()方法。仅当在没有固定字符串模式时才使用正则表达式。

所以说,以优化为评判标准,如果说C是短小精悍,Python就是博大精深。

include和import

在C语言中的include非常简单,因为形式单一,意义明确,当你需要用到外部函数等资源时,就用include。而Python中有一个相似的
机制,就是import。乍一看,这两个家伙挺像的,不都是我们要用外部资源(最常见的就是函数或者模块(Python))时就用这个来指明么?其实不

然,两者的处理机制本质区别在于,C中的include是用于告诉预处理器,这个include指定的文件的内容,你都给我当作在本地源文件中出现过。而

import呢,不是简单的将后面的内容*直接*插入到本地里面去,这玩意更加灵活。事实上,几乎所有类似的机制,Python都比C灵活。这里不是说C
不好,C很简练,我其实更喜欢C。

简单说说这个灵活性。import在python中有三种形式,import X, from X import *( or a,b,c……),
X = __import__(’x')。最常用的是第二种,因为比较方便,不像第一种那样老是用X.mole来调用模块。from X
import *只是import那些public的mole(一般都是不以__命名的模块),也可以指定a,b,c来import。

什么时候用哪一种形式呢?应该说,在大多数的模块文档里,都会明确告诉你应该用哪种形式。如果需要用到很多对象,那么from X import
*可能更合适一些,但是,就目前来看,大多数第三方Python库都不推荐使用from molename import *
这种格式。这样做会使引入者的namespace混乱。很多人甚至对于那些专门设计用于这种模式的模块(包括Tkinter,
threading和matplot)都不采用这种方式。而如果你仅仅需要某个对象类a,那么用from X import a比用import
X.a更好,因为以后你调用a的函数直接用a.function()既可以了,不用加X。

如果你连自己希望import的模块都不知道怎么办?请注意,此时Python的优势就体现出来了,我们可以用
__import__(mole)来调用mole,其中这个mole是字符串,这样,可以在运行时再决定,你到底要调用什么mole。举
个例子:

def classFromMole (mole, Name):
mod = __import__ (mole)
return getattr (mod, Name)

这里,定义了一个函数classFromMole,你可以在代码的任何时候调用它,

o = classFromMole (MoleOfTheClass, NameOfTheAttribute)()

只需要传入字符串形式的你希望import的模块MoleOfTheClass和其中属性的名字NameOfTheAttribute(当然可以是数据也可以是方法),就能调用了,这个名字字符串不用事先指定,而是根据当时运行的情况来判断。

顺带说一句,Python中import的顺序也有默认规定,这个和C中的include有点类似,因为我们一般都是先include系统文件,再
include自己的头文件(而且还有<>和“”的区别)。Python中呢,一般应该按照以下顺序import模块:

1. 标准库模块 — 如 sys, os, getopt 等

2. 第三方模块

3. 本地实现的模块。

全局变量

这里谈全局变量呢,倒不是说Python和c的全局变量概念不同,他们的概念是相同的。只是在使用机制上,是有一些差异的。举个例子:

– mole.py –
globalvar = 1

def func():
print globalvar
# This makes someglobal readonly,
# any attempt to write to someglobal
# would create a new local variable.

def func2():
global globalvar
globalvar = 2
# this allows you to manipulate the global
# variable

在 func这个函数中,globalvar是只读的。如果你使用了globalvar =
xxx这种赋值语句,Python会重新创造一个新的本地对象并将新值赋给它,原来的对象值不变。而在func2函数中,由于我们事先申明了
globalvar是global的,那么此时的更改就直接在全局变量上生效。

热心网友 时间:2022-03-03 15:34

python相较C语言入门要简单的多。
如果没有编程基础,强烈建议培养编程思维,先学习C语言,这样在学习其他高级语言会显得比较轻松。
但这里要说的是,如果你是想学习一门语言去找一份工作,Python目前可能并不是太合适。
如果你是一名资深程序员,强烈推荐你将Python做为第二语言,未来,它将助你在激烈的职场竞争中拔得头筹。比如:大数据、机器学习、数据处理、自动化运维、爬虫、数据采集与可视化、web后端等等。
所以c语言和python,是先苦后甜,亦或者是先甜后苦需要你衡量一下。

热心网友 时间:2022-03-03 17:09

使用c入门编程,能更好的掌握编程基础,理解代码运行原理,但是学习c比较枯燥,很难快速见到成效,可能会打击学习的积极性。
反之使用python见效快,但是因为大部分使用高级接口,所以对底层实现方面可能就比较模糊,但是也可等学完python之后再学习c去补上这块。

所以我还是推荐python入门。

如果解决了您的问题请采纳!
如果未解决请继续追问

热心网友 时间:2022-03-03 19:00

对比来说,Python比C语言入门更加简单一些,Python语言最大的特点就是功能强大、语法简单、上手容易,适合零基础人员进行学习,同时Python的应用领域是非常广泛的,比如:人工智能、数据分析、科*算、web开发、爬虫、机器学习、游戏开发等。

热心网友 时间:2022-03-03 21:08

这两个语言相比较,自然是Python更容易入门,相比于其他编程语言,Python更简单,有人说看Python的代码就像读英语一样,可见,好学程度!

热心网友 时间:2022-03-03 23:33

我觉得还是c语言比较好,入门好一些。

热心网友 时间:2022-03-04 02:14

Python好学一些,但C语言我先学的,Python拿来一看比C语言简单些

热心网友 时间:2022-03-04 05:12

python
这个应该比较容易入门。

热心网友 时间:2022-03-04 08:27

python好入门,c相对更加基础

热心网友 时间:2022-03-04 11:58

讨论这个问题,其实各有利弊,第一种方式比如你是想花大量的时间从底层一点点的去研究那么我建议你从c去了解,如果另外一种方式比如你想以兴趣为导向,一遍满足了兴趣也一遍去了解编程的逻辑那么更推荐去以python 为入门,但是个人更推荐使用python来入门,因为python的学习起来又容易又容易做出来一个实实在在的功能。更推荐python。
贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 进出口报关流程,越详细越好。谢谢大家指教。 双线桥不是看化合价升多少就标多少的吗?为什么CL2+2KI=2KCL+I2中I失... 出师表高锰酸钾有画面了吗 2021年幼儿园新学期致家长一封信 电脑屏幕一条黑线怎么办? 销售代理商销售代理商的特点 商业代理商业代理的特征 如何看微信有没有开通微众银行 为什么微众没有开户 微众银行怎么开户 微众银行APP开户流程是什么? 唐古拉山海拔唐古拉山海拔是多少 怎么看待取消跳广场舞的人的退休金 如何选购新鲜的蓝田水柿? 恭城水柿柿树作用 创维洗衣机使用教程 创维全自动洗衣机怎么使用 自动开门器 狗羊属相婚姻相配吗 3岁的小孩不会说话怎么办 3岁孩子不会说话,应该挂什么科? 3岁小孩不会说话正常吗 鹿茸炖乌鸡怎么做? 新型冠状肺炎吃什么药可以预防 冰箱上电后一直响 食品生产许可证编号开头为“ G”。 库存过期香精 立夏到小满种啥也不晚这小满是指的一天还是一个季节? 小满时节的含义是什么? Python和C语言哪个更容易学,感觉学了C语言有点难,只学过C语言的大学生很迷茫? c语言和python语言哪个更值得学? python和C语言哪个难? Python和C语言哪个更容易学,感觉学了C语言有点难? 小暑代表什么 短 python和c语言哪个难 24节气小暑什么意思 小暑代表的是什么意思 Python和C哪个更好学 c语言和python哪个好学? 微信 已经 发出的朋友圈 可以修改吗 微信朋友圈照片发表的文字不能修改吗 python难还是c语言难 微信朋友圈已经发表过的内容文字怎么修改呢 微信发表到朋友圈的文字可以修改吗 手机微信朋友圈发送的文字,写的不好,能重新改变吗? Python标准库和第三方库有什么区别 如何开发Python第三方库 python和C语言。哪个好? 计算机二级c语言与python谁难 python语言和C语言哪种容易些 字和字之间的点怎么打出来?是正中间的点 c语言2级和python哪个难 字与字中间一黑点 怎么打 c语言和python哪一个更实用 在字中间的点怎么打出来的 学python和学C语言的感受有什么不同? 手机打字字与字之间大圆点怎么打? Python和c语言哪个实用性更高? 文字中间那个点怎么打出来 字的中间有点怎么打出来呀! 字中间的点点怎么打出来呢 c语言和python哪个难 怎么上传文件到qq邮箱 c语言和python哪个好一些? c语言和python有什么较大的区别? 怎么把文档上传到QQ邮箱 怎么在qq邮箱上传文件
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com