Python - Learn Note (3)
Python之模块
包就是文件夹;包可以有多级;
模块就是 xxx.py文件;可以创建自己的模块,并且导入它们,模块的名字就和文件的名字相同;
Python使用import语句导入一个模块。
import math
print math.sqrt(16) # => 4
只希望导入用到的math模块的某几个函数
from math import ceil, floor
print ceil(3.7) # => 4.0
print floor(3.7) # => 3.0
# 从模块中导入所有的定义
# 警告:不推荐使用
from math import *
使用 from...import 导入 函数,有时候会引起同名冲突。这时,可以给函数起个“别名”来避免冲突;
from math import log
from logging import log as logger # logging的log现在变成了logger
print log(10) # 调用的是math的log
logger(10, 'import from logging') # 调用的是logging的log
# 也可以通过dir方法查看模块中有什么属性和方法
import math
dir(math)
dir()#当前模块的定义,但不会列出内置函数和变量名,他们在标准模块‘_builtin_’中定义
import __builtin__
print(dir(__builtin__))#如果一个模块被修改了,可以使用imp.reload重新加载模块的新定义import imp
imp.reload(math)
查找模块
导入一个 xxx模块,解释器首先查找 xxx.py的文件,当找到该模块时,解释器将它编译成一个.pyc文件。当再次导入模块时,解释器可以加载编译好的模块,加速Python脚本的运行;如果导入的模块不存在,Python解释器会报 ImportError 错误:解释器查找模块搜索路径指定在sys模块的sys.path变量中的所有目录;
sys.path由环境变量PYTHONPATH初始化,如果没有设定PYTHONPATH,就由内置的默认值初始化,可以用标准的字符串操作修改它:
import sys
sys.path.append(r"C:\Program Files")
安装第三方模块
-easy_instal
-pip(推荐,已内置到 Python 2.7.9)
python -m pip install --upgrade pip 升级pip命令
第三方库都会在Python官方的pypi.python.org网站注册,要安装一个第三方库,必须先知道该库的名称;
进入window 命令符,键入 pip help
键入命令pip install numpy下载安装相关包(用于科学计算的NumPy库);注意多版本共存的问题,使用哪个版本的pip 需要cd 到其 目录下:
python之__future__
Python的新版本会引入新的功能,但是,实际上这些功能在上一个老版本中就已经存在了。要“试用”某一新的特性,就可以通过导入__future__模块的某些功能来实现。
当新版本的一个特性与旧版本不兼容时,该特性将会在旧版本中添加到__future__中,以便旧的代码能在旧版本中测试新特性。
Python 2.7的整数除法运算结果仍是整数:Python 3.x已经改进了整数的除法运算,“/”除将得到浮点数,“//”除才仍是整数:要在Python 2.7中引入3.x的除法规则,导入__future__的division
from __future__ import division
print 10/3
python之类和对象
定义类是通过class
关键字;定义一个Person类如下:
class Person(object):
pass
按照 Python 的编程习惯,类名以大写字母开头,紧接着是(object),表示该类是从哪个类继承下来的。通常,如果没有合适的继承类,就使用object
类,这是所有类最终都会继承的类;
创建对象使用 类名+(),类似函数调用的形式创建:
xiaoming = Person()
xiaohong = Person()
由于Python是动态语言,对每一个对象,都可以直接给他们的属性赋值,例如,给xiaoming这个对象加上name、gender和birth属性:
xiaoming.name = 'Xiao Ming'
xiaoming.gender = 'Male'
xiaoming.birth = '1990-1-1'
给xiaohong加上的属性不一定要和xiaoming相同:
xiaohong.name = 'Xiao Hong'
xiaohong.school = 'No. 1 High School'
xiaohong.grade = 2
基本构造函数__init__()方法,当创建对象时,__init__()方法被自动调用,__init__() 方法的第一个参数必须是 self(也可以用别的名字,但建议使用习惯用法),后续参数则可以自由指定,和定义函数没有任何区别。相应地,创建对象时,就必须要提供除 self 以外的参数;
属性访问限制:在Python中,对象的变量名如果以__
开头,就变成了一个私有变量(private),只有内部可以访问;
以"__xxx__"定义的属性在Python的类中被称为特殊属性,有很多预定义的特殊属性可以使用,特殊变量是可以直接访问的,不是private变量,通常我们不要把普通属性用"__xxx__"定义。
以一个下划线开头的实例变量名,比如_name
,这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。
类属性:在类上绑定一个属性,则所有实例都可以访问类的属性,并且,所有实例访问的类属性都是同一个,因为类属性是直接绑定在类上的;所以,访问类属性不需要创建实例,就可以直接访问,类属性也是可以动态添加和修改的;当实例属性和类属性重名时,实例属性优先级高,它将屏蔽掉对类属性的访问。
实例方法:就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的;
方法也是一个属性,所以,它也可以动态地添加到实例上,只是需要用 types.MethodType() 把一个函数绑定到一个属性上;并不常见,直接在class中定义要更直观。
import types
def fn_get_grade(self):
if self.score >= 80:
return 'A'
if self.score >= 60:
return 'B'
return 'C' class Person(object):
def __init__(self, name, score):
self.name = name
self.score = score p1 = Person('Bob', 90)
p1.get_grade = types.MethodType(fn_get_grade, p1, Person)
print p1.get_grade() # => A
类方法:通过标记一个 @classmethod,该方法将绑定到类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls;类方法无法获得任何实例变量,只能获得类的引用。
class Person(object):
__count = 0
@classmethod
def how_many(cls):
return cls.__count
@classmethod
def set_Count(cls,count):
cls.__count=count
def __init__(self,name):
self.name=name
Person.set_Count(Person.how_many()+1)
print Person.how_many()
p1 = Person('Bob')
print Person.how_many()
类的继承和多态:函数super(CurClass, self)将返回当前类(CurClass)继承的父类,然后调用__init__()方法,用于初始化父类;注意self参数已在super()中传入,在__init__()中将隐式传递,不需要写出(也不能写);
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender class Teacher(Person): def __init__(self, name, gender, course):
super(Teacher, self).__init__(name, gender)
self.course=course t = Teacher('Alice', 'Female', 'English')
print t.name
print t.course
类型判断:函数isinstance()可以判断一个变量是否是某个类型;isinstance(a, list)
多重继承:Python允许从多个父类继承,一个子类就可以同时获得多个父类的所有功能。
class A(object):
def __init__(self, a):
print 'init A...'
self.a = a class B(A):
def __init__(self, a):
super(B, self).__init__(a)
print 'init B...' class C(A):
def __init__(self, a):
super(C, self).__init__(a)
print 'init C...' class D(B, C):
def __init__(self, a):
super(D, self).__init__(a)
print 'init D...'
多重继承通过 super()调用__init__()方法时,A 虽然被继承了两次,但__init__()只调用一次;
解析类属性的规则:顺序是深度优先,从左到右;先在派生类(D)中查找某个属性,然后搜索 B,然后(递归的)搜索其基类,如果还没有找到,就搜索 C,以此类推;
获取对象信息:type() 函数获取变量的类型,它返回一个 Type 对象:
t = Teacher('Alice', 'Female', 'English')
type(t) #=> <class '__main__.Teacher'>
dir() 函数获取变量的所有属性:对于实例变量,dir()返回所有实例属性,包括`__class__`这类有特殊意义的属性。
getattr() 和 setattr( )函数:获取或者设置对象的属性;
getattr(t, 'name') # 获取name属性
setattr(t, 'name', 'Adam') # 设置新的name属性
getattr(t, 'age') # 获取age属性,但是属性不存在,报错
getattr(t, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20
定制类:
python之异常
Python - Learn Note (3)的更多相关文章
- Python - Learn Note (2)
Python注释 Python的注释以#开头,后面的文字直到行尾都算注释 Python基本数据类型 整数.浮点数(浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置 ...
- Python - learn note(1)
1. 下载安装Python 2.7(为了向下兼容以前的版本), Python 3.5(VS2015不支持配置3.6的环境) 教程 需要使用VS2015进行开发,必须勾选上后面两项: 2. VS2015 ...
- #MySQL for Python(MySQLdb) Note
#MySQL for Python(MySQLdb) Note #切记不要在python中创建表,只做增删改查即可. #步骤:(0)引用库 -->(1)创建连接 -->(2)创建游标 -- ...
- Python Function Note
Python Function Note #汉诺塔问题Python实现 def my_move(n, a, b, c): if n == 1: print(a + ' --> ' + c) el ...
- Php learn note
Php learn note 1. Between two part of ECHO, there is , sign rather than + sign. echo 'Hello World!!' ...
- python learn note1
1.python 的缩进 习惯了java,c++之类的宽容,初学python,被它摆了道下马威,写if else,竟然必须要我正确用缩进格式,原来在python里不能用括号来表示语句块,也不能用开始/ ...
- Python Study Note 1
Learn The First Day OF Operation Notes
- How do I learn machine learning?
https://www.quora.com/How-do-I-learn-machine-learning-1?redirected_qid=6578644 How Can I Learn X? ...
- Python 的经典入门书籍
实python非常适合初学者入门,上手很容易.我就是完全通过网上资源学了python的.最大的是3点经验:1.找一本浅显易懂,例程比较好的教程,从头到尾看下去.不要看很多本,专注于一本.把里面的例程都 ...
随机推荐
- linux内核分析 第3章读书笔记
第三章 进程管理 一.进程 1.进程 进程就是处于执行期的程序. 进程就是正在执行的程序代码的实时结果. 进程是处于执行期的程序以及相关的资源的总称. 进程包括代码段和其他资源. 2.线程 执行线程, ...
- 3D CNN for Video Processing
3D CNN for Video Processing Updated on 2018-08-06 19:53:57 本文主要是总结下当前流行的处理 Video 信息的深度神经网络的处理方法. 参考文 ...
- flink架构介绍
前言 flink作为基于流的大数据计算引擎,可以说在大数据领域的红人,下面对flink-1.7的架构进行逻辑上的分析并和spark做了一些关键点的对比. 架构 如图1,flink架构分为3个部分,cl ...
- MyBatis各种类型的入参使用方式
https://blog.csdn.net/u011983531/article/details/53561219 mybatis中if判断传入字符串或者Long参数不为空 https://blog. ...
- Js页面自动跳转
//声明 t = 1 var t = 10; function openwin() { t -= 1; if(t==0){ location.href='index2.html'; } setTime ...
- 安装 mysql5.7.2 (Ubuntu 16.04 desktop amd64)
1.下载mysql deb https://dev.mysql.com/downloads/mysql/ #移动到/usr/local/src/目录,解压 sudo mv mysql-server_5 ...
- Spring 注解 @Resource和@Autowired
@Resource和@Autowired两者都是做bean的注入使用. 其实@Resource并不是Spring的注解,他的包是javax.annotation.Resource 需要导入.但是Spr ...
- 常用 书签 mark
1.框架 jquery bootstrap 2.网站 w3cschool old 站长之家 ( site:www.zgacjx.com 直接看百度收录数 ) 博客园
- 用docker部署flask+gunicorn+nginx
说来惭愧,写了好几个flask django项目都是在原型阶段直接python app.py 运行的,涉及到部署用nginx和gunicorn 都是让别人帮我部署的,据说好像说很麻烦的样子,我就没自己 ...
- Linux下Tomcat启动设置debug模式启动
原文: https://blog.csdn.net/li295214001/article/details/42077247 https://blog.csdn.net/jackie_xiaonan/ ...