python函数

C调用Python脚本文件里的函数

故事扮演 提交于 2020-03-24 06:44:04
#Python脚本,存为pytest.py def add(a,b): print "in python function add" print "a = " + str(a) print "b = " + str(b) print "ret = " + str(a+b) return a + b // C代码调,用上面的add函数 #include <stdio.h> #include <stdlib.h> #include "C:/Python26/include/python.h" #pragma comment(lib, "C:\\Python26\\libs\\python26.lib") int main(int argc, char** argv) { // 初始化Python //在使用Python系统前,必须使用Py_Initialize对其 //进行初始化。它会载入Python的内建模块并添加系统路 //径到模块搜索路径中。这个函数没有返回值,检查系统 //是否初始化成功需要使用Py_IsInitialized。 PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pRetVal; Py_Initialize(); // 检查初始化是否成功 if ( !Py_IsInitialized() ) { 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

python基础学习day11函数的进阶

五迷三道 提交于 2020-03-23 20:43:40
默认参数的陷阱(只针对于默认参数是可变的数据类型):如果默认参数使用的是可变类型数据,那么无论调用多少次这个默认参数,都是同一个(id相同)。默认参数的可变数据类型既不在全局也不再局部,定义后不会消失(局部命称空间会消失)。 def func(num,nums=[]): nums.append(num) return nums ret1 = func(1) print(ret) >>>[1] ret2 = fun(2) print(ret2) >>>[1,2] #将第一次的数据也包含了。 #例: def func(a,list=[]): list.append(a) return list ret1 = func(10,) print(ret1) #[10] print(func(20,[])) #[20] #重新为列表传入参数 print(func(100)) #[10,100] print(ret1) #[10,100] 局部作用域的陷阱:在函数中,如果定义一个变量,但是在定义变量之前引用这个变量,即使全局变量有此引用的变量,仍然会报错。 #例1: count = 1 def func(): count += 1 print(count) func() IndentationError: unindent does not match any outer indentation

Python学习————无参装饰器

假如想象 提交于 2020-03-23 19:05:14
目录 一:储备知识 1、 *args, **kwargs 2、名称空间与作用域:名称空间的的"嵌套"关系是在函数定义阶段,即检测语法的时候确定的 3、函数对象: 二 、装饰器 1、什么是装饰器 2、为何要用装饰器 3、如何用 三、语法糖:让你开心的语法 总结无参装饰器模板 一:储备知识 1、 *args, **kwargs def index(x,y): print(x,y) def wrapper(*args,**kwargs): index(*args,**kwargs) # index(y=222,x=111) wrapper(y=222,x=111) 2、名称空间与作用域:名称空间的的"嵌套"关系是在函数定义阶段,即检测语法的时候确定的 3、函数对象: 可以把函数当做参数传入 可以把函数当做返回值返回 def index(): return 123 def foo(func): return func foo(index) 4、函数的嵌套定义: def outter(func): def wrapper(): pass return wrapper 5.闭包函数 def outter(): x=111 def wrapper(): x return wrapper f=outter() 传参的方式一:通过参数的形式为函数体传值 def wrapper(x): print(1

Python开发【第六章】:面向对象

扶醉桌前 提交于 2020-03-23 18:53:25
编程范式   编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种不同的方式, 对这些不同的编程方式的特点进行归纳总结得出来的编程方式类别,即为编程范式。 不同的编程范式本质上代表对各种类型的任务采取的不同的解决问题的思路, 大多数语言只支持一种编程范式,当然也有些语言可以同时支持多种编程范式。 两种最重要的编程范式分别是面向过程编程和面向对象编程 面向过程编程   面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,即:将之前实现的代码块复制到现需功能处。 程序从上到下一步步执行,一步步从上到下,从头到尾的解决问题 。基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。 这样做的问题也是显而易见的,就是如果你要对程序进行修改,对你修改的那部分有依赖的各个部分你都也要跟着修改, 随着程序越来越大, 这种编程方式的维护难度会越来越高。 所以我们一般认为, 如果你只是写一些简单的脚本,去做一些一次性任务,用面向过程的方式是极好的,但如果你要处理的任务是复杂的,且需要不断迭代和维护的

Python递归

谁说我不能喝 提交于 2020-03-23 18:47:12
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 def age(n): if n == 1: return 10 # 结束条件 else: return age(n-1) + 2 # 调用函数本身 print(age(5)) 结果: 18 递归的原理 print(data) if len(data)> 1: # 判断当列表的长度大于1的时候,进行二分法递归运算 mid_index=int(len(data)/2) # 取中间的得索引位置 mid_value=data[mid_index] # 中间位置的值 if num < mid_value: # 当输入的值比中间的值小的情况 data = data[:mid_index] # 切片操作,把左侧到索引值的列表重新复制给data search(num,data) # 调用函数本身 elif num > mid_value: #  data = data[mid_index:] search(num,data) else: print("you get it") return # 这是结束条件 else: # 这是当列表的长度是1的时候 if num == data[0]: #现在只有一个元素 print("you get it") else: print("no exits") search

使用scikit-learn进行文本分类

拈花ヽ惹草 提交于 2020-03-23 18:45:59
3 月,跳不动了?>>> scikit-learn简介 scikit-learn 是Python最为流行的一个机器学习库。它具有如下吸引人的特点: 简单、高效且异常丰富的数据挖掘/数据分析算法实现; 基于NumPy,SciPy,以及matplotlib,从数据探索性分析,数据可视化到算法实现,整个过程一体化实现; 开源,有非常丰富的学习文档。 尤其是当我们要进行多种算法的效果对比评价,这种一体化实现的优势就更加能够凸显出来了。 既然 scikit-learn 模块如此重要,废话不多说,下面马上开搞! 项目组织及文件加载 项目组织 工作路径:`D:\my_python_workfile\Thesis\sklearn_exercise` |--data:用于存放数据 |--20news-bydate:练习用数据集 |--20news-bydate-train:训练集 |--20news-bydate-test:测试集 文件加载 假设我们需要加载的数据,组织结构如下: container_folder/ category_1_folder/ file_1.txt file_2.txt ... file_42.txt category_2_folder/ file_43.txt file_44.txt ... 可以使用以下函数进行数据的加载: sklearn.datasets.load

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): ""

Python 常见的17个错误分析

旧城冷巷雨未停 提交于 2020-03-23 18:25:58
对于刚入门的Pythoner在学习过程中运行代码是或多或少会遇到一些错误,刚开始可能看起来比较费劲。随着代码量的积累,熟能生巧当遇到一些运行时错误时能够很快的定位问题原题。下面整理了常见的17个错误,希望能够帮助到大家 ​ 1、 忘记在if,for,def,elif,else,class等声明末尾加 : 会导致“SyntaxError :invalid syntax”如下: if spam == 42 print('Hello!') 2、 使用= 而不是 == 也会导致“SyntaxError: invalid syntax” = 是赋值操作符而 == 是等于比较操作。该错误发生在如下代码中: if spam = 42: print('Hello!') 3、 错误的使用缩进量 导致“IndentationError:unexpected indent”、“IndentationError:unindent does not match any outer indetation level”以及“IndentationError:expected an indented block” 记住缩进增加只用在以:结束的语句之后,而之后必须恢复到之前的缩进格式。该错误发生在如下代码中: print('Hello!') print('Howdy!') 或者: if spam == 42:

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

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