Python VS C(上篇)

2023-05-16

Python VS C(上篇)

摊主的个人技术博客:https://rickyxcoder.top/ 🧑🏻‍💻
备用站点:https://rickyxcoder.gitee.io/

写在最前 ✍️

相信不少科班的同学最先学习的编程语言是 C语言

之后因为各种各样的需求,就去学习了更多的语言,比如 PythonJava 等。

如今 Python 的热度可以说是越来越高,依靠其强大的计算生态,Python 牢牢占据 TIOBE 热门编程语言排行榜 TOP3 的位置(写稿日:2023 年 4 月 14 日,Python 是 TOP1)。

相比 C语言,Python 在人工智能、数据科学、自动化、网页开发等领域有更加广泛的应用。

但是从 基本语法 的角度来看,Python 和 C语言 有不少共通之处

所以本文将从这个角度切入,列举 Python 和 C语言 在基础语法上的异同点,帮助已经掌握 C语言的同学更快上手 Python。

本篇博客也是摊主的 CS50 课程学习笔记。

CS50 是哈佛大学的计算机导论公开课,也是摊主截止目前认为最棒的计算机导论课程。

授课的 David J. Malan 教授是摊主见过的对计算机教学最热情的老师,也是在计算机基础教学领域对摊主影响最大的一位老师。摊主也希望通过自己的努力,不断向 Malan 教授这样的大牛看齐。

有兴趣的小伙伴可以点击下面的链接,查看 CS50 课程的相关信息。

CS50 官方课程网站:https://cs50.harvard.edu/x/2023/


正文(上篇)

程序运行过程

C语言

C语言 中,源代码 test.c 通过 编译器 编译为可执行文件 test

gcc -o test test.c

执行该文件

./test

Python

Python 是 解释型语言,不需要编译成可执行文件,源代码 test.py 可以直接被 解释器 读取和执行,解释器会逐行解释代码并执行相应的操作。

python test.py

库/模块的导入

C语言

基本语法

#include <...>  // 基本语法

实例

#include <stdio.h>  // 实例
#include <string.h>
#include <math.h>

Python

基本语法

import <...>            # 导入整个模块
import <...> as <...>   # 导入整个模块并且给模块取别名
from <...> import <...> # 导入模块中的某个方法或属性
from <...> import *     # 导入模块中的所有方法和属性

实例

import csv
import numpy as np
from math import sqrt, sin, cos
from datetime import *

主函数

C语言

在C语言中,主函数 main 是程序执行的起点,它的函数原型如下:

int main(int argc, char *argv[]);

其中,argc 表示命令行参数的数量,argv 是一个指向每个参数的指针数组。主函数可以通过命令行参数来接收外部传递进来的数据。

一些特点

  • main 函数必须存在于程序中,否则编译器会报错。

  • main 函数中的代码将按照从上到下的顺序依次执行。

  • 程序执行结束后,main 函数可以返回一个整数值,表示程序的执行结果。一般来说,返回值为 0 表示程序执行成功,非零值表示程序执行失败或出错。

C语言 main 函数实例:

#include <stdio.h>

int main(int argc, char *argv[]) {
    printf("Hello, World!\n");
    return 0;
}

Python

Python 中没有像 C 语言中的 main 函数那样的入口函数,整个 Python 脚本都是可执行的。

但是,为了方便编写测试代码和模块化编程,Python 提供了一种 判断当前脚本是否作为主程序执行 的方式,即通过判断 __name__ 变量的值是否为 "__main__"

  • 当 Python 脚本作为主程序执行时,__name__ 的值会被设置为 "__main__"
  • 当 Python 脚本作为模块被导入时,__name__ 的值会被设置为模块的名称。

这个特性可以让我们在 Python 脚本中编写一些测试代码,但不会影响到被导入的代码。

通常,在 Python 脚本的末尾会使用以下代码来判断当前脚本是否作为主程序执行:

if __name__ == "__main__":
    # 在这里编写主程序

在这个代码块中,我们可以编写 Python 脚本的主要逻辑。当我们在命令行中执行这个脚本时,就会执行这个代码块中的代码。例如,下面是一个简单的 Python 脚本示例:

def say_hello():
    print("Hello, World!")

if __name__ == "__main__":
    say_hello()

当我们在命令行中执行这个脚本时,将会输出 "Hello, World!";而如果我们将这个脚本作为模块导入到其他脚本中时,say_hello 函数不会被执行。


基本数据类型

C/C++

数据类型实例备注
boolbool is_prime = truebool is_odd = false早期 C语言 并不支持 bool 类型,通常用0和1表示
而 C++ 支持 bool 类型
charchar c = 'b'表示单个字符
intint n = 10整数
floatfloat a = 1.101单精度浮点数
doubledouble b = 1.10001双精度浮点数
longlong long n = 10000长整形
stringstring s = "hello"C语言 并没有 string 类型,通常用字符数组或字符指针表示
而 C++ 支持 string 类型

🍉 PS:更多语法细节由于篇幅所限,且本文重点是两个语言的语法对比,故暂不列出,有需要同学可以自行查阅相关细节。

Python

数据类型实例备注
boolis_prime = Trueis_odd = False首字母需大写
intnum = 10整数
floatavg = 33.333浮点数
complexc = 1 + 2j复数
strs = 'hello't = "world"单引号和双引号均可表示字符串
NoneTypen = None空类型,表示没有值,用于占位或表示不存在的情况。

🍉 PS:C 语言中的整数类型有固定的位数,例如 int 类型通常是 32 位或 64 位。而 Python 中的整数类型是动态的,可以表示任意大小的整数。

Python中的列表(list)、集合(set)、字典(dictionary)等将在 Python VS C(下篇)中对比。


变量

C语言

int counter = 0;  // 需要指定变量的数据类型
counter++;        // 支持++等自增运算符

C 语言是一种 静态类型语言,需要 在使用变量之前明确定义变量的数据类型

Python

counter = 0  # 无需指定变量的数据类型
counter += 1 # 不支持++等自增运算符

Python 是一种 动态类型语言,因此它的数据类型是动态推断的,不需要事先定义变量的数据类型

🍉PS:Python 中的数据类型通常是对象,具有更加丰富和灵活的操作和属性,例如字符串类型的方法和属性可以方便地进行字符串的处理和操作。而 C 语言中的数据类型则通常是基本数据类型,需要使用函数来进行操作和处理。


逻辑运算符

Python 和 C 语言都支持「与」、「或」、「非」等逻辑运算符,但是具体的语法略有不同。

C语言

  • && 运算符:当两个操作数都为真(非零)时,结果为真,否则为假。
  • || 运算符:当两个操作数中至少有一个为真(非零)时,结果为真,否则为假。
  • ! 运算符:对操作数取反,即真变为假,假变为真。

Python

  • and 运算符:当两个操作数都为 True 时,结果为 True,否则为 False。

  • or 运算符:当两个操作数中有至少一个为 True 时,结果为 True,否则为 False。

  • not 运算符:对操作数取反,即 True 变为 False,False 变为 True。

🍉 PS:C 语言 中的逻辑运算符 不具有短路运算 的特性,总是会计算左右两侧的操作数;而 Python 中的逻辑运算符具有 短路运算 的特性,当左侧操作数已经可以确定结果时,右侧操作数不再进行计算。


算术运算符

运算符描述C 示例Python 示例
+加法a + ba + b
-减法a - ba - b
*乘法a * ba * b
/浮点除法a / ba / b
%取模a % ba % b
/整除a / ba // b
a b a^b ab幂运算pow()a ** b

🍉 PS1:在 C 语言中,没有幂运算符,需要使用库函数 pow() 来进行幂运算,且 pow() 函数返回的是一个浮点数值,需要进行类型转换才能得到整数类型的结果。

例如:

#include <stdio.h>
#include <math.h>

int main() {
    int a = 2;
    int b = 3;
    int c = pow(a, b);   // c 的值为 8,
    printf("%d\n", c);
    return 0;
}

🍉 PS2:需要注意的是,在 C 语言中进行整数除法时,如果两个操作数都是整数,则除法运算符 / 返回的是一个整数值,会向下取整;而在 Python 中,除法运算符 / 返回的是一个浮点数值。


位运算

Python 和 C 语言中的位运算符均包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移位(<<)和右移位(>>)等运算。

运算符描述C 示例Python 示例
&按位与a & ba & b
|按位或`ab`
^按位异或a ^ ba ^ b
~按位取反~a~a
<<左移位a << ba << b
>>右移位a >> ba >> b

🍉 PS1:C 语言中的位运算符只能用于整数类型,包括有符号整数和无符号整数,而 Python 中的位运算符可以用于整数类型和布尔类型,布尔类型会被转换为整数类型(True 转换为 1,False 转换为 0)。

🍉 PS2:Python 和 C 语言的右移运算符(>>)在处理有符号整数时表现不同。Python 对负数的右移是向零舍入(也称为算术右移),而 C 语言的行为是依赖于编译器实现的(可能是算术右移或逻辑右移)。


条件语句

C语言

int x = 3, y = 5;
if (x > y) {
    printf("x > y\n");
} else if (x == y) {
    printf("x = y\n");
} else {
    printf("x < y\n");
}

Python

x = 3
y = 5
if x > y:
    print("x > y")
elif x == y:
    print("x = y")
else:
    print("x < y")

不同点:

  • C语言的条件表达式需要由括号() 括起来,而 Python 的条件表达式无需添加 () (但是加了也没错)
  • C语言使用 花括号 {} 来表示代码块,而 Python 使用 缩进 来表示代码块,且需要在条件表达式后添加 :
  • C语言使用 else if,而 Python 使用 elif

写在最后 ✍️

由于篇幅有限,且为了读者更好的阅读体验,摊主把内容拆成了上篇和下篇,更多对比内容见 Python VS C(下篇)☘️


参考资料 📚

Python官方教程:https://docs.python.org/3/tutorial/

CS50:https://cs50.harvard.edu/x/2023/

ChatGPT:https://openai.com/blog/chatgpt

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python VS C(上篇) 的相关文章

随机推荐

  • 【无标题】

    stm32最小核心板串口通讯连接方式 首先需要一个含有CH430的usb转ttl模块 3 3v接板子上的3 3v GND接板子上的GND 注意 不要接反了 接反的话usb转ttl模块不会亮 如果接反了并且usb转ttl模块插到电脑上 板子会
  • selenium 滑块问题解决

    滑块问题解决 问题解决分为两步 图片处理 滑块移动处理 图片处理 1 图片获取 这里获取的是背景以及滑块图片 获取图片 通过requests get 将图片下载到本地 with open 39 yuan image html 39 39 r
  • VisionPro 9.0 安装完,没有在Visual Studio 2019工具箱中上显示控件

    VisionPro 9 0 安装完 没有在Visual Studio 2019工具箱中上显示控件 步骤 右键工具箱 然后点击 选择项 然后点击浏览选项 3 目录位置 C Program Files x86 Cognex VisionPro
  • visionPro通过网线连接海康相机踩过的坑

    visionPro通过网线连接海康相机踩过的坑 1 搞了两三天 xff0c 笔者用的是笔记本是小新 xff0c 没有网口 xff0c 通过USB转网口连接摄像头 xff0c 明确的告诉你不行 xff0c USB即使达到所谓的千兆 xff0c
  • 完成select的TCP客户端

    include lt stdio h gt include lt sys types h gt include lt sys socket h gt include lt arpa inet h gt include lt netinet
  • vins概述

    基本框架如上 xff0c VINS的功能模块可包括五个部分 xff1a 数据预处理 初始化 后端非线性优化 闭环检测及闭环优化 代码中主要开启了四个线程 xff0c 分别是 xff1a 前端图像跟踪 后端非线性优化 xff08 其中初始化和
  • 软件项目管理总结(全)

    软件项目管理知识综述 第一章知识总结 软件项目管理的作用和重要性 项目管理就是将知识 技能 工具与技术应用于项目活动 xff0c 以满足项目的要求 项目管理通过合理 运用与整合特定项目所需的项目管理过程得以实现 项目管理使组织能够有效且高效
  • FreeRTOS 的任务调度方式和具体任务是怎么切换的

    FreeRTOS操作系统主要是两种任务调度方式 xff1a 抢占式调度 每个任务都有不同的优先级 xff0c 任务会一直运行直到被高优先级任务抢占或者遇到阻塞式的 API 函数 xff0c 比如 vTaskDelay 时间片调度 每个任务都
  • linux/UNIX中如何使用fork函数调用exec函数族,实现子进程做特定操作

    前言 在 Unix Linux 操作系统中 xff0c 进程是一种非常重要的概念 进程是程序执行的实例 xff0c 操作系统会为每个进程分配资源 xff0c 进程之间相互独立 xff0c 可以进行通信 在 Unix Linux 中 xff0
  • Opencv学习----矩阵操作-基本操作

    5 1 基本操作 cv absdiff InputArray src1 InputArray src2 OutputArray dst 计算两个数组之间或数组与标量之间的每元素绝对差值 注意 当阵列具有深度CV 32S时 xff0c 不应用
  • 【Linux】实验报告2 Linux基础命令

    作者 xff5c Ricky 水果摊 时间 xff5c 2022年6月27日 文章目录 实验目的实验原理1 Linux文件系统2 Linux存储位置常用命令存放位置头文件存放位置 3 Linux常用命令路径目录文件 实验内容1 Linux常
  • 【Linux】实验报告3 vi、gcc 和 gdb 的使用

    实验三 编辑器 vi 编译器 gcc 和调试器 gdb 的使用 文章目录 实验三 编辑器 vi 编译器 gcc 和调试器 gdb 的使用实验目的实验原理1 vi和vim简介1 1 vi1 2 vim 2 vi的三种工作模式2 1 命令模式
  • 【Linux】实验报告8 Linux文件系统

    作者 xff5c Ricky的水果摊 时间 xff5c 2022年7月6日 文章目录 实验目的实验内容1 文件信息命令2 基本的命令行文件管理3 文件系统权限操作 实验目的 使用 控制字符 执行特殊功能 xff1b 使用 file 和 st
  • 【Java】学习日记 Day16

    作者 xff5c Ricky 水果摊 时间 xff5c 2022年7月21日 x1f308 今日知识点总结 方法重载 xff08 Overload xff09 1 方法重载的定义 方法重载 是指 Java 允许在同一个类中 xff0c 定义
  • 【信息奥赛题解】昆虫繁殖(详细分析题解 & C++ 代码)

    昆虫繁殖问题 x1f31f 题目名称 昆虫繁殖 题目描述 科学家在热带森林中发现了一种特殊的昆虫 xff0c 这种昆虫的繁殖能力很强 每对成虫过 X X X 个月后开始产卵 xff0c 每月产 Y Y
  • 【期末指北】嵌入式系统——选择题(feat. ChatGPT)

    作者 xff5c Ricky 水果摊 时间 xff5c 2023年2月20日 基本信息 本博客摘录了一些 嵌入式系统 的 常见选择题 xff0c 供有需求的同学们学习使用 部分答案解析由 ChatGPT 生成 xff0c 博主进行审核 使用
  • GPT-4 终问世!旧王已死,新王当立!面对AI,人类真的准备好了吗?

    GPT 4 终问世 xff01 旧王已死 xff0c 新王当立 xff01 面对AI xff0c 人类真的准备好了吗 xff1f 摊主一大早醒来 xff0c 就看见 GPT 4 发布的消息 xff0c 不得不感慨今年 AI 更新的速度真是太
  • 【Linux】如何在 Ubuntu 上安装 Clang 编译器

    Linux Ubuntu 上安装 Clang 编译器 摊主将在本文中介绍如何在 Ubuntu 上安装 Clang 编译器 摊主的个人技术博客 xff1a https rickyxcoder top x1f9d1 x1f3fb x1f4bb
  • 【信息奥赛题解】四平方和(详细分析题解 & C++ 代码)

    x1f4da 四平方和 摊主的个人技术博客 xff1a https rickyxcoder top x1f9d1 x1f3fb x1f4bb 备用站点 xff1a https rickyxcoder gitee io x1f680 题目浏览
  • Python VS C(上篇)

    Python VS C xff08 上篇 xff09 摊主的个人技术博客 xff1a https rickyxcoder top x1f9d1 x1f3fb x1f4bb 备用站点 xff1a https rickyxcoder gitee