Python Notes



本文内容来自,慕课网廖老师 Python 课程,地址: http://www.imooc.com/learn/317

#高阶函数

将函数当做入参:

def half(c): return c / 2.0
def test(a, b, c):
    return c(a) + c(b)
print(test(2, 8, half))  

##Map

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。

阅读全文 »


用 Python 玩测试



Python 库这么多,测试库肯定也是丰富无比。官网给出了Python测试框架的列表 PythonTestingToolsTaxonomy , 常见的比如 unittest nose mock Selenium 等。本文简单了解一下 Python 的测试~

单元测试 unittest

首先,给出, unittest 文档地址 https://docs.python.org/4.5/library/unittest.html, 具体用法,就不翻译了,查查文档就行。

第一句话就乐了, unittest 是借鉴 Junit 实现的。

The unittest unit testing framework was originally inspired by JUnit and has a similar flavor as major unit testing frameworks in other languages.

unittest 支持以下四种方式:

  • test fixture
  • test case
  • test suite
  • test runner

关系

首先是要写好TestCase,然后由TestLoader加载TestCase到TestSuite,然后由TextTestRunner来运行TestSuite,运行的结果保存在TextTestResult中,整个过程集成在unittest.main模块中。

unittest Demo

import unittest

class TestStringMethods(unittest.TestCase):

  def test_upper(self):
      self.assertEqual('foo'.upper(), 'FOO')

  def test_isupper(self):
      self.assertTrue('FOO'.isupper())
      self.assertFalse('Foo'.isupper())

  def test_split(self):
      s = 'hello world'
      self.assertEqual(s.split(), ['hello', 'world'])
      # check that s.split fails when the separator is not a string
      with self.assertRaises(TypeError):
          s.split(2)
  @unittest.skip("demonstrating skipping")
  def test_nothing(self):
      self.fail("shouldn't happen")

  @unittest.skipIf(mylib.__version__ < (1, 3),
                   "not supported in this library version")
  def test_format(self):
      # Tests that work for only a certain version of the library.
      pass

  @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
  def test_windows_support(self):
      # windows specific testing code
      pass
        
if __name__ == '__main__':
    unittest.main()

##参考文档

1. Python单元测试——深入理解unittest

阅读全文 »


《Python 高手之路》读书笔记 <一>



《Python 高手之路》这本书很不错,翻译的也部分到位!先贴一段介绍:

 Python 是一门优美的语言, 它快速,灵活且内置了丰富的标准库, 已经用于越来越多的不同领域。 通常大多数关于 Python 的书都会教读者这门语言的基础知识, 但是掌握了这些基础知识后, 读者在设计自己的应用程序和探索最佳实践时仍需要完全靠自己。 本书则不同, 介绍了如何利用 python 有效的解决问题, 以及如何构建良好的 python 应用程序。

项目开始

1. python 项目结构

此处输入图片的描述

上图展示了一个项目的标准目录层次结构。

2. python 版本编号

PEP440 中规定了 python 的版本号应当遵照以下正则表达式:

 [N!]N(.N)*[{a|b|rc}N][.postN][.devN]

1.2a1 表示 alpha 版本,不是很稳定

2.3.1b2 一个beta版本,差不多了,有点Bug

3. 代码风格与编码规范

Python! 毫无疑问,PEP8, 参考地址 PEP 0008 – Style Guide for Python Code

还有个译文版! 真赞 !! 译 PEP 8 - Python 编码风格指南

阅读全文 »


Shell 交互工具 expect



执行该命令时,提示需要输入密码,谷歌了一下发现有expect这个工具,可以进行脚本自动交互,填入数据。直接贴个简单登录代码,后面部分可以忽略不看:

  
#!/usr/bin/expect  -f
spawn ssh root@$facecode.org
expect "password:"
send "xxoo\r"
interact

阅读全文 »


Python import探索



Java和Python玩家对import关键字一点都不陌生,本文以python为例,试着理解一下。

##1. 环境变量 可以猜到,在import模块时,python会从环境变量中搜索需要加载的模块,这个列表就存放在sys.path变量中,可以进行修改。想要引入时,首先要将路径放到环境变量中。 对环境变量临时修改,将/home/admin/git添加进来,示例如下:

>>> import sys
>>> '/home/admin/git' in sys.path
False
>>> sys.path.append('/home/admin/git')
>>> '/home/admin/git' in sys.path
True
>>> print sys.path
['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2', '/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages', '/home/admin/git']

类似windows系统变量,在查询时,也是按照列表的顺序进行遍历

阅读全文 »