C++,Python,Go对照学习-02
main函数
Go中有且只有一个main函数,而且main函数必须在package main当中.main函数无返回值也无参数,如果希望获取从命令行传递的参数有其他包解决这个问题.
C++中main函数可以有参数也可以有返回值.而且声明的时候有返回值,在main函数体中可以不写,编译器会帮你补上.
虽然Python中有类似main的东西,在代码中我们也可以看见if __name__ == '__main__': 这样的代码,但实质上Python就不需要main函数.当一个Python文件被当作可以直接
运行的模块的时候,它的__name__属性将是一个特殊的默认值 __main__,仅此而已.
结构控制
先来说if
Go中的if看起来是这样子的:
if condition { <-{是强制的,并且只能在这一行
...
}
从其表显示形式上看,不需要小括号把条件包起来,而且包含了一对必须的大括号.这样子看起来感觉就是C++和Python的合体.
c++ code:
if(condition){
...
}
Python code:
if condition:
...
Go中的if语句可以设置一个局部变量,这个变量的作用于仅限于if句块中.
if err := chmod(777); err != nil {
... //err的作用于就限定在这里面
}
switch
go中的switch比较灵活可以接受一个表达式,表达式不必局限于整形或者常量.也就是说即便是写出下面的语句也是可以的
a := "aaa"
switch {
case "aaa" == a:
fmt.Println("oooooo")
}
最终结果输出:oooooo
go中的switch除了可以接受表达式之外还有一点和C++中switch有较大不同,那就是当匹配一个case之后就不会继续向下匹配,这看起来就像是C++中switch在匹配了一个case 之后跟着一个break一样.如果希望go中的switch在匹配一个case之后继续向下匹配则需要显示的加上fallthrough关键字.
switch i {
case 0:
case 1:
f()
// 空的 case 体
// 当 i == 0 时,f 不会被调用!
}
而这样:
switch i {
case 0:
case 1:
f()
fallthrough
// 当 i == 0 时,f 会被调用!
}
C++中switch智能接受整形,这也使得如果你想使用字符串,额这是没有办法实现的事.
Python中根本没switch这货
循环
go中循环只有for,不过for又有三种形式
1. for init; condition; post{
...
}
这种形式相当于C++里面的for
2. for condition {
...
}
这种形式相当于c++中的while
3. for {
...
}
这种形式相当于C++中while(true)这样的死循环
Python中的循环有for-in和while两种结构.其中for-in是一种范围迭代的循环,在C++11中亦有基于范围的for了. while的话大家基本都一样.
continue,break
go中的continue,break都可以加上一个标签,实现不同的跳转动作.下面例子中有一个双层循环,外层循环5次,内层循环5次.
func main() {
Test:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
fmt.Println(i, j)
if j == 2 {
continue Test
}
}
}
}
结果输出:
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
3 0
3 1
3 2
4 0
4 1
4 2
修改代码改为
func main() {
Test:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
fmt.Println(i, j)
if j == 2 {
break Test
}
}
}
}
结果输出:
0 0
0 1
0 2
也就是说在go中,continue和break可以使用标签决定其略过某个循环的剩余部分或者跳出某个循环(多层嵌套),这使得在使用上变得更为灵活了.
goto
好吧这部分又不关Python什么事,虽然有人以库的形式实现了Python中的goto,但这不在讨论范围内,有兴趣的可以移步http://entrian.com/goto/
既然break和continue都可以加标签,那么go语言肯定是少不了goto语句的.我知道其实很多人对goto语句有着不理智的偏见.在go中goto语句和C++中的goto语句一致.
我们可以看到go中结构控制相较于C++和Python来说算是比较灵活比较简单的.
C++,Python,Go对照学习-02的更多相关文章
- C++,Python,Go对照学习-01
好吧其实学Go只是为了好玩,只是为了好玩,学习过程中不免会把其他我懂的语言的思维定势和习惯带进来,由此有了这篇对照学习的记录,就当是留下学习的脚印吧. 这里所提及的语言特性在C++指最新的C++11标 ...
- Python学习02 列表 List
Python学习02 列表 List Python列表 List Python中的列表(List)用逗号分隔,方括号包围(comma-separated values (items) between ...
- python网络爬虫学习笔记
python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...
- "利用python进行数据分析"学习记录01
"利用python进行数据分析"学习记录 --day01 08/02 与书相关的资料在 http://github.com/wesm/pydata-book pandas 的2名字 ...
- Python爬虫系统学习(1)
Python爬虫系统化学习(1) 前言:爬虫的学习对生活中很多事情都很有帮助,比如买房的时候爬取房价,爬取影评之类的,学习爬虫也是在提升对Python的掌握,所以我准备用2-3周的晚上时间,提升自己对 ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
- JavaScript学习02 基础语法
JavaScript学习02 基础语法 JavaScript中很多基础内容和Java中大体上基本一样,所以不需要再单独重复讲了,包括: 各种算术运算符.比较运算符.逻辑运算符: if else语句.s ...
- Java虚拟机JVM学习02 类的加载概述
Java虚拟机JVM学习02 类的加载概述 类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对 ...
- Android Testing学习02 HelloTesting 项目建立与执行
Android Testing学习02 HelloTesting 项目建立与执行 Android测试,分为待测试的项目和测试项目,这两个项目会生成两个独立的apk,但是内部,它们会共享同一个进程. 下 ...
随机推荐
- 【转】介绍几个图论和复杂网络的程序库 —— BGL,QuickGraph,igraph和NetworkX
原文来自:http://blog.sciencenet.cn/blog-404069-297233.html 作复杂网络研究离不开对各种实际或模拟网络的统计.计算.绘图等工作.对于一般性的工作,我们可 ...
- 如何用vs查看结构体布局
今天遇到一个问题: 假设在每个系统的structA 结构不同,我们在windbg看了以后直接拿来用,自己定义成结构体,如何来验证这个结构体内存布局是否和windbg一致. 当然笨办法是自己一个个成员数 ...
- LGPL与闭源程序
最近一直在学习 Qt.Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有一些开源版本所没有的库,比如 ...
- C Tips:显示点阵汉字的小样例
非常简陋的一段小程序,演示怎样显示点阵字库.有时间的时候再详解. #include <stdio.h> #include <stdlib.h> struct HzkInfoSt ...
- eclipse上 安装php插件
首先在安装之前需要有eclipse 以及SDK环境已经搭建好 eclipse开发工具下载路径: http://dl.oschina.net/soft/eclipse java sdk下载路径: h ...
- C: 函数的名字是否受大小写影响?
函数的名字大小写是否为同一函数? 不是,大小写不同,函数不同. 环境: gcc 版本 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) Linux ubuntu 3.2.0-2 ...
- BZOJ 2427: [HAOI2010]软件安装( dp )
软件构成了一些树和一些环, 对于环我们要不不选, 要么选整个环. 跑tarjan缩点后, 新建个root, 往每个入度为0的点(强连通分量) 连边, 然后跑树dp( 01背包 ) ---------- ...
- JavaScript 字符串编码函数
JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decod ...
- NOI08冬令营 数据结构的提炼与压缩
无聊随手翻,翻到了一个这样的好东西--据结构的提炼与压缩: 为了防止以后忘记,这里把论文里的题目都纪录一下吧. 1.二维结构的化简 问题一:ural 1568 Train car sorting 定义 ...
- CF 319C(Kalila and Dimna in the Logging Industry-斜率DP,注意叉积LL溢出)
C. Kalila and Dimna in the Logging Industry time limit per test 2 seconds memory limit per test 256 ...