Python

Posted by Amui 次元 on October 16, 2018

map 函数

map()是python内置的高阶函数,对传入的list的每一个元素进行映射,返回一个新的映射。
对于python2.x,映射后的值为list;
对于python3.x,映射后的值是一个map对象如:<map object at 0x7f1234>。若要重新得到list,需要外层在嵌一层list()。

python2.x示例:

def f(x):
    return x*x
print map(f, [1,2,3,4])

输出结果: [1,4,9,16]
map(f, list)函数不改变原有的list,而是返回一个新的list。

python3.x例子:####

print(map(int, "12-14-16".split('-')))
#输出: <map at 0x547abc..>
print(list(map(int, "12-14-16".split('-'))))
#输出:[12,14,16]

__init__.py文件的作用

作用有:
一、标识该目录是一个python的模块包(module package)
二、简化模块导入操作。
     假设模块包如下:

|--mypackage 
    |--subpackage_1
        |-- test11.py
        |-- test12.py
    |--subpackage_2
        |-- test21.py
        |-- test22.py
    |--subpackage_3
        |-- test31.py
        |-- test32.py 若使用最直接的导入方式,将整个文件拷贝到工程目录下,然后直接导入:

from mypackage.subpackage_1 import test11
from mypackage.subpackage_1 import test12
from mypackage.subpackage_2 import test21
from mypackage.subpackage_2 import test22
from mypackage.subpackage_3 import test31
from mypackage.subpackage_3 import test32

如果模块比较大,目录比较深的话,可能自己都记不清该如何导入。(很有可能,哪怕只想导入一个模块都要在目录中找很久)。因此,__init__.py的作用就体现出来了。
实际上,当目录中包含__init__.py,当用import导入该目录时,会执行__init_.py里面的代码。
具体可参考:https://www.cnblogs.com/tp1226/p/8453854.html

python 面向对象

__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法.
self代表类的实例,而非类。 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。

class Test:
    def prt(self):
        print(self)
        print(self.__class__)
 
t = Test()
t.prt() 以上实例执行结果为:

    <__main__.Test instance at 0x10d066878>
    __main__.Test

从执行结果可以很明显的看出,self 代表的是类的实例,代表当前对象的地址,而 self.__class__ 则指向类。

self 不是 python 关键字,我们把他换成随便一个名称 runoob 也是可以正常执行的.

创建实例对象

实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。

以下使用类的名称 Employee 来实例化,并通过 __init__() 方法接收参数。

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)

访问属性

可以使用点号 . 来访问对象的属性。使用如下类的名称访问类变量: emp1.displayEmployee() emp2.displayEmployee() print(”Total Employee %d” % Employee.empCount)

也可以使用以下函数的方式来访问属性:

  • getattr(obj, name[, default]) : 访问对象的属性。
  • hasattr(obj,name) : 检查是否存在一个属性。
  • setattr(obj,name,value) : 设置一个属性。如果属性不存在,会创建一个新属性。
  • delattr(obj, name) : 删除属性。

类的私有属性

__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时 self.__private_attrs

类的方法

在类的内部,使用 def 关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数

类的私有方法

__private_method:两个下划线开头,声明该方法为私有方法,不能在类的外部调用。在类的内部调用 self.__private_methods

Python不允许实例化的类访问私有数据,但你可以使用 object._className__attrName( 对象名._类名__私有属性名 )访问属性,参考以下实例:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

class Runoob:
    __site = "www.runoob.com"

runoob = Runoob()
print(runoob._Runoob__site)

执行以上代码,执行结果如下:

www.runoob.com

单下划线、双下划线、头尾双下划线说明:
__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。

_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *

__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。