zoukankan      html  css  js  c++  java
  • 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来说算是比较灵活比较简单的.

  • 相关阅读:
    SCCM2012 R2实战系列之七:软件分发(exe)
    man 手册--nc
    挂载虚拟机磁盘文件
    bond模式详解
    Windows下计算md5值
    man手册--iostat
    mount---挂载文件系统
    Linux-swap分区
    sync---强制将被改变的内容立刻写入磁盘
    vmstat---有关进程、虚存、页面交换空间及 CPU信息
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3243995.html
Copyright © 2011-2022 走看看