函数调用

内联函数

ε祈祈猫儿з 提交于 2020-03-24 06:41:53
引入内联函数的目的是为了解决程序中函数调用的效率问题。 函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复现场,并按原来保存地址继续执行。因此,函数调用要有一定的时间和空间方面的开销,于是将影响其效率。特别是对于一些函数体代码不是很大,但又频繁地被调用的函数来讲,解决其效率问题更为重要。引入内联函数实际上就是为了解决这一问题。 在程序编译时,编译器将程序中出现的内联函数的调用表达式用内联函数的函数体来进行替换。显然,这种做法不会产生转去转回的问题,但是由于在编译时将函数休中的代码被替代到程序中,因此会增加目标程序代码量,进而增加空间开销,而在时间代销上不象函数调用时那么大,可见它是以目标代码的增加为代价来换取时间的节省。 内联函数的定义方法 定义内联函数的方法很简单,只要在函数定义的头前加上关键字inline即可。内联函数的定义方法与一般函数一样。如: inline int add_int (int x, int y, int z) { return

c++与python混合编程

无人久伴 提交于 2020-03-24 06:26:37
本文分4个部分 C/C++ 调用 Python (基础篇)— 仅讨论Python官方提供的实现方式 Python 调用 C/C++ (基础篇)— 仅讨论Python官方提供的实现方式 C/C++ 调用 Python (高级篇)— 使用 Cython Python 调用 C/C++ (高级篇)— 使用 SWIG 1 C/C++ 调用 Python(基础篇) Python 本身就是一个C库。你所看到的可执行体python只不过是个stub。真正的python实体在动态链接库里实现,在Windows平台上,这个文件位于 %SystemRoot%\System32\python27.dll。 调用示例: //my_python.c #include <Python.h> int main(int argc, char *argv[]) { Py_SetProgramName(argv[0]); Py_Initialize(); PyRun_SimpleString("print 'Hello Python!'\n");//此接口可执行字符串形式的代码 Py_Finalize(); return 0; } 在Windows平台下,利用vs命令提示符,编译命令为 cl my_python.c -IC:Python27\include C:\Python27\libs\python27.lib

C++中的各种可调用对象

帅比萌擦擦* 提交于 2020-03-24 01:12:59
转载自 : http://uusama.com/735.html 概述 一组执行任务的语句都可以视为一个函数,一个可调用对象。在程序设计的过程中,我们习惯于把那些具有复用性的一组语句抽象为函数,把变化的部分抽象为函数的参数。 函数的使用能够极大的极少代码重复率,提高代码的灵活性。 C++中具有函数这种行为的方式有很多。就函数调用方式而言 func(param1, param2); 这儿使用 func 作为函数调用名, param1 和 param2 为函数参数。在C++中就 func 的类型,可能为: 普通函数 类成员函数 类静态函数 仿函数 函数指针 lambda表达式 C++11加入标准 std::function C++11加入标准 下面就这几种函数展开介绍 简单函数形式 普通函数 这种函数定义比较简单,一般声明在一个文件开头。如下: #include <iostream> // 普通函数声明和定义 int func_add(int a, int b) { return a + b; } int main() { int a = 10; int b = 20; int sum = func_add(a, b); std::cout << a << "+" << b << "is : " << sum << std::endl; getchar(); return 0; }

执行命令行

与世无争的帅哥 提交于 2020-03-23 21:50:13
1、Linux下使用popen()执行shell命令( http://www.cnblogs.com/caosiyang/archive/2012/06/25/2560976.html ) 简单说一下popen()函数 函数定义 #include <stdio.h> FILE * popen(const char *command , const char *type ); int pclose(FILE *stream); 函数说明   popen()函数通过创建一个管道,调用fork()产生一个子进程,执行一个shell以运行命令来开启一个进程。这个管道必须由pclose()函数关闭,而不是fclose()函数。pclose()函数关闭标准I/O流,等待命令执行结束,然后返回shell的终止状态。如果shell不能被执行,则pclose()返回的终止状态与shell已执行exit一样。   type参数只能是读或者写中的一种,得到的返回值(标准I/O流)也具有和type相应的只读或只写类型。如果type是"r"则文件指针连接到command的标准输出;如果type是"w"则文件指针连接到command的标准输入。   command参数是一个指向以NULL结束的shell命令字符串的指针。这行命令将被传到bin/sh并使用-c标志,shell将执行这个命令。   popen(

Python函数

半城伤御伤魂 提交于 2020-03-23 18:28:41
一、相关 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。 函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。 Python函数可以在类外定义。 Python函数类似Java中的方法。 二、定义一个Python函数 Python中以def开始定义函数,无需注明函数的返回值类型。 函数名后跟(),其中放入函数所需要的参数,同样的参数不需要注明类型。 函数体以冒号开始,并且首行按规定缩进。 函数第一行可以选择性地使用文档字符串来进行函数说明。 可以选择性地以return结束函数,不包含return的函数,返回值为None。 1.函数定义通式 def 函数名(参数列表): "函数说明" 函数体 2.定义一个hello函数 def hello(): """一个hello函数""" print("Hello World!!!") hello() C:\Python\Python37-32\python.exe E:/Workspaces/PycharmProjects/untitled/openTest.py Hello World!!! Process finished with exit code 0 3.定义一个带参函数 def hello(str): ""

【2020Python修炼记19】Python语法入门—函数装饰器

梦想与她 提交于 2020-03-23 18:08:58
【目录】 一、装饰器的介绍 1、什么是装饰器 2、为何要用装饰器 二、装饰器的实现 1、无参装饰器的实现 2、有参装饰器的实现 *储备知识:(请点击下方标题阅读哦~) 1、 名称空间和作用域 2、 函数对象+函数的嵌套+闭包函数 一、装饰器的介绍 1、为何要用装饰器 开放封闭原则—— 软件的设计应该遵循 开放封闭原则,即对扩展是开放的,而对修改是封闭的。 对 扩展开放, 意味着有新的需求或变化时,可以对现有代码进行扩展,以适应新的情况。 对 修改封闭 ,意味着对象一旦设计完成,就可以独立完成其工作,而不要对其进行修改。 软件包含的所有功能的源代码以及调用方式,都应该避免修改,否则一旦改错,则极有可能产生连锁反应,最终导致程序崩溃, 而对于上线后的软件,新需求或者变化又层出不穷,我们必须为程序提供扩展的可能性,这就用到了 装饰器 。 2、什么是装饰器 ’装饰’ 代指 为被装饰对象添加新的功能 , ’器’ 代指 器具/工具 , 装饰器 与 被装饰的对象 均可以是 任意可调用对象 。 即 装饰器的作用 就是 在 不修改 被装饰对象源代码和调用方式 的前提下 为被装饰对象添加额外的功能。 装饰器经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等应用场景,装饰器是解决这类问题的绝佳设计, 有了装饰器,就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。 提示

Python装饰器学习(九步入门)

廉价感情. 提交于 2020-03-23 17:23:27
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖、多练习是好的学习方式。 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次''' def myfunc(): print ( "myfunc() called." ) myfunc() myfunc() 第二步:使用装饰函数在函数执行前和执行后分别附加额外功能 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # -*- coding:gbk -*- '''示例2: 替换函数(装饰) 装饰函数的参数是被装饰的函数对象,返回原函数对象 装饰的实质语句: myfunc = deco(myfunc)''' def deco(func): print ( "before myfunc() called." ) func() print ( " after myfunc() called." ) return func def myfunc(): print ( " myfunc() called." ) myfunc = deco(myfunc) myfunc() myfunc() 第三步:使用语法糖@来装饰函数 1 2 3 4 5 6 7 8 9 10 11

线程池

江枫思渺然 提交于 2020-03-23 15:35:08
线程池 [TOC] 线程池概述 什么是线程池 为什么使用线程池 线程池的优势 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。但是要做到合理的利用线程池,必须对其原理了如指掌。 创建一个线程池并提交线程任务 线程池源码解析 参数认识 corePoolSize : 线程池的基本大小,当提交一个任务到线程池时,线程池会创建一个线程来执行任务,即使其他空闲的基本线程能够执行新任务也会创建线程,等到需要执行的任务数大于线程池基本大小时就不再创建。如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。 runnableTaskQueue:任务对列,用于保存等待执行的任务的阻塞队列。可以选择以下几个阻塞队列。 ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按 FIFO(先进先出)原则对元素进行排序。 LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO (先进先出) 排序元素,吞吐量通常要高于ArrayBlockingQueue

C++项目中的extern \"C\" {}

浪尽此生 提交于 2020-03-23 13:12:09
引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif 它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它: 1、#ifdef _cplusplus/#endif _cplusplus及发散 2、extern "C" 2.1、extern关键字 2.2、"C" 2.3、小结extern "C" 3、C和C++互相调用 3.1、C++的编译和连接 3.2、C的编译和连接 3.3、C++中调用C的代码 3.4、C中调用C++的代码 4、C和C++混合调用特别之处函数指针 1、#ifdef _cplusplus/#endif _cplusplus及发散 在介绍extern "C"之前,我们来看下#ifdef _cplusplus/#endif _cplusplus的作用。很明显#ifdef/#endif、#ifndef/#endif用于条件编译,#ifdef _cplusplus/#endif _cplusplus——表示如果定义了宏_cplusplus,就执行#ifdef/#endif之间的语句,否则就不执行。 在这里为什么需要#ifdef _cplusplus/#endif

Python自学笔记(13day)

人走茶凉 提交于 2020-03-23 12:05:39
(1)函数的嵌套   (1)首先明白三点:调用函数意思就是:调用函数所得到的结果是什么。 函数没有被调用,则函数里面代码永远不会被执行。 调用函数只有拿到返回值才有结果 def func(): def su(): print("shuai") func() #输出:啥都没有因为su()没有被调用 def func(): def su(): print("shuai") su() func() #输出:shaui none 因位执行到su()打印出shuai就结束了,函数func()没有拿到返回值。 def func(): def su(): print("shuai") return shuai su() func() #输出:shuai shuai 因位执行到su()打印出shuai就结束了,函数func()也拿到返回值。 (2)函数的多层嵌套 def inner (): a=1 def inner1(): b=2 print(a) print("inner") def inner2(): print(a) inner2() inner() 总结:(1)全局变量不能用局部变量,局部变量看可以用全局变量,但是不可对全局变量中的不可变数据类型进行修改(即对其加减乘除),如果想要修改用gloabl(),它声明的是去全局变量。     (2)同理,内部函数可以用外函数中的变量