Python学习笔记
2016-12-30 17:03
148 查看
1.用notepad++时的缩进问题
Python中由于省略了许多符号,所以要严格依靠缩进来控制代码的结构。
所以缩进是十分重要的,大家一般看Python教学的时候都是推荐用4个空格,确实是这样。
但是我用notepad++写的时候遇到了一个问题就是用4个空格写完缩进以后,回车,那么下一行他会帮你自动缩进对不对?这个缩进默认是用的tab,但是如果你没有将tab设置为用4个空格代替的话,就会出现空格tab混用的情况。其实处理这种情况很简单:
只要在设置->首选项->语言->制表符宽度4,下面替换为空格打钩就可以了。
2.关于调用外部函数
如同c语言中的#include <math.h>,Python中需要做的是就是在开头写上import math,但是之后会有所不同比如调用sqrt()这个函数,c就可以直接调用了,但是Python的module并不会把里面的东西自动放到global,可以理解为还有一层命名空间。那么这里有三种解决方案:
1.调用sqrt的时候这么写:math.sqrt()
但如果需要多次调用每次都加math就显得很麻烦,那么第二个方案就是:
2.在前面加上from math import sqrt,这样就可以直接在后面用sqrt()了
那么,如果我不止想用math中的一个函数呢?难道我要from math import sqrt from math import cos() from math import.....
显然这样是不科学的,那么只需要在最前面from mathimport *就可以了,*代表math中的所有内容,这就是第三种方案。
3.等待并输入一个字符
opencv中对cvWaitkey函数的定义如下:
int cvWaitKey( int delay=0 )
返回值为int型,函数的参数为int型,当delay小于等于0的时候,如果没有键盘触发,则一直等待,此时的返回值为-1,否则返回值为键盘按下的码字;当delay大于0时,如果没有键盘的的触发,则等待delay的时间,此时的返回值是-1,否则返回值为键盘按下的码字。
4.Python中的字符数字转化
一、python中字符串转换成数字
(1)import string
tt='555'
ts=string.atoi(tt)
ts即为tt转换成的数字
转换为浮点数 string.atof(tt)
(2)直接int
int(tt)即可。
二、数字转换成字符串
tt=322
tem='%d' %tt
tem即为tt转换成的字符串
5.Python几种连接字符串方式
第一种,用加号相连,没有空格
‘hello’+‘adam’=‘helloadam’
第二种,逗号相连,中间有空格
‘hello’,‘adam’=‘hello adam’
第三种,C风格,格式化字符串
(%s---%s%(‘hello’,‘adam’))=‘hello---adam’
第四种,列表连接
L=['bart','robert','danniel']
identifier=‘&&’
identifier.join(L)='bart&&robert&&danniel'
第五种,*号
str=‘abc’
str=str*2
str=‘abcabc’
好吧,有点乱,但我想在这里补充一些python中string大小写转换的函数
capitalize() 首字母大写,其余全部小写
upper() 全转换成大写
lower() 全转换成小写
title() 标题首字大写,如"i love python".title() "I love python"
6.Python 引用自定义模块
当引用模块时,编译器会先在当前目录,接着去sys.path、Python的安装目录去寻找你引用的模块,如果没有的话,就会报错。
所以,如果要引用的模块在其他地方需要这么做
import sys
sys.path.append(<路径名>)
然后在引用你想引用的模块
7.高级特性:切片(应用的数据结构为list or tuple)
对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这
4000
种操作。
格式是这样的[x:y:z],x为起始索引,y为结束索引(不包含y),索引可以用负索引,z为每z个取一个。
切片的一个强大功能[::-1]实现倒序排列
8.高级特性:迭代(应用数据结构Iterable)、迭代器
可以被
那么如何判断一个类型可不可以迭代?
>>>import
collections
>>>isinstance('abc',
collections.Iterable)
True
生成器都是
把
Python的
默认情况下,dict迭代的是key。如果要迭代value,可以用
如果要对list实现类似Java那样的下标循环怎么办?Python内置的
9.高级特性:生成器
如果说list存放的是数据,那么generator存放的就是算法,对于一个无限长的list来说存放生成它的算法是最好的选择。第一种定义生成器的方法是用()代替[],另一种是在函数中加入yield,用于每次接受next,生成器通过next(),来不断获取下一个元素,直到抛出StopIteration异常。
这里分享一个杨辉三角的生成器,每次返回杨辉三角的一行list
def
Yanghui():
L=[1]
while
True:
yield
L
L=[1]+[L[i]+L[i+1]
for i in range(0,len(L)-1)]+[1]
10.装饰器
在代码运行期,动态增加功能的方式称为装饰器。本质上装饰器就是一个返回函数的高阶函数。
11.偏函数
偏函数的作用就是把函数中的某些参数的默认值固定下来,返回一个新的函数,使得对于这个函数的调用更加简洁。
12.模块
一个.py文件就称之为一个模块
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
首先一般模块内最前边都会有这两个注释,第一个指定在unix和类unix系统中用什么解释器来执行,第二个设置编码。
然后,任何模块第一个字符串都被视为模块的文档注释。可以用__doc__访问,__author__变量,好吧,直译就是作者。
当然以上这些东西你完全可以不写,但这就是一个规范的模板,让你看上去更加有规范。
在模块内,变量或者函数有作用域的概念用下划线_来实现。加了下划线就是private作用域,外面不建议引用,因为并没有强制规定不可以引用,但最好不要。
__XXX__这种属于特殊变量,有着一些特殊的作用,比如__author__, __doc__, __name__, __main__
额,还有一个东西就是:
if __name__=='__main__'
这个是用来测试你所编写的模块的,在你测试的时候会执行这里面的东西,但当你在其他模块import该模块的时候,这里面的东西就不会执行,好吧,说白了,如果这个模块作为主函数入口的话就执行,否则,不执行。
13.动态语言的“鸭子类型”
“鸭子类型”的语言是这么推断的:一只鸟走起来像鸭子、游起泳来像鸭子、叫起来也像鸭子,那它就可以被当做鸭子。也就是说,它不关注对象的类型,不要求严格的继承关系,而是关注对象具有的行为(方法)。
14.python类的变量和方法的动态绑定
如果需要给类的一个实例绑定新的属性,那么直接写就好了比如有个类的实例,原来是没有name属性的,现在我写s.name='string',好了那么现在实例s有了name属性。
给一个实例绑定方法还是对于实例s,绑定s.function,这么做
>>>from typed import MethodType
>>>s.function=MethodType(function,s)
function是一个已经定义好的函数
为了给所有的实例,都动态绑定一个方法,那就要在类上面绑定方法,比如Student类,就是Student.method=method
如果要限制类的属性就用__slots__=('name','age'),这样就只能绑定这两个属性,如果子类没有定义slots那么这个对子类不起作用,如果子类定义了,那么就是这个加上子类自己定义的对子类起限制作用。
15.@property的应用
在java中,为了封装信息,我们通常会把一个变量设成private,然后通过get和set方法来获取,和赋值,但这样书写上有点反人类,我们更希望写成我们本希望的那样,那么我们就只需要在get方法前面加@property,之后如果想设置成可写的话,那么在set方法前加一个@属性名.setter,那么就可以用我们希望的那样也就是等号来进行赋值,直接写变量名来获取。
16.类的实例方法、类方法和静态方法
实例方法传入一个隐含参数self代表实例本身,只能由实例本身来调用。类方法在方法前加@classmethod修饰,传入隐含参数cls代表类本身。静态方法加@staticmethod修饰,不传入任何隐含参数。嗯,从形式上来说,这三个方法的区别是这样的。
17.关于Except的一些知识
其中所有的异常的父类都是BaseException,logging模块通过loggin.exception(e),可以方便地打印错误信息,通过配置,还可以把错误记录到日志文件,方便日后排查。
Python中由于省略了许多符号,所以要严格依靠缩进来控制代码的结构。
所以缩进是十分重要的,大家一般看Python教学的时候都是推荐用4个空格,确实是这样。
但是我用notepad++写的时候遇到了一个问题就是用4个空格写完缩进以后,回车,那么下一行他会帮你自动缩进对不对?这个缩进默认是用的tab,但是如果你没有将tab设置为用4个空格代替的话,就会出现空格tab混用的情况。其实处理这种情况很简单:
只要在设置->首选项->语言->制表符宽度4,下面替换为空格打钩就可以了。
2.关于调用外部函数
如同c语言中的#include <math.h>,Python中需要做的是就是在开头写上import math,但是之后会有所不同比如调用sqrt()这个函数,c就可以直接调用了,但是Python的module并不会把里面的东西自动放到global,可以理解为还有一层命名空间。那么这里有三种解决方案:
1.调用sqrt的时候这么写:math.sqrt()
但如果需要多次调用每次都加math就显得很麻烦,那么第二个方案就是:
2.在前面加上from math import sqrt,这样就可以直接在后面用sqrt()了
那么,如果我不止想用math中的一个函数呢?难道我要from math import sqrt from math import cos() from math import.....
显然这样是不科学的,那么只需要在最前面from mathimport *就可以了,*代表math中的所有内容,这就是第三种方案。
3.等待并输入一个字符
opencv中对cvWaitkey函数的定义如下:
int cvWaitKey( int delay=0 )
返回值为int型,函数的参数为int型,当delay小于等于0的时候,如果没有键盘触发,则一直等待,此时的返回值为-1,否则返回值为键盘按下的码字;当delay大于0时,如果没有键盘的的触发,则等待delay的时间,此时的返回值是-1,否则返回值为键盘按下的码字。
4.Python中的字符数字转化
一、python中字符串转换成数字
(1)import string
tt='555'
ts=string.atoi(tt)
ts即为tt转换成的数字
转换为浮点数 string.atof(tt)
(2)直接int
int(tt)即可。
二、数字转换成字符串
tt=322
tem='%d' %tt
tem即为tt转换成的字符串
5.Python几种连接字符串方式
第一种,用加号相连,没有空格
‘hello’+‘adam’=‘helloadam’
第二种,逗号相连,中间有空格
‘hello’,‘adam’=‘hello adam’
第三种,C风格,格式化字符串
(%s---%s%(‘hello’,‘adam’))=‘hello---adam’
第四种,列表连接
L=['bart','robert','danniel']
identifier=‘&&’
identifier.join(L)='bart&&robert&&danniel'
第五种,*号
str=‘abc’
str=str*2
str=‘abcabc’
好吧,有点乱,但我想在这里补充一些python中string大小写转换的函数
capitalize() 首字母大写,其余全部小写
upper() 全转换成大写
lower() 全转换成小写
title() 标题首字大写,如"i love python".title() "I love python"
6.Python 引用自定义模块
当引用模块时,编译器会先在当前目录,接着去sys.path、Python的安装目录去寻找你引用的模块,如果没有的话,就会报错。
所以,如果要引用的模块在其他地方需要这么做
import sys
sys.path.append(<路径名>)
然后在引用你想引用的模块
7.高级特性:切片(应用的数据结构为list or tuple)
对这种经常取指定索引范围的操作,用循环十分繁琐,因此,Python提供了切片(Slice)操作符,能大大简化这
4000
种操作。
格式是这样的[x:y:z],x为起始索引,y为结束索引(不包含y),索引可以用负索引,z为每z个取一个。
切片的一个强大功能[::-1]实现倒序排列
8.高级特性:迭代(应用数据结构Iterable)、迭代器
可以被
next()函数调用并不断返回下一个值的对象称为迭代器:
Iterator。
那么如何判断一个类型可不可以迭代?
>>>import
collections
>>>isinstance('abc',
collections.Iterable)
True
生成器都是
Iterator对象,但
list、
dict、
str虽然是
Iterable,却不是
Iterator。
把
list、
dict、
str等
Iterable变成
Iterator可以使用
iter()函数
Python的
Iterator对象表示的是一个数据流,Iterator对象可以被
next()函数调用并不断返回下一个数据,直到没有数据时抛出
StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过
next()函数实现按需计算下一个数据,所以
Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
默认情况下,dict迭代的是key。如果要迭代value,可以用
for value in d.values(),如果要同时迭代key和value,可以用
for k, v in d.items()。
如果要对list实现类似Java那样的下标循环怎么办?Python内置的
enumerate函数可以把一个list变成索引-元素对,这样就可以在
for循环中同时迭代索引和元素本身:
>>> for i, value in enumerate(['A', 'B', 'C']): ... print(i, value)
9.高级特性:生成器
如果说list存放的是数据,那么generator存放的就是算法,对于一个无限长的list来说存放生成它的算法是最好的选择。第一种定义生成器的方法是用()代替[],另一种是在函数中加入yield,用于每次接受next,生成器通过next(),来不断获取下一个元素,直到抛出StopIteration异常。
这里分享一个杨辉三角的生成器,每次返回杨辉三角的一行list
def
Yanghui():
L=[1]
while
True:
yield
L
L=[1]+[L[i]+L[i+1]
for i in range(0,len(L)-1)]+[1]
10.装饰器
在代码运行期,动态增加功能的方式称为装饰器。本质上装饰器就是一个返回函数的高阶函数。
11.偏函数
偏函数的作用就是把函数中的某些参数的默认值固定下来,返回一个新的函数,使得对于这个函数的调用更加简洁。
12.模块
一个.py文件就称之为一个模块
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
首先一般模块内最前边都会有这两个注释,第一个指定在unix和类unix系统中用什么解释器来执行,第二个设置编码。
然后,任何模块第一个字符串都被视为模块的文档注释。可以用__doc__访问,__author__变量,好吧,直译就是作者。
当然以上这些东西你完全可以不写,但这就是一个规范的模板,让你看上去更加有规范。
在模块内,变量或者函数有作用域的概念用下划线_来实现。加了下划线就是private作用域,外面不建议引用,因为并没有强制规定不可以引用,但最好不要。
__XXX__这种属于特殊变量,有着一些特殊的作用,比如__author__, __doc__, __name__, __main__
额,还有一个东西就是:
if __name__=='__main__'
这个是用来测试你所编写的模块的,在你测试的时候会执行这里面的东西,但当你在其他模块import该模块的时候,这里面的东西就不会执行,好吧,说白了,如果这个模块作为主函数入口的话就执行,否则,不执行。
13.动态语言的“鸭子类型”
“鸭子类型”的语言是这么推断的:一只鸟走起来像鸭子、游起泳来像鸭子、叫起来也像鸭子,那它就可以被当做鸭子。也就是说,它不关注对象的类型,不要求严格的继承关系,而是关注对象具有的行为(方法)。
14.python类的变量和方法的动态绑定
如果需要给类的一个实例绑定新的属性,那么直接写就好了比如有个类的实例,原来是没有name属性的,现在我写s.name='string',好了那么现在实例s有了name属性。
给一个实例绑定方法还是对于实例s,绑定s.function,这么做
>>>from typed import MethodType
>>>s.function=MethodType(function,s)
function是一个已经定义好的函数
为了给所有的实例,都动态绑定一个方法,那就要在类上面绑定方法,比如Student类,就是Student.method=method
如果要限制类的属性就用__slots__=('name','age'),这样就只能绑定这两个属性,如果子类没有定义slots那么这个对子类不起作用,如果子类定义了,那么就是这个加上子类自己定义的对子类起限制作用。
15.@property的应用
在java中,为了封装信息,我们通常会把一个变量设成private,然后通过get和set方法来获取,和赋值,但这样书写上有点反人类,我们更希望写成我们本希望的那样,那么我们就只需要在get方法前面加@property,之后如果想设置成可写的话,那么在set方法前加一个@属性名.setter,那么就可以用我们希望的那样也就是等号来进行赋值,直接写变量名来获取。
16.类的实例方法、类方法和静态方法
实例方法传入一个隐含参数self代表实例本身,只能由实例本身来调用。类方法在方法前加@classmethod修饰,传入隐含参数cls代表类本身。静态方法加@staticmethod修饰,不传入任何隐含参数。嗯,从形式上来说,这三个方法的区别是这样的。
17.关于Except的一些知识
其中所有的异常的父类都是BaseException,logging模块通过loggin.exception(e),可以方便地打印错误信息,通过配置,还可以把错误记录到日志文件,方便日后排查。
相关文章推荐
- ubuntu卸载python的theano包
- 机器学习实战笔记(Python实现)-06-AdaBoost
- python简单模拟登陆详解
- python之装饰器
- python—django第一个项目
- 242. Valid Anagram
- python2.7安装PIL.Image模块
- Python操作MySQL
- python语法[module/package+import]
- python3 + django + selenium 安装教程
- python中的import机制
- python基础
- selenium+Python测试,Firefox v49版本报错解决方案
- jenkins 运用Windows Slave执行 python程序
- Python Qt GUI快速编程-第五章的例子pen的python3+pytq5+Qt Designer实现
- python_2
- 2016年度GitHub上Stars最多的10个Python项目
- 165. Compare Version Numbers
- python中的eval
- python & c