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,但是内部,它们会共享同一个进程. 下 ...
随机推荐
- 【转】OpenCV中使用神经网络 CvANN_MLP
原文见:http://blog.csdn.net/xiaowei_cqu/article/details/9027617 OpenCV的ml模块实现了人工神经网络(Artificial Neural ...
- php 解析url 和parse_url使用
通过url进行传值,是php中一个传值的重要手段.所以我们要经常对url里面所带的参数进行解析,如果我们知道了url传递参数名称,例如 /index.php?name=tank&sex=1#t ...
- ubuntu 安装python,easy_install和pip
ubuntu12.04默认安装的python为 ms@ubuntums:~$ pythonPython 2.7.3 (default, Aug 1 2012, 05:16:07) 我需要用python ...
- 深入解析MFC -- 句柄与对象的关系
CWnd::FromHandlePermanent ——根据窗口句柄得到CWnd*指针 This function, unlike FromHandle, does not create tempor ...
- UNIX环境高级编程——TCP/IP网络编程
常用网络信息检索函数 gethostname() getppername() getsockname() gethostbyname() gethostbyaddr() getprotobyname( ...
- 富文本编辑器 - wangEditor 插入代码
效果: 项目结构: 注意事项: highlightJS 代码高亮插件,wangEditor 本身就是集成的highlightJS代码高亮插件. 在wangEditor-1.3.12.js里找到var ...
- 06-IOSCore - KVC、CoreData
一. KVC 1. KVC 使用前:黯淡无光 if ([keyPath isEqualToString:@"name"]) { self.labelName.text = self ...
- VMware 11安装Mac OS X 10.10 及安装Mac Vmware Tools(超详细),以及动态调整虚拟机硬盘大小
先上一张效果图兴奋一下,博主穷屌丝一个,只能通过虚拟黑苹果体验下高富帅的生活,感觉超爽的,废话不多说的,直接上图了! 目录: 1.安装所需软件下载: 2.Mac OS X10.10 安装基本步骤: 3 ...
- python中文utf8编码后是占3个字符,unicode汉字为2字节
一个中文utf8编码后是占3个字符,所以求长度的函数可以这样写 def str_len(str): try: row_l=len(str) utf8_l=len(str.encode('utf-8') ...
- J2EE基础篇——十三个规范
背景: 1.企业级应用框架的需求,在很多企业级应用中.比如数据库连接.邮件服务.事务处理等都是一些通用企业需求模块,这些模块假设每次在开发中都由开发者来完毕的话,将会造成开发周期长和代码可靠性差等问题 ...