Python 作用域的问题

Python作用域很好理解,主要分清全局作用域和局部作用域两个概念,并理解其区别:

1.全局作用域的变量都可以在局部作用域中被访问,例如:

[python]

a=1

def test() :

print a

[/python]

调用test()函数是可以打印出a的值的。

全局作用域的变量除了数值、元组、字符串外都可以被局部作用域改变,那些所以对数值、元组、字符串这些不可变序列进行重新赋值时,是不产生任何变化的;

[python]
Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> str="hello"
>>> li=[1,2,3]
>>> def str_change(data):
data="new data"

>>> str_change(str)
>>> str
‘hello’
>>> def li_change(data):
data[0]=5

>>> li_change(li)
>>> li
[5, 2, 3]
>>>
[/python]
如果想在局部作用域内改变不可变序列的值,可以在局部作用域内对变量加上关键词 global
[python]
a=1
def plus_1():
global a
a=a+1
[/python]
同时可以用globals()函数获取全局变量值,vars()获取全部变量的字典,locals()获取全部局部变量的字典

Python相关包

excel操作http://www.python-excel.org/
连接Mysql数据库http://sourceforge.net/projects/mysql-python/files/mysql-python/
串口通信http://pypi.python.org/pypi/pyserial
ocrhttp://code.google.com/p/pytesser/downloads/detail?name=pytesser_v0.0.1.zip&can=2&q=
PIL http://www.pythonware.com/products/pil/

Python串口通信和连接Mysql数据库

串口通信:
http://pypi.python.org/pypi/pyserial
应用如下(程序有点问题,每次关闭串口再打开会出现乱码现象)
[python]
import serial
from time import sleep
ser = serial.Serial(‘/dev/ttyUSB0’, 2400, timeout=1)
def recv(serial):
data, quit = None, False
while 1:
data =serial.read(1)
if data == ”:
continue
sleep(0.02) # data is this interval will be merged
while 1:
n = serial.inWaiting()
if n > 0:
data = "%s%s" % (data,serial.read(n))
else:
quit = True
break
if quit:
break

return data
while 1:
data =recv(ser)
if data== ‘c’ :
ser.close()
break
ser.write(data)
[/python]
Python连接mysql
链接http://sourceforge.net/projects/mysql-python/files/mysql-python/
我没有按照这种方法,因为没安装成功,我用的debian系统,采取包的安装方法
apt-get install python-mysqldb

utf-8编码时统计字数

写该程序的目的是因为utf-8编码时,中文和数字、英文字母所占字节数不同,在进行截取时不方便处理。

[php]
function utf8_array($msg){
$result=array();
$strlen = strlen($msg);
for($i=0; $i<$strlen; $i++) {
$str=substr($msg, $i, 1);
if(ord($str)>0xA0 ){
$result[]=substr($msg, $i, 3);
$i =$i+2;
}else{
$result[]=substr($msg, $i,1);
}
}
return $result;

}
//下面为示例
function sendSms($tele_num,$msg){
header("Content-type:text/html;charset=utf-8");
$sms=D("sms");
$msg_data=utf8_array($msg);
$msg_count=count($msg_data);//字数
$msg_num=1;//短信条数
if($msg_count>65){
$msg_num=ceil($msg_count/62);
}

if($msg_num==1){
$insert_data=array("is_sent"=>0,"tele_num"=>$tele_num,"add_time"=>time(),"send_time"=>0,"send_content"=>$msg);
$sms->add($insert_data);
}else{
for($i=0;$i<$msg_num;$i++){
$msg_send="";
for($j=$i*62;$j<($i+1)*62;$j++){
if($j<$msg_count)
$msg_send.=$msg_data[$j];

}
$msg_send.="(".($i+1).")";
$insert_data=array("is_sent"=>0,"tele_num"=>$tele_num,"add_time"=>time(),"send_time"=>0,"send_content"=>$msg_send);
$sms->add($insert_data);
}
}

}
[/php]