lihanchuan125 发表于 2018-8-10 09:03:04

Python基础知识汇总

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
  D:\python\test\temp.py
  >>> print os.path.abspath(sys.argv)
  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-1818: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文件

fromsetuptoolsimportsetup, 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

importsys

defget():
returnsys.path

  scripts/test.py

importos

printos.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()
  返回一个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
  06.key = md5.new()
  07.key.update(str)
  08.print key.hexdigest()
  09.str=sys.argv
  保存代码为md.py
  1.$ chmod +x md.py
  2.$ ./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]
查看完整版本: Python基础知识汇总