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)的变量, 只能是允许这个类本身进行访问了。