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,但是内部,它们会共享同一个进程. 下 ...
随机推荐
- django集成微博内容
登录微博 我的工具 OK. 分享sns网站的网址分享道.去上面获取代码就可. 改版后叫微博秀
- Week11(11月18日)
Part I:检查 =========================== 1.上堂课的练习效果. Part II:案例学习 =========================== MusicStor ...
- hadoop安全模式
hadoop安全模式在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束.安全模式主要是为了系统启动的 ...
- [置顶] getline函数-linux
头文件: #include <stdio.h> 函数: ssize_t getline(char **lineptr, size_t *n, FILE *stream); eg: ssiz ...
- 在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编
在 Perl看来, 字符串只有两种形式. 一种是octets, 即8位序列, 也就是我们通常说的字节数组. 另一种utf8编码的字符串, perl管它叫string. 也就是说: Perl只熟悉两种编 ...
- Boost 库Program Options--第二篇
程式執行參數處理函式庫:Boost Program Options(2/N) 前一篇已經大致解釋了 Boost Program Options 基本上的使用方法.而這一篇,則來細講一下選項描述(opt ...
- HDU2571:命运(DP)
Problem Description 穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个 ...
- Revit 2015 API 的全部变化和新功能
这里从SDK的文章中摘录出全部的API变化.主要是希望用户用搜索引擎时能找到相关信息: Major changes and renovations to the Revit API APIchange ...
- DateTime.ParseExact
今天一个项目到我的机器上后,一句代码:DateTime.Parse("02/10/2014")一直报错,invaild datetime string,猜测是系统时间问题,但是将系 ...
- last期末作业
功能:每人完成一个新闻发布系统,包括系统的前台访问和后台管理. 要求: 1.使用ASP.NET MVC4开发. 2.在完成基本功能后,可以利用本学期所学的知识进行扩展. 3.完成日期为2013年12月 ...