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文件

Python基础知识汇总_职场 from setuptools import setup, find_packages
Python基础知识汇总_职场
Python基础知识汇总_职场 setup(
Python基础知识汇总_职场        name
= " mytest " ,
Python基础知识汇总_职场        version
= " 0.10 " ,
Python基础知识汇总_职场        description
= " My test module " ,
Python基础知识汇总_职场        author
= " Robin Hood " ,
Python基础知识汇总_职场        url
= " http://www.csdn.net " ,
Python基础知识汇总_职场        license
= " LGPL " ,
Python基础知识汇总_职场        packages
= find_packages(),
Python基础知识汇总_职场        scripts
= [ " scripts/test.py " ],
Python基础知识汇总_职场        )
Python基础知识汇总_职场

mytest.py

 

Python基础知识汇总_职场 import sys
Python基础知识汇总_职场
Python基础知识汇总_职场
def get():
Python基础知识汇总_职场     
return sys.path
Python基础知识汇总_职场
Python基础知识汇总_职场

scripts/test.py

 

Python基础知识汇总_职场 import os
Python基础知识汇总_职场
Python基础知识汇总_职场
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 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 查找文件夹下所有文件 收藏
  1. def find_file_by_pattern(pattern='.*', base=".", circle=True):  
  2.     '''''查找给定文件夹下面所有 '''  
  3.     re_file = re.compile(pattern)  
  4.     if base == ".":  
  5.         base = os.getcwd()  
  6.           
  7.     final_file_list = []  
  8.     print base  
  9.     cur_list = os.listdir(base)  
  10.     for item in cur_list:  
  11.         if item == ".svn":  
  12.             continue  
  13.           
  14.         full_path = os.path.join(base, item)  
  15.         if full_path.endswith(".doc"or \  
  16.             full_path.endswith(".bmp"or \  
  17.             full_path.endswith(".wpt"or \  
  18.             full_path.endswith(".dot"):  
  19.             continue  
  20.               
  21.         # print full_path  
  22.         bfile = os.path.isfile(item)  
  23.         if os.path.isfile(full_path):  
  24.            if re_file.search(full_path):  
  25.                final_file_list.append(full_path)  
  26.         else:  
  27.            final_file_list += find_file_by_pattern(pattern, full_path)  
  28.     return final_file_list  

=============================================

python使用os.walk和os.path.join遍历文件夹的两种方法
Python基础知识汇总_python_23程序代码:
import os
for root, dirs, files in os.walk('D:\\'):
    for file in files:
        print os.path.join(root, file)