返回介绍

建议3:理解 Python 与 C 语言的不同之处

发布于 2024-01-30 22:19:09 字数 2166 浏览 0 评论 0 收藏 0

我们都知道,Python底层是用C语言实现的,但切忌用C语言的思维和风格来编写Python代码。对于那些在学习Python之前有其他编程语言(如Java、C#等)经验的程序员来说,尤其重要的是:不要使用之前的编程思想。Python与它们有很多不同,以下从语法方面来进行简单分析。

(1)“缩进”与“{}”

与C、C++、Java等语言使用花括号{}来分隔代码段不同,Python中使用严格的代码缩进方式分隔代码块,空格或者Tab键不再是你心血来潮的时候可以随便敲敲解闷的了,对于Python解释器而言,它们直接关乎代码的语法和逻辑,一不小心就会出现unexpected indent错误。Python的这一特点也曾引起不少争议,强制代码缩进就像一把双刃剑,有利有弊。对于从其他编程语言转过来学习Python的人来说,也许需要一段时间去适应。但不可否认,严格的缩进确实能让代码更加规范、整齐,可读性和可维护性都会更高。避免缩进带来的困扰的方法之一就是养成良好的习惯,统一缩进风格,不要混用Tab键和空格。

(2)'与"

C语言中单引号(')与双引号(")有严格的区别,单引号代表一个字符,它实际对应于编译器所采用的字符集中的一个整数值。例如在ASCII码中,'a'与97相对应。而双引号则表示字符串,默认以'\0'结尾。但在Python中,单引号与双引号没有明显区别,仅仅在输入字符串内容不同时,在使用上存在微小差异。

>>> string1 = "He said, \"Hello\""    # 
字符串中本身的双引号需要转义
>>> string1
'He said, "Hello"'
>>> string2 = 'He said,"Hello"'       #
字符串本身的双引号不需要转义
>>> string2
'He said,"Hello"'

(3)三元操作符“?:”

三元操作符是if...else的简写方法,语法形式为C ? X: Y,它表示当条件C为True的时候取值X,C为False的时候取值为Y。其简洁的表达形式一直很受欢迎。但在Python 2.5之前并不支持三元操作符。为此,人们想出了不少替代方式,但在特殊情形下存在一些问题,因此很多人对Python语言本身加入该特征也提出了不少建议,最终PEP308被接受,根据提议采用if...else...形式实现条件表达式。C ? X: Y在Python中等价的形式为X if C else Y,即:

>>> X=0
>>> Y=-2
>>> print X if X<Y else Y
-2

(4)switch...case

Python中没有像C语言那样的switch...case分支语句,不过这不是什么难事,Python中有很多替代的解决方法。假设,用C语言实现的switch...case语句如下:

switch(n) {
  case 0:
  printf("You typed zero.\n");
  break;
  case 1:
  printf("You are in top.\n");
  break;
  case 2:
  printf("n is an even number\n");
  default:
  printf("Only single-digit numbers are allowed\n");
  break;
}

与以上C语言中switch...case对应的Python实现如下:

if n == 0:
  print "You typed zero.\n"
elif n== 1:
  print "You are in top.\n"
elif n == 2:
  print "n is an even number\n"
else:
  print "Only single-digit numbers are allowed\n"

或者使用以下跳转表来实现:

def f(x):
  return {
    0: "You typed zero.\n",
    1: "You are in top.\n",
    2: "n is an even number\n"
    }.get(n,  "Only single-digit numbers are allowed\n") 

以上只是简单列举了几个Python和其他语言的不同点,事实上,其差异性远远不止这些。但总归一句话:不要被其他语言的思维和习惯困扰,掌握Python的哲学和思维方式才是硬道理。正如前面所说,要舍得抛弃具有自我风格的代码,尽量遵循Pythonic代码的编码规范和风格。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文