Python全局变量的使用方法
应该尽量避免使用全局变量。不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性。对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误。这种错误是很难发现和更正的。
全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量。同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量。
但是某些时候,全局变量能够解决局部变量所难以解决的问题。事物要一分为二。
python里面全局变量有两种灵活的用法:
1 声明法
在文件开头声明全局变量variable,
在具体函数中使用该变量时,需要事先声明 global variable,否则系统将该变量视为局部变量。
CONSTANT = 0
(将全局变量大写便于识别)
def modifyConstant() :
global CONSTANT
print CONSTANT
CONSTANT += 1
return
if __name__ == '__main__' :
modifyConstant()
print CONSTANT
2模块法(推荐)
把全局变量定义在一个单独的模块中:
#gl.py
gl_1 = 'hello'
gl_2 = 'world'
在其它模块中使用
#a.py
import gl
def hello_world()
print gl.gl_1, gl.gl_2
#b.py
import gl
def fun1()
gl.gl_1 = 'Hello'
gl.gl_2 = 'World'
第二种方法,适用于不同文件之间的变量共享,而且一定程度上避免了开头所说的全局变量的弊端,推荐! ......
=========================================================
Python获取元组和列表中的元素的方法
print len(元组)
print len(列表)
==============================
python获取当前路径的方法
>>> import os
>>> homedir = os.getcwd()
>>> print homedir
D:\python\test
>>>
>>> import sys
>>> print sys.argv[0]
D:\python\test\temp.py
>>> print os.path.abspath(sys.argv[0])
D:\python\test\temp.py
>>>
=====================================================
Python定义及使用结构体
Python中没有专门定义结构体的方法,但可以使用class标记定义类来代替结构体,其成员可以在构造函数__init__中定义,具体方法如下。
# 例:定义及使用结构体
class item:
def __init__(self):
self.name = '' # 名称
self.size = 10 # 尺寸
self.list = [] # 列表
a = item() # 定义结构对象
a.name = 'cup'
a.size = 8
a.list.append('water')
==========================================================
使用Python定义C风格结构体2011-05-18 18:55 使用C定义的结构体:
struct ss {
int num1;
int num2;
};
使用Python定义的结构体
from ctypes import *
class ss(Structure):
_fields_ = [
("num1", c_int),
("num2", c_int),
]
测试:
cstruct = ss()
cstruct.num1 = 1
cstruct.num2 = 2
print cstruct.num1
print cstruct.num2
输出:
1
2
===========================================================
[转]制作Python的安装模块
Python模块的安装方法:
1. 单文件模块
直接把文件拷贝到$python_dir/lib
2. 多文件模块,带setup.py
python setup.py install
3. egg文件,类似Java的jar
1) 下载ez_setup.py,运行python ez_setup
2) easy_install *.egg
虽然Python的模块可以拷贝安装,但是一般情况下推荐制作一个安装包,即写一个setup.py文件来安装。
setup.py文件的使用:
% python setup.py build #编译 % python setup.py install #安装
% python setup.py sdist #制作分发包
% python setup.py bdist_wininst #制作windows下的分发包
% python setup.py bdist_rpm
setup.py文件的编写
setup.py中主要执行一个 setup函数,该函数中大部分是描述性东西,最主要的是packages参数,列出所有的package,可以用自带的find_packages来动态获取package。所以setup.py文件的编写实际是很简单的。 简单的例子:
setup.py文件
from setuptools import setup, find_packages
setup(
name
= " mytest " , version
= " 0.10 " , description
= " My test module " , author
= " Robin Hood " , url
= " http://www.csdn.net " , license
= " LGPL " , packages
= find_packages(), scripts
= [ " scripts/test.py " ], )
mytest.py
import sys
def get():
return sys.path
scripts/test.py
import os
print os.environ.keys() setup中的scripts表示将该文件放到 Python的Scripts目录下,可以直接用。
OK,简单的安装成功,可以运行所列举的命令生成安装包,或者安装该python包。
本机测试成功(win32-python25)!
======================================================
Python读取ini文件的包 「dict4ini」
主页 http://code.google.com/p/dict4ini/
描述:python 读取传统ini文件的扩展,详细实例 点击上面连接可见
========================================================
使用Python的MD5模块比较两个文件是否一致
在Python中内置了md5的实现,就是md5模块,因此可以很简单的处理比较两个文件是否一致的问题。如以下代码片断:
import os,sys,md5
f1 = open('f:/1.txt','r')
f2 = open('f:/1.txt','r')
print md5.new(f1.read()).digest() == md5.new(f2.read()).digest()
以上处理在处理比较大的文件(比如几百M的文件)的时候会有内存问题。
python的md5模块使用非常简单,包括以下几个函数:
md5.new([arg])
返回一个md5对象,如果给出参数,则相当于调用了update(arg)
md5.updte(arg)
用string参数arg更新md5对象
md5.digest()
返回16字节的摘要,由传给update的string生成,摘要没有ascii字符
md5.hexdigest()
以16进制的形式返回摘要
代码示例:
01.#!/usr/bin/python
02.import sys
03.import md5
04.
05.str=sys.argv[1]
06.key = md5.new()
07.key.update(str)
08.print key.hexdigest()
09.str=sys.argv[1]
保存代码为md.py
1.[fengyj@fengyj python]$ chmod +x md.py
2.[fengyj@fengyj python]$ ./md.py fengyajie
3.74d040444b8f20d37aa9b2bd2997cd64
===========================================================
python提供了一个进行hash加密的模块:hashlib
下面主要记录下其中的md5加密方式
>>> import hashlib
>>> m = hashlib.md5()
>>> m.update("Nobody inspects")
>>> m.update(" the spammish repetition")
>>> m.digest()
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
>>> m.hexdigest()
'bb649c83dd1ea5c9d9dec9a18df0ffe9'
对以上代码的说明:
1.首先从python直接导入hashlib模块
2.调用hashlib里的md5()生成一个md5 hash对象
3.生成hash对象后,就可以用update方法对字符串进行md5加密的更新处理
4.继续调用update方法会在前面加密的基础上更新加密
5.加密后的二进制结果
6.十六进制结果
如果只需对一条字符串进行加密处理,也可以用一条语句的方式:
>>>print hashlib.new("md5", "Nobody inspects the spammish repetition").hexdigest()
'bb649c83dd1ea5c9d9dec9a18df0ffe9'
下面分别使用MD5和SHA进行加密:
import hashlib
a = "a test string"
print hashlib.md5(a).hexdigest()
print hashlib.sha1(a).hexdigest()
print hashlib.sha224(a).hexdigest()
print hashlib.sha256(a).hexdigest()
print hashlib.sha384(a).hexdigest()
print hashlib.sha512(a).hexdigest()
还有一种base64加密:
import base64
str='haha'
encoded = base64.b64encode(str)
decoded = base64.b64decode(encoded)
------------------------------
>>> print encoded
aGFoYQ==
>>> print decoded
haha
你会发现decoded == str
========================================================
python 查找文件夹下所有文件 收藏
view plaincopy to clipboardprint?
def find_file_by_pattern(pattern='.*', base=".", circle=True):
'''''查找给定文件夹下面所有 '''
re_file = re.compile(pattern)
if base == ".":
base = os.getcwd()
final_file_list = []
print base
cur_list = os.listdir(base)
for item in cur_list:
if item == ".svn":
continue
full_path = os.path.join(base, item)
if full_path.endswith(".doc") or \
full_path.endswith(".bmp") or \
full_path.endswith(".wpt") or \
full_path.endswith(".dot"):
continue
# print full_path
bfile = os.path.isfile(item)
if os.path.isfile(full_path):
if re_file.search(full_path):
final_file_list.append(full_path)
else:
final_file_list += find_file_by_pattern(pattern, full_path)
return final_file_list
=============================================
python使用os.walk和os.path.join遍历文件夹的两种方法
程序代码:import os for root, dirs, files in os.walk('D:\\'):
for file in files:
print os.path.join(root, file)
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com