Python 语言使用中遇到的问题汇总
1.python中的传值和传引用
和其他语言不一样,传递参数的时候,python不允许程序员选择采用传值还是传引用。Python参数传递采用的肯定是“传对象引用”的方式。实际上,这种方式相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象。如果函数收到的是一个不可变对象(比如数字、字符或者元组)的引用,就不能直接修改原始对象--相当于通过“传值'来传递对象。
python一般内部赋值变量的话,都是传个引用变量,和C语言的传地址的概念差不多。可以用 id() 来查询内存地址
如果a=b的话, a和b的地址是相同的;如果只是想拷贝,那么就得用 a=b[:]。
!!!注意这一点,这可是可以引起重大错误的!!!
2.python中简单的回调函数示例(与C中回调函数类似):
def my_callback(input):
print ("function my_callback was called with %s input" % (input,)) def caller(input, func):
func(input) for i in range(5):
caller(i, my_callback) 输出:
function my_callback was called with 0 input
function my_callback was called with 1 input
function my_callback was called with 2 input
function my_callback was called with 3 input
function my_callback was called with 4 input
3.使用ctypes库时,在python中定义的函数在动态库中被回调
def dfault_rec(acp,arg):
print("begin--dfault_rec") def get_cases_from_fmd(adm,uurecp,opt_i):
print("begin--get_cases_from_fmd") libs = load_lib("/usr/lib/fm/libfmd_adm.so")
if libs == 0:
print("Error in load_lib")
return [] _fmd_adm_case_iter = libs.fmd_adm_case_iter
CMPFUNC = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.POINTER(fmd_adm_caseinfo_t), ctypes.c_void_p)
py_dfault_rec = CMPFUNC(dfault_rec) rt = _fmd_adm_case_iter(adm, None, py_dfault_rec, uurecp)
if rt != 0 :
print("failed to get case list from fmd") print("end--get_cases_from_fmd")
说明:_fmd_adm_case_iter为动态库函数调用,该函数中回调了python中定义的dfault_rec函数,主要重点为黄色背景代码
4.python语言中没有指针的概念,如第1条所述,但是我们想要像C一样能够传址而改变值该如何实现?
python与C有一个很大的不同点就是可以有多个返回值,简单的示例如下:
def secondvalue(a,b):
c = a + b
return (a,b,c) x,y,z = secondvalue(1,2)
print ('x:',x,'y:',y,'z:',z) 输出: x: 1 y: 2 z: 3
在项目中,我利用返回值再赋值给原来的变量即可改传入的参数值
C语言中:
extract_record_info(nva[i], &class, &fru, &serial, &resource, &asru, &dummy_fru, ba[i])
... ... python中:
class_t, fru, serial, resource, asru, dummy_fru = extract_record_info(nva[i], class_t, fru, serial, resource, asru, dummy_fru.value, ba[i]) def extract_record_info(nvl, class_p, fru_p, serial_p, resource_p, asru_p, dummy_fru, status):
return (class_p, fru_p, serial_p, resource_p, asru_p, dummy_fru)
上述代码中,在C中,传入的是&class, &fru, &serial, &resource, &asru, &dummy_fru,这些值被改变
在python中,传入的是class_t, fru, serial, resource, asru, dummy_fru.value,但又将他们作为返回值赋给变量,这些值也被改变
Python 语言使用中遇到的问题汇总的更多相关文章
- Python语言-selenium webdriver操作记录汇总
1.控制浏览器大小 set_window_size() 设置浏览器大小 该方法有两个参数,第一个参数是宽,第二个是高 maximize_window() 设置浏览器全屏显示,无参数 chrome谷歌浏 ...
- python语言基础汇总
注释 代码中添加注释是一个良好的编程习惯,python语言的注释才用井号'#'作为注释开头的,可以是任意内容,解释器会忽略掉这部分内容.其他每一行都是语句,当语句以冒号':'结尾时,缩进的语句视为代码 ...
- 转:Python语言编程学习资料(电子书+视频教程)下载汇总
开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...
- [Python学习笔记1]Python语言基础 数学运算符 字符串 列表
这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...
- 《Selenium2自动化测试实战--基于Python语言》 --即将面市
发展历程: <selenium_webdriver(python)第一版> 将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...
- 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)
好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...
- python(一):python语言基础
一.python语言基本的8个要素 Python语言的8个要素:数据类型.对象引用.组合数据类型.逻辑操作符.运算操作符.控制流语句.输入/输出.函数的创建与引用.除此之外还有一个非常重要且无处不在的 ...
- 关于《selenium2自动测试实战--基于Python语言》
关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...
- 【Python基础学习一】在OSX系统下搭建Python语言集成开发环境 附激活码
Python是一门简单易学,功能强大的编程语言.它具有高效的高级数据结构和简单而有效的面向对象编程方法.Python优雅的语法和动态类型以及其解释性的性质,使它在许多领域和大多数平台成为编写脚本和快速 ...
随机推荐
- win7 php连接远程oracle
<?php /* 先下载oracle客户端 下载地址 http://www.oracle.com/technetwork/topics/winx64soft-089540.html 下载如下三个 ...
- 一个比较典型的WMI查询
Get-WmiObject win32_bios -ComputerName server1, server2 | Format-Table ` @{n='Hostname';e={$_.__serv ...
- 关于c++中public & private方法调用问题
class IDNoIdentifier { public: IDNoIdentifier(); ~IDNoIdentifier(); typedef vector<cv::Rect> C ...
- DELPHI的MEMO组件
位于Standard选项卡上,它是对EDIT控件的扩展,可以对多行文本进行显示.输入 和编辑. Lines属性: 该属性实际上为TStrings类型的对象,用来存放Memo对象的文本 TStrings ...
- Linux相关——画图软件安装
其实也不知道算不算Linux相关了... 装个画图软件还是很方便的,刚刚试了一下kolourpaint,感觉还行,就记录下来吧. 先记录几个快捷键emmmm print ---->全屏截图 al ...
- POJ3281:Dining——题解
http://poj.org/problem?id=3281 题目大意: N牛,F种吃的D种喝的,牛可以在它喜欢的吃的喝的选一组,之后就不能选这个吃的喝的. 问最多满足多少人. ——————————— ...
- BZOJ1010:[HNOI2008]玩具装箱——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1010 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行 ...
- 洛谷 [SCOI2010]股票交易 | 单调性DP
题目链接 #include<cstdio> #include<algorithm> #include<cstring> #define N 2005 using n ...
- AOJ.850 电缆公司的烦恼 (二分+枚举)
AOJ.850 电缆公司的烦恼 (二分+枚举) 题意分析 从[1,average]二分枚举长度即可,由于保留2位小数,可以将数据扩大10^2倍后后枚举,输出时除100即可. 代码总览 #include ...
- windows内存映射文件
http://shushanyegui.duapp.com/?p=731 在描述内存映射文件之前 我们先来写一个系统通过I/O来读写磁盘文件的小程序 #include "stdafx.h&q ...