函数:Python vs C++

在 Python 和 C++ 中,函数的作用相同;函数把语句组合在一起,执行某种任务。函数可以帮助你避免重复地复制和粘贴相同的代码。

函数编写的语法有些不同,主要有三个原因:

  1. Python 通过查看回车符和换行符来检测代码行的结束。C++ 使用分号实现这一功能。
  2. Python 使用缩进将代码语句组合在一起,但 C++ 使用大括号。
  3. Python 是动态类型的,而 C++ 是静态类型的。和声明变量的方法一样,你同样需要声明你的函数。
 

我们从一个简单的函数开始,并且并排比较 Python 和 C++ 代码。

这个函数代入速度和时间。两者相乘计算出距离。除了语法上的差异,还要特别注意:

  • 函数声明
  • 变量声明
  • main() 内部是什么代码,外部是什么代码。
 
 

剖析代码

C++ 代码看起来比 Python 代码长得多,因为 C++ 有一些额外的部分。我们逐句解析这段代码。

代码开始是

# include <iostream>

这里是导入 C++ 标准库的 iostream 部分。需要这行代码才能使用 cout

导入必要的库之后,你可以看到一个函数声明。

float distance(float velocity, float time_elapsed);

这行代码通知你的 C++ 程序,有一个名为 distance 的函数。这个函数接收两个单精度浮点数并返回一个单精度浮点数。第一个单精度浮点数是 velocity,第二个是 time_elapsed。

然后是main函数。所有 C++ 程序都需要 main() 函数,这个函数返回 0。main() 调用 distance 函数并把结果输出到终端。

int main() {

    std::cout << distance(5, 4) << std::endl;
std::cout << distance(12.1, 7.9) << std::endl; return 0;
}

最后是函数定义

float distance(float velocity, float time_elapsed) {
return velocity * time_elapsed;
}
 

你之前已经看到过 main() 函数,因此这不是你第一次看到函数如何在 C++ 中发挥作用。注意,main 函数和 distance 函数的语法非常相似。唯一的区别在于,main 函数不接受任何参数,并返回值为 0 的整数;而 distance 函数接受两个单精度浮点数并返回一个单精度浮点数。

此外,main 函数不需要单独声明。

函数剖析

你已经看过如何用 C++ 编写函数。一般而言,C++ 函数由函数声明和函数定义组成。

因为 C++ 是静态类型的,所以你需要指定函数输入变量的数据类型和函数返回的数据类型。

//function declaration
returndatatype functionname(datatype variable_a, datatype variable_b, etc.);
//function definition
returndatatype functionname(datatype variable_a, datatype variable_b, etc.) {
statement_1;
statement_2;
.... etc return returndatatype
}

小测试:编写函数

写一个名为 distance 的函数,该函数有 3 个输入和 1 个输出。输入为速度、加速度和时间。输出为随时间推移经过的距离。距离的计算公式为: distance = velocity \times elapsedtime + 0.5 \times acceleration \times elapsedtime \times elapsedtimedistance=velocity×elapsedtime+0.5×acceleration×elapsedtime×elapsedtime

//TODO: include the iostream part of the standard library
#include <iostream> //TODO: declare your function called distance
float distance(float velocity, float acceleration, float time_elapsed); // Leave the main function as is
int main() { // TODO: The following are examples you can use to test your code.
// You will need to uncomment them to get them working. std::cout << distance(, , ) << std::endl;
std::cout << distance(7.0, 2.1, 5.4) << std::endl; return ;
} //TODO: define your function
float distance(float velocity, float acceleration, float time_elapsed) {
return velocity*time_elapsed + 0.5*acceleration*time_elapsed*time_elapsed;
}

多输出函数

在Python中,你可以编写多输出函数。比如下面这个例子:

## Python Code
def distance(velocity, time_elapsed):
return velocity * time_elapsed, velocity / 2

它将会输出 elocity time_elapsed以及 velocity/2 (速度 时间和速度 / 2)。

在C++中,函数只可以有一个输出。当然我们也有一些变通方案,但这些方案不在本模块的讨论范围之内。

 

C++ 小贴士:函数声明

你并不需要将函数声明放在代码开头来获取有效的解决方案。正像你可以同时声明和定义一个变量那样,int x = 5;,你也可以同时声明和定义一个函数。

下面这段代码同样可以运行:

float distance(float velocity, float time_elapsed) {
return velocity * time_elapsed;
} int main() { std::cout << distance(, ) << std::endl;
std::cout << distance(12.1, 7.9) << std::endl; return ;
}

不过请注意,你需要在 main() 函数之前定义你的函数,而不是在它之后,否则你的代码将会尝试调用 distance() 函数,却没有它的定义。

uda 1.C++ 函数的更多相关文章

  1. 转载——CLR标量函数、表值函数和聚合函数(UDA)

    本节主要介绍使用CLR创建标量函数,表值函数和聚合函数. 所谓标量函数指的就是此函数只返回一个值.表值函数返回值是一个表.聚合函数是在select语句中使用的,用来聚合一个结果集,类似于Sum()或是 ...

  2. Sqlserver自定义函数Function

    一.FUNCTION: 在sqlserver2008中有3中自定义函数:标量函数/内联表值函数/多语句表值函数,首先总结下他们语法的异同点: 同点:1.创建定义是一样的:                ...

  3. 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR

    Sqlserver 自定义函数 Function使用介绍 前言:         在SQL server中不仅可以可以使用系统自带的函数(时间函数.聚合函数.字符串函数等等),还可以根据需要自定义函数 ...

  4. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  5. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  6. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  7. C++对C的函数拓展

    一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...

  8. 菜鸟Python学习笔记第一天:关于一些函数库的使用

    2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...

  9. javascript中的this与函数讲解

    前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...

随机推荐

  1. 微信小程序 原生框架 (分享方法封装)

    封装的分享方法 function share(o,isDebug = false ) { //路径 let url = o.url || getCurrentPages()[getCurrentPag ...

  2. jeecms 强大的采集功能优化 转载 https://blog.csdn.net/jeff06143132/article/details/7099003

    ========================================================= 没办法附件上传不了,AcquisitionSvcImpl.java类: //---- ...

  3. idea使用docker插件

    idea使用docker插件 接着上一篇docker开启远程访问后,我们就可以通过idea使用docker插件把项目部署到docker了. 首先我们先在idea安装docker插件: 在setting ...

  4. 解决WSL上运行plantUML中文乱码问题

    生成UML图命令: java -jar plantuml.jar -charset UTF-8 my.txt 1. 保证my.txt 使用uft-8编码 2. wsl中安装中文字体: 如: sudo ...

  5. Mysql的CMD操作

    一.MySQL登录和退出——在CMD模式操作 l  语法格式:mysql.exe –h主机名 –u用户名 –p密码 l  参数说明:   mysql.exe是mysql服务器的主应用程序.   -h代 ...

  6. 手把手教你如何玩转消息中间件(ActiveMQ) https://blog.csdn.net/cs_hnu_scw/article/details/81040834

    #情景引入小白:起床起床起床起床....快起床~我:怎么了又,大惊小怪,吓到我了.小白:我有事有事想找你,十万火急呢~~我:你能有什么事?反正我不信..那你说说看~~小白:就是我有两个小表弟,叫大白和 ...

  7. IO流-文件操作

    一.字节流读/写 文件 1.字节流 方式读取文件

  8. Dubbo+JStorm

    Dubbo,是阿里巴巴服务化治理的核心框架,并被广泛应用于阿里巴巴集团的各成员站点.阿里巴巴近几年对开源社区的贡献不论在国内还是国外都是引人注目的,比如:JStorm捐赠给Apache并加入Apach ...

  9. PHP实现选择排序的方法

    选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理如下.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然 ...

  10. python装饰器2

    装饰模式有很多经典的使用场景,例如插入日志.性能测试.事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的.下面就一步步看看Python中的装饰器. 一个简单 ...