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 语言使用中遇到的问题汇总的更多相关文章

  1. Python语言-selenium webdriver操作记录汇总

    1.控制浏览器大小 set_window_size() 设置浏览器大小 该方法有两个参数,第一个参数是宽,第二个是高 maximize_window() 设置浏览器全屏显示,无参数 chrome谷歌浏 ...

  2. python语言基础汇总

    注释 代码中添加注释是一个良好的编程习惯,python语言的注释才用井号'#'作为注释开头的,可以是任意内容,解释器会忽略掉这部分内容.其他每一行都是语句,当语句以冒号':'结尾时,缩进的语句视为代码 ...

  3. 转:Python语言编程学习资料(电子书+视频教程)下载汇总

    开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...

  4. [Python学习笔记1]Python语言基础 数学运算符 字符串 列表

    这个系列是我在学习Python语言的过程中记录的笔记,主要是一些知识点汇总,而非学习教程,可供有一定编程基础者参考.文中偏见和不足难以避免,仅供参考,欢迎批评指正. 本系列笔记主要参考文献是官网文档: ...

  5. 《Selenium2自动化测试实战--基于Python语言》 --即将面市

    发展历程: <selenium_webdriver(python)第一版>   将本博客中的这个系列整理为pdf文档,免费. <selenium_webdriver(python)第 ...

  6. 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(代码篇)

    好,现在进入高阶代码篇. 目的: 爬取昆明市中学的兴趣点POI. 关键词:中学 已有ak:9s5GSYZsWbMaFU8Ps2V2VWvDlDlqGaaO 昆明市坐标范围: 左下角:24.390894 ...

  7. python(一):python语言基础

    一.python语言基本的8个要素 Python语言的8个要素:数据类型.对象引用.组合数据类型.逻辑操作符.运算操作符.控制流语句.输入/输出.函数的创建与引用.除此之外还有一个非常重要且无处不在的 ...

  8. 关于《selenium2自动测试实战--基于Python语言》

    关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...

  9. 【Python基础学习一】在OSX系统下搭建Python语言集成开发环境 附激活码

    Python是一门简单易学,功能强大的编程语言.它具有高效的高级数据结构和简单而有效的面向对象编程方法.Python优雅的语法和动态类型以及其解释性的性质,使它在许多领域和大多数平台成为编写脚本和快速 ...

随机推荐

  1. Swagger Authorization:bearer <token>

    1.添加如下代码 /** * * @SWG\SecurityScheme( * securityDefinition="Bearer", * type="apiKey&q ...

  2. 【week3】词频统计 单元测试

    使用Eclipse 集成的Junit进行单元测试.单元测试的核心包括断言.注解. 测试代码如下: @BeforeClass // 针对所有测试,只执行一次,且必须为static void public ...

  3. 织梦dede:list标签在列表页同一文章显示两次的解决方法

    在列表页用{dede:list}标签调用文章的时候出现了同一篇文章显示两次的问题,经过一天的奋战最后终于解决了,下面CMS集中营站长简单说下我的解决过程来供各位学友参考:1.怀疑是不是每次添加都会自动 ...

  4. AutoResetEvent的基本用法

    The following example uses an AutoResetEvent to synchronize the activities of two threads.The first ...

  5. 获取当前路径下的所有文件路径 :listFiles

    获取当前路径下的所有文件路口 :listFiles

  6. openstack之neutron

    Neutron neutron主要就是用于网络虚拟化,之前将nova的时候说过,网络部分没有写,因为openstack中的网络属于一个大部分,所以今天咱们就来看看neutron到底是怎么样实现网络虚拟 ...

  7. BZOJ3165 & 洛谷4097:[HEOI2013]Segment——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3165 https://www.luogu.org/problemnew/show/P4097 要求 ...

  8. 第13届 广东工业大学ACM程序设计大赛 C题 平分游戏

    第13届 广东工业大学ACM程序设计大赛 C题 平分游戏 题目描述 转眼间又过了一年,又有一届的师兄师姐要毕业了. ​ 有些师兄师姐就去了景驰科技实习. 在景驰,员工是他们最宝贵的财富.只有把每一个人 ...

  9. [Leetcode] search for a range 寻找范围

    Given a sorted array of integers, find the starting and ending position of a given target value. You ...

  10. BZOJ3832 [Poi2014]Rally 【拓扑序 + 堆】

    题目链接 BZOJ3832 题解 神思路orz,根本不会做 设\(f[i]\)为到\(i\)的最长路,\(g[i]\)为\(i\)出发的最长路,二者可以拓扑序后\(dp\)求得 那么一条边\((u,v ...