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优雅的语法和动态类型以及其解释性的性质,使它在许多领域和大多数平台成为编写脚本和快速 ...
随机推荐
- 父类与子类的转换as,is
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Redis的概述和简单使用(转载)
文章来源:http://jingyan.baidu.com/article/db55b60996d0124ba30a2f92.html Redis是一个基于key-value的高速缓存系统,类似于me ...
- table与div互相嵌套注意
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- AngularJS 中特性(attr)和属性(prop)的区别
attr() 和 removeAttr() 方法是对特性进行处理的, 而 prop() 是对属性进行操作的 , 但是很多时候操作的东西是同一个 , 但是也是有区别的, 区别在于prop方法处理的是被 ...
- [计算机网络-传输层] 无连接传输:UDP
UDP(用户数据报协议) 下面是UDP的报文段格式: 可以看出UDP的首部长度是固定的,共64bit,即8个字节. 校验和:提供了差错检测得功能,即用于确定当UDP报文段从源到达目的时,其中的比特是否 ...
- 【bzoj2073】[POI2004]PRZ 状态压缩dp
题目描述 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍在桥上的人都不能超过一定的限制. 所以这只队伍过桥时只能分批 ...
- Java第二次实验报告——Java面向对象程序设计
北京电子科技学院(BESTI) 实 验 报 告 课程名称:java程序设计实验 班级:1352 姓名:洪韶武 学号:20135219 成绩: ...
- mysql主从同步加读写分离
首先主从同步,一旦建立,指定了用户,就不能更改了,否则会有错误.1063 Error 'Duplicate entry '%-test-' for key 'PRIMARY'' on query. D ...
- 2-17作业 数据库和shell综合练习
1. 使用shell把“12306用户名和密码库-不要使用记事本打开会卡死-解压后可使用word或ultraedit打开.rar”中的所有记录成生sql语句,然后把sql导入数据库,成一个uPwd_1 ...
- sudoers文件配置
http://note.drx.tw/2008/01/linuxsudo.html foobar ALL=(ALL) ALL 現在讓我們來看一下那三個 ALL 到底是什麼意思.第一個 ALL 是指網路 ...