`
zhanyingle_1981
  • 浏览: 320662 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

今日python学习

阅读更多

记录下今天关于python的东东:

  1. setuptools:

         下载: http://peak.telecommunity.com/dist/ez_setup.py
          安装: python ez_setup.py 安装后Lib\site-packages 多了easy-install的东西

  2. Python bindings for Selenium selenium 2.18.1

        下载:到selenium 官网下一个,现在只支持python 2.
        安装:python setup.py install 安装后Lib\site-packages 多了selenium-2.18.1-py2.7.egg目录 
        应用:用FireFox插件Selenium IDE 录制脚本后导出python webdriver格式,运行python testproject.py 能跑起来,O(∩_∩)O。
  3. MySQLdb
        下载:MySQL-python-1.2.3.tar.gz
        安装:Python setup.py install

   D:\MySQL-python-1.2.3>python setup.py install
Traceback (most recent call last):
  File "setup.py", line 15, in <module>
    metadata, options = get_config()
  File "D:\MySQL-python-1.2.3\setup_windows.py", line 7, in get_config
    serverKey = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, options['registry_key'])
WindowsError: [Error 2] The system cannot find the file specified

   是因为我没有装MySQL么??!!

   4. 这几天学python,对类里面的self不太理解,Google了一下,找到一个比较容易懂的文章:
      http://sjolzy.cn/Why-should-self-Python.html

Python要self的理由

Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发)。Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self)
为何Python给self赋值而你不必给self赋值?

例子说明:创建了一个类MyClass,实例化MyClass得到了MyObject这个对象,然后调用这个对象的方法MyObject.method(arg1,arg2) ,这个过程中,Python会自动转为Myclass.mehod(MyObject,arg1,arg2)

这就是Python的self的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数,虽然我们在实例化调用的时候不用理会这个参数不用给它赋值。

扩展

self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。

在Python3之后不知道将self隐了没?感觉在Python类里的方法都要带个self这样有点死板


   5. 看到一段话,还在体会中:

    PHP和PYTHON和RUBY三者的关系简单的各用一句话来概括:

PHP一句话来总结就是:Quick And Dirty
PYTHON用一句话来总结就是:Quick And Clean, But Not Convenient For Web Development
RUBY用一句话来总结就是:Code For Fun And Quick For Web

    6. Python usually stores its library (and thereby your site-packages folder) in the installation directory. So, if you had installed Python to C:\Python\, the default library would reside in C:\Python\Lib\ and third-party modules should be stored in C:\Python\Lib\site-packages\.


   7. __init__ 方法:
       在Python的类中有很多方法的名字有特殊的重要意义。现在我们将学习__init__方法的意义。

__init__方法在类的一个对象被建立时,马上运行。这个方法可以用来对你的对象做一些你希望的 初始化 。注意,这个名称的开始和结尾都是双下划线。
使用__init__方法

例11.3 使用__init__方法

#!/usr/bin/python
# Filename: class_init.py

class Person:
    def __init__(self, name):
        self.name = name
    def sayHi(self):
        print 'Hello, my name is', self.name

p = Person('Swaroop')
p.sayHi()

# This short example can also be written as Person('Swaroop').sayHi()

(源文件:code/class_init.py)
输出

$ python class_init.py
Hello, my name is Swaroop
它如何工作

这里,我们把__init__方法定义为取一个参数name(以及普通的参数self)。在这个__init__里,我们只是创建一个新的域,也称为name。注意它们是两个不同的变量,尽管它们有相同的名字。点号使我们能够区分它们。

最重要的是,我们没有专门调用__init__方法,只是在创建一个类的新实例的时候,把参数包括在圆括号内跟在类名后面,从而传递给__init__方法。这是这种方法的重要之处。

现在,我们能够在我们的方法中使用self.name域。这在sayHi方法中得到了验证。

给C++/Java/C#程序员的注释
__init__方法类似于C++、C#和Java中的 constructor 。


  8. python中类的继承

      class DerivedClassName(BaseClassName):
    <statement-1>
    .
    .
    .
    <statement-N>

    python中有2个内建的与继承有关的方法:
        isinstance(): isinstance(obj, int) 为True 如果obj.__class__是int型或者int的子类型。
        issubclass(): issubclass(unicode, str)

    python中类的多重继承:
    class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    .
    <statement-N>

  9. lambda提供了一个运行时动态创建函数的方法
     用法:lambda [arg]: experssion 参数可以有任意多个(包括可选参数);body是函数体,只能是一个表达式,并且直接返回该表达式的值。
     lambda函数的主要用法:配合filter(),map(),reduce()函数一起使用。
      例子:    m = lambda x,y,z: (x-y)*z
                print m(3,1,2)

  10. python 构造和析构函数
__init__(self,…) 这个方法在新建对象恰好要被返回使用之前被调用。
__del__(self) 恰好在对象要被删除之前调用。

Python中所有的类成员(包括数据成员)都是公共的 ,所有的方法都是有效的。
只有一个例外:如果你使用的数据成员名称以双下划线前缀,比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。

  11. filter filter(func, list)接受两个参数:一个函数func和一个列表list,返回一个列表。函数func只能有一个参数。filter的功能:列表中所有元素作为参数传递给函数,返回可以另func返回真的元素的列表

      zip  zip函数接受任意多个序列作为参数,将所有序列按相同的索引组合成一个元素是各个序列合并成的tuple的新序列,新的序列的长度以参数中最短的序列为准。另外(*)操作符与zip函数配合可以实现与zip相反的功能,即将合并的序列拆成多个tuple


晚上回去看看django开发的例子:
http://www.iteye.com/topic/1111822
http://www.iteye.com/topic/993637
http://blog.csdn.net/wh62592855/article/details/6943859

http://onlypython.group.iteye.com/group/wiki/1362-python-39-s-descriptor

http://michaelcrump.net/11-things-every-software-developer-should-be-doing-in-2012
新童鞋需要学的东西太多了...

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics