-
2022-01-12 11:21:56
python自定义函数,在返回值之前,不能print该值,否则会返回null。
更多相关内容 -
C语言 用指针作为函数返回值详解
2020-12-31 22:35:29C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include #include char *strlong(char *str1, char *str2){... -
C/C++ 函数调用与函数返回值
2021-01-19 22:36:57函数参数与函数调用 1、函数调用的作用: ·用实参数向形式参数传递数据; ·为获得数据参数及在函数体中声明的变量分配存储空间; ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调... -
Python函数返回值实例分析
2020-09-21 23:27:03主要介绍了Python函数返回值,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下 -
前端教程:22 函数 返回值
2021-08-30 21:35:49千锋Web前端教程_22_函数_返回值 -
c++_函数返回值,引用&作为函数返回值
2021-12-17 11:22:35catalog函数返回值 函数返回值 返回值是同一个对象, 不会产生新对象 ST Get(){ ST ret; return ret; } 当你调用Get();时, 总共只会产生1个对象即ret 即: 函数返回给外部的对象, 就是这个ret对象本身 即, 你ST t =...函数返回值
返回值是
[const] T &
ST operator*( ST & a, ST & b){ return ST( a.data * b.data); } ST a, b;
当你实际使用时:
ST ret = a * b;
一共会有2次的 构造函数:一次是ret
一次是函数返回值的temp临时对象
我们知道, 这个
temp临时对象
, 肯定是徒劳的, 是否可以优化 把它去掉呢???
错误做法1
ST & operator*( ST & a, ST & b){ return ST( a.data * b.data); }
返回一个: 指向临时对象的(引用/指针), 这自然是错误的; 因为临时对象,马上释放, 引用已经释放的内存 报错
错误做法2
ST & operator*( ST & a, ST & b){ return *( new ST( a.data * b.data)); }
当遇到
a * b * a
时, 此时,a * b
这个对象 用户就没有得到他, 他是匿名对象, 自然也就无法释放了. 造成: 内存泄漏错误做法3
ST & operator*( ST & a, ST & b){ static ST ret( a.data * b.data); return ret; }
当遇到:
if( a * b == c * d)
时, 返回值永远是true.
因为, 所有operator函数的调用, 返回值都是同一个对象ret!!!
ret的值, 为, 最后一次 调用 operator函数的 值.
所以,if( a * b == c * d)
, 其实他的本质是:if( c * d == c * d)
错误
所以, 请永远不要: 试图通过返回
const T &
来 减少临时对象 优化程序返回
ST &
, 只有1个场景:class ST{ Obj data; Obj & get_data(){ return data;} ' 即, 返回的这个对象, 在该函数调用前 (已经)存在了!!! ' };
如果, 就是要优化 减少临时对象, 只有1种做法:
void func_multiply( ST & a, ST & b, ST & ret){ ret.data = a.data * b.data; } ST a, b;
当你调用时:
ST ret;
func_multiply( a, b, ret);
返回值的类型是 T
返回值是T
的意思是: 返回值是T, 不是T *
T &
返回的对象是 局部对象
ST Get(){ ST ret; return ret; }
当你调用
Get();
时, 总共只会产生1个对象即ret
即: 函数返回给外部的对象, 就是这个ret对象本身
即, 你
ST t = Get();
时, 右侧的这个Get()
所代表的对象 就是ret本身
这里好像很难理解, 因为此时的
ST t = Get();
, 右侧的ret对象
已经超出了 他的作用域!!!
你应该这样理解: return语句, 并不是一个函数的结束, 函数的结束 是取决于: 函数的右括号}
ST Get(){ ST ret; return ret; } ST t = Get(), func1(), func2();
首先一点是肯定的: 接收到ret的析构函数, 就意味着: Get函数的结束
执行流程是:
- 进入Get函数, 到return这行语句时,
将ret这个对象 本身
, 返回给ST t
这个对象 注意, 此时Get函数, 并没有结束!!!
即, return就像是: 发送了一个信号, 这个信号 带着ret
对象本身 返回到 原先切入点, 同时, 将ret这个对象 "标记"为: 临时对象 - 然后, 紧接着 ,执行 func1, func2, 直到执行到
;
结束 - 重点: 此时, 会返回到
Get
函数里, 然后遇到}
, 这个ret
才会 delete掉
即, return语句, 就像是Qt里的 [信号与槽], 他会跳到别的地方执行, 执行完后, 还会回来的!!!
Foo Get(){ Foo a; return a; ' 或 return Foo(); 一样的 ' };
当你外界
Foo b = Get();
, 全程只有1个对象a
产生!!! (只有1个析构函数, 1个无参构造函数)首先, 这确实是非常的 不可思议!!! (但是, 逻辑来讲, 这非常的合理!!)
因为, 你的目的, 就是让a 和 b
两个对象 是相同的; 而, 如果 能用1个对象完成, 那肯定比用2个对象完成, 要好的多一定要牢记这个知识点!!!
ST Get(){ ST o; return o;} vector< ST> Get(){ vector< ST> o; return 0;} ' 一定要写成: ' ST ret = Get(); ' &ret == &o ' vector< ST> ret = Get(); ' &ret[0,1,2,..] == &o[0,1,2,..] ' ' 这里的这个=等号, 不会引发任何的 对象构造复制 ' ------- ' 千万不要写成: ' ST ret; ret = Get(); vector< ST> ret; ret = Get(); ' 天壤差别, 造成 (对象复制) '
实现原理
暂时还不知道…
我猜可能是: 你虽然是写成ST a = Get(); vector< ST> b = Get();
但是, 其实他是会变成:ST && a = Get(); vector< ST> && b = Get();
返回的对象是 全局对象
ST g; ST Get(){ return g; }
这种写法, 和
把 ST g, 放到Get函数里
, 是天壤之别的!!!程序一开始,
g的构造
; 然后执行:Get();
的return g
时, 返回的 并不是g!!!
而是会调用一次ST的构造
, 即构造一个新的临时对象, 给返回回去.
反问, 如果说, 返回的就是
g
本身. 那么&Get()
是可以的, 而且Get().set_xxx()
会修改全局变量g
的值.
这个功能, 应该是:ST & Get()
; 而此时是:ST Get()
; 这并不符合ST Get()
函数的 定义.所以, 当
ST Get(){ return obj;}
返回的obj, 是一个全局对象时, 他会构造一个临时对象 给返回
再比如说:
class Bar{ Foo foo; Foo get_foo(){ return foo;} };
当你调用
bar.get_foo();
时, 返回的, 并不是bar.foo
本身, 而是会构造一个(临时对象)拷贝构造
, 返回回去总之:
Foo get(){ return ret;}
不管这个函数, 是全局/member函数
对于这个get(){}
函数作用域来说- 如果这个
ret
, 是这个get作用域里的, 即, ret离开get作用域 就消失, 那么: 返回值的 就是这个ret
本身!!! - 否则, 这个
ret
, 离开get作用域后 依然存在, 那么, 在返回时: 不会返回ret本身, 而是会 构造一个(临时对象) 返回出去!!!
实例
ST Get(){ return ST();} ST Gett(){ return Get();} ST Gettt(){ return Gett();}
调用
Gettt();
时, 只会调用1次 ST的构造 (对应上面ST();)
!!!
因为: 当 返回值是: 局部变量 时, 返回的就是这个对象本身.
- 进入Get函数, 到return这行语句时,
-
如何让C++函数返回值死心塌地为你工作
2020-12-26 11:35:39本文主要研究的是C++函数返回值,你必须注意的问题,下面进入正题。 C++太繁杂了,先接触C++后接触python这样的语言,你就再也不想碰它,因为,就连一个函数返回值都一大堆的说道,这里面的玄机,连工作三年的C++... -
最新单片机仿真 用P0 、P1口显示整型函数返回值
2022-05-21 08:17:57最新单片机仿真 用P0 、P1口显示整型函数返回值最新单片机仿真 用P0 、P1口显示整型函数返回值最新单片机仿真 用P0 、P1口显示整型函数返回值最新单片机仿真 用P0 、P1口显示整型函数返回值最新单片机仿真 用P0 、P1... -
Shell 获取函数返回值(函数返回值)
2021-11-28 19:10:47返回值整形 #!/bin/sh def_one_install(){ if [ -d "/opt/aaa" ];then return 1 else return 0 fi } main() { def_one_install res=$? echo $res if [[ $res==1 ]]; then echo 1 else echo 0 fi } main 返回值字符串...返回值整形
#!/bin/sh def_one_install(){ if [ -d "/opt/aaa" ];then return 1 else return 0 fi } main() { def_one_install res=$? echo $res if [[ $res==1 ]]; then echo 1 else echo 0 fi } main
返回值字符串
#!/bin/sh function get_abc(){ echo `curl http://127.0.0.1:999/abc` } function main(){ RES=$(get_abc) echo $RES } main
-
Shell函数返回值
2021-12-12 22:01:461、返回值的方式: 方法一:return 方法二: echo ...函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常仅返回0或1;0表示成功,1表示失败 (2).使用echo返回值: 使用ec...1、返回值的方式:
方法一:return
方法二: echo
2、return和echo使用场景区别:
(1).使用return返回值:
使用return返回值,只能返回1-255的整数
函数使用return返回值,通常只是用来供其他地方调用获取状态,因此通常仅返回0或1;0表示成功,1表示失败
(2).使用echo返回值:
使用echo可以返回任何字符串结果
通常用于返回数据,比如一个字符串值或者列表值
3、场景示例
(一) return使用场景
函数通过return返回一个整数,这种场景通常是用来做判断的,也就是说在执行完函数之后,需要根据它的返回值做判断,通0表示成功,非0都是表示失败。
#!/bin/bash this_pid=$$ # 判断nginx进程是否正在运行 function is_nginx_running { ps -ef | grep nginx | grep -v grep | grep -v $this_pid &>/tmp/null if [ $? -eq 0 ];then # return 0,也可以省略0直接return,两个是等价 return else return 1 fi } # return在函数中的返回值,只是用来做状态判断的,根据状态值做下一步判断 # 函数的返回值为0时,表示nginx服务运行正常输出 && 后字符串,否则返回 ||后字符串 is_nginx_running && echo "Nginx is running" || echo "Nginx is stoped" # 运行脚本 ~ % sh 29.echo_return_nginx.sh Nginx is stoped ~ % sudo nginx # Mac 使用,Linux为 systemctl start nginx ~ % sh 29.echo_return_nginx.sh Nginx is running
(二) echo使用场景
函数通过echo返回值,通常是返回数据用的,以供程序的其它地方使用。
#!/bin/bash # 获取整个Linux系统上所拥有的所有用户 function get_users { # users=`cat /etc/passwd | cut -d: -f1` # linux使用 # Mac 使用 users=`cat /etc/passwd | tail -n+11 | cut -d: -f1 | cut -d_ -f2` echo $users } # 执行该函数,返回值为用户列表 # get_users # 遍历用户列表对用户名做处理 user_list=`get_users` index=1 for user in $user_list do echo "This $index user is : $user" index=$(($index+1)) done # 运行脚本 ~ % sh 30.echo_sys_user.sh This 1 user is : nobody This 2 user is : root ... ... This 109 user is : oahd
-
JavaScript--函数返回值
2022-04-07 20:57:491、return 不能返回多个数,默认返回最后一个数。可用返回数组代替多数的返回 2、return 之后的代码不再执行 3、函数都有返回值,没有则返回undefined -
宏函数返回值(C/C++)
2021-12-03 16:37:51宏函数的返回值,即宏函数中最后一个表达式的值;宏函数的返回值的类型,是最后一个表达式的类型。 -
shell函数定义、函数调用及函数返回值用法
2020-12-26 21:04:091、函数定义 linux shell 可以用户定义函数,然后在shell脚本中可以随便调用。Shell 函数定义的语法格式如下: [function] funname [()]{ 函数体 [return int;] } 格式1: 简化写法,不写 function ... -
C++函数返回值介绍
2021-07-11 13:21:35C++ 函数返回值介绍(含return 0 与 return 1 与 return -1介绍) 很多人在学习 C++ 的过程中应该会留意到返回值的问题,特别是习惯用:int main() 的猿类同伴们。我们需要在函数结尾写个返回值。 int main(){ ... -
linux shell函数返回值问题
2022-05-08 21:54:10在linux shell脚本中使用函数时,需要注意函数返回后,返回值的使用,不然很容易出问题。具体来说,shell脚本函数通过return返回后,返回值会保存在$?中。需要注意的是,$?会在函数返回后很快变回0值,所以应在函数... -
C++函数返回值
2020-03-12 19:03:15首先,强调一点,和函数传参一样,函数返回时也会做一个拷贝。从某种角度上看,和传参一样,也分为三种: 一般(传统)返回:返回任意类型的数据类型,会有一个拷贝,对于复杂对象效率低下;例如:int test(){}或者... -
296-用P0 、P1口显示整型函数返回值(51单片机C语言实例Proteus仿真和代码)
2022-06-16 17:40:55296-用P0 、P1口显示整型函数返回值(51单片机C语言实例Proteus仿真和代码)296-用P0 、P1口显示整型函数返回值(51单片机C语言实例Proteus仿真和代码)296-用P0 、P1口显示整型函数返回值(51单片机C语言实例Proteus仿真... -
函数返回值的使用
2020-12-18 10:35:042.函数内调用函数,可以吧这个函数直接放到函数的入参里,省去了再定义一个变量的操作,适合用于函数的返回值直接可以当入参使用 3.函数内调用函数,入参是json格式,可以在函数内,将变量复制给一个变量,再将这个... -
shell脚本获取函数返回值
2020-09-28 23:52:26原理:函数内部使用echo输出,调用函数时将输出结果捕获。 缺点:只能输出与返回值相关的内容,且所有使用到的命令(如grep)一定要记得2>&1输出到空设备。 #!/bin/sh function test() { echo 100 } echo $... -
python中如何定义函数返回值
2021-01-14 10:09:46详细内容返回值简介:简单介绍print和return的区别,print仅仅是打印在控制台,而return则是将return后面的部分作为返回值作为函数的输出,可以用变量接走,继续使用该返回值做其它事。函数需要先定义后调用,函数体... -
函数返回值
2019-05-31 04:58:58函数返回值 c++语言中规定函数的返回值类型是由定义该函数时所指定的函数类型决定 (1)return语句可以是一个表达式,函数先计算表达式后再返回值。 (2)函数的返回值通过return语句获得。函数只能有唯一... -
C语言的函数返回值所存放的寄存器
2021-05-20 04:57:43#include int add(int a, int b){...}int asm_compare_one(int a){_asm {mov edx, acmp edx, 1je val1xor eax,eaxjmp val0val1:mov eax, 1val0:}//eax中存放返回值}int main(){int a, b;scanf("%d %d", &a, ... -
11、ts函数,ts函数返回值,ts函数参数
2021-12-03 11:23:4411、ts函数,ts函数返回值,ts函数参数ts好严格: 函数形参的个数,以及类型必须按照当初约定的使用,要不就报错 -
js中的函数返回值
2021-08-29 10:26:20每个函数在被调用后都会有返回值,默认返回值为undefined; 若想返回函数中的变量和函数则需要用return 进行返回 function a(){ var b = 10; console.log(b); 控制台正常打印10 } var c = a(); 此时这里的c 就... -
JS异步函数 返回值
2021-01-17 14:52:201. js 异步的几种情况 :1.1 异步操作由浏览器内核的 webcore 来执行:onclick 由浏览器内核的 DOM Binding 模块来处理,当事件触发的时候,回调函数会立即添加到任务队列中。setTimeout 会由浏览器内核的 timer ... -
matlab学习笔记13_1 函数返回值
2021-05-01 03:02:55一起来学matlab-matlab学习笔记13函数13_1 函数返回值觉得有用的话,欢迎一起讨论相互学习~Follow Me函数返回一个值返回值不必使用return语句,而是直接将需要返回的变量或矩阵写在function后面function 返回值/返回... -
sv 函数返回值
2021-10-22 17:31:532.2 关于task/function返回值 verilog中的task和function不能够使用return语句返回返回值并结束task/function,在systemverilog中增加了这一特性。 值得注意的是,由于在system verilog中task和function本身就可以... -
system函数返回值
2021-07-08 21:48:29相关函数 fork,execve,waitpid,popen 表头文件 #include<stdlib.h> 定义函数 int system(const char * string); 函数说明 system()会调用fork()产生子进程,由子进程来... -
函数返回值的类型由什么决定?
2021-12-19 15:16:12C语言规定,函数返回值的类型由函数首部定义的类型决定。函数返回值应与首部定义的类型一致,如若不一致,则自动将返回值强制转换为函数首部定义的类型。 没有定义类型时默认为int型。也就是说你的函数是什么类型...
-
嵌入式C语言培训-C编程基础-<em>函数返回值</em>嵌入式C语言培训-C编程基础-<em>函数返回值</em>,需要的朋友可以下载一下。
-
C语言29:用P0 、P1口显示整型<em>函数返回值</em>.rarC语言29:用P0 、P1口显示整型<em>函数返回值</em>
-
LJH_决定C++语言中<em>函数</em>的<em>返回值</em>类型<em>函数</em>的<em>返回值</em>类型由定义<em>函数</em>时的指定的数据类型决定的。A项的表达式的值要转换 成<em>函数</em>的定义时的返回类型。
-
<em>函数</em>.rar<em>函数</em>分为系统<em>函数</em>和自定义<em>函数</em> 自定义<em>函数</em>定义特点: function <em>函数</em>名的要求:只能够由字母、下划
-
构造<em>函数</em>与析构<em>函数</em>.rar构造<em>函数</em>与析构<em>函数</em>相关编程基本代码与具体讲解ppt