1 Python 函数(类中方法)是第一类对象,不带扣号代表函数或方法对象自己,
带括号,是函数或方法调用。带括号(此时必须传入需要的参数),调用的是函数的return结果
不带括号,你变成了二个lower 方法在比较
3 class实例化带不带括号:
1 class clseest():
2 y = '我 '
3 def __init__(self):
4 self.y = '你'
5 x = clseest
6 print(x.y) #我
7
8 x = clseest()
9 print(x.y)#你
即:带括号的实例化方法是调用了init()函数, 此时必须传入需要的参数
4 python中的zip
Python3中zip()返回的是元祖组成的迭代器,而在Python2中返回的是元祖组成的列表。
可以使用next()打印
zip('ABCD', 'xy') --> Ax By
>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> zipped = zip(x, y)
>>> list(zipped)
[(1, 4), (2, 5), (3, 6)]
>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True
9.python argparse用法总结
命令行参数解析模块;终端命令行输入pythontest2.py –help, Ipython终端输入%runtest2.py -h
10.generator:在Python中,这种一边循环一边计算的机制,称为生成器:generator。
保存的是算法而非元素整体;可以用next()打印也可以for循环打印
两种方式:
1.只要把一个列表生成式的[]改成();创建 L和 g的区别仅在于最外层的[]和(),L 是一个list,而g是一个generator。next()函数获得generator的下一个返回值,for循环,因为 generator也是可迭代对象;
2.函数定义中包含 yield关键字,generator的函数,在每次调用 next()的时候执行,遇到yield语句返回,再次执行时从上次返回的 yield语句处继续执行;
11.迭代器和可迭代对象
这些可以直接作用于for循环的对象统称为可迭代对象: Iterable。
一类是集合数据类型,如list、tuple、dict、set、str 等;
一类是generator,包括生成器和带yield 的generatorfunction。
用下面的函数判断;
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
from collection import Iterable
isinstance([],Iterable)
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
isinstance()判断一个对象是否是Iterator 对象,
fromcollections import Iterator
isinstance(range(6),Iterator)
生成器都是Iterator 对象,但list、dict、str 虽然是Iterable,却不是Iterator。
把list、dict、str 等Iterable 变成Iterator 可以使用iter()函数
两者区别:Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用
list是永远不可能存储全体自然数的。
12.python3中的range,,numpy中的arange
enumerate函数用于遍历序列中的元素以及它们的下标:
NameError:name‘xrange’ is not defined,在Python3中,range()与xrange()合并为range()。
fori in enumerate(range(4)) :
print (i)
range()返回的是一个可迭代对象;
np.nrange()返回的是numpy.ndarray();range尽可用于迭代,而np.nrange作用远不止于此,它是一个数组,可被当做向量使用。
df= pd.DataFrame(np.arange(5 * 4).reshape((5, 4)))
13.传入参数时容易漏掉的括号
zero_matrix = np.zeros(len(movies),len(genres))TypeError:data type not understoodzero_matrix= np.zeros((len(movies),len(genres)))
14.str的方法
strip()方法用于移除字符串头尾指定的字符(默认为空格)。str.strip(‘0’ )
15.list.append(object) 向列表中添加一个对象object;
list.extend(sequence)把一个序列seq的内容添加到列表中;
16.关于随机数种子
计算机并不能产生真正的随机数,如果你不设种子,计算机会用系统时钟来作为种子,如果你要模拟什么的话,每次的随机数都是不一样的,这样就不方便你研究,如果你事先设置了种子,这样每次的随机数都是一样的,便于重现你的研究,也便于其他人检验你的分析结果。
17.list和tuple的区别,tuple不可更改
18.python中的上下文管理器
with,上下文管理协议则是enter和exit;配合with语句使用的时候,上下文管理器会自动调用enter方法,然后进入运行时上下文环境,如果有as从句,返回自身或另一个与运行时上下文相关的对象,值赋值给var。当with_body执行完毕退出with语句块或者with_body代码块出现异常,则会自动执行exit方法,并且会把对于的异常参数传递进来。如果exit函数返回True。则with语句代码块不会显示的抛出异常,终止程序,如果返回None或者False,异常会被主动raise,并终止程序。
执行contextor以获取上下文管理器
加载上下文管理器的exit()方法以备稍后调用
调用上下文管理器的enter()方法
如果有asvar 从句,则将enter()方法的返回值赋给var
执行子代码块with_body
6.调用上下文管理器的exit()方法,如果with_body的退出是由异常引发的,那么该异常的type、value和traceback会作为参数传给exit(),否则传三个None
7.如果with_body的退出由异常引发,并且exit()的返回值等于False,那么这个异常将被重新引发一次;如果exit()的返回值等于True,那么这个异常就被无视掉,继续执行后面的代码
19.再看if__name__ == ‘main‘:
main()
我们简单的理解就是:如果模块是被直接运行的,则代码块被运行,如果模块是被导入的,则代码块不被运行。
if__name__ == ‘main’ 就相当于是Python模拟的程序入口。Python本身并没有规定这么写,这只是一种编码习惯。由于模块之间相互引用,不同模块可能都有这样的定义,而入口程序只能有一个。到底哪个入口程序被选中,这取决于name的值。
20
1、读写文件
open()将会返回一个file对象,基本语法:
open(filename,mode)
filename:是一个包含了访问的文件名称的路径字符串
mode:决定了打开文件的模式:只读,写入,追加等,默认文件访问模式为只读(r)
不同模式打开文件的列表:
r:以只读的方式打开文件,文件的指针将会放在文件的开头,为默认模式
rb:以二进制格式打开一个文件用于只读,文件指针会在文件的开头
r+:打开一个文件用于读写,文件指针将会在文件的开头
rb+:以二进制格式打开一个文件用于读写,文件指针会放在文件的开头
w:打开一个文件用于写入,如果该文件已存在则将会覆盖文件,如果不存在则创建新文件
wb:以二进制打开一个文件用于写入
w+:打开一个文件用于读写
wb+:以二进制格式打开一个文件用于读写,如果文件存在则覆盖,如果不存在则创建新文件
a:打开一个文件用于追加内容,如果文件已存在,文件指针会放在文件的结尾,如果不存在则创建新文件进行写入
ab:以二进制格式打开一个文件用于追加写入
a+:打开一个文件用于读写,如果该文件已存在,文件指针会放在结尾,文件打开时会是追加模式,该文件不存在则创建新文件
ab+:以二进制格式打开一个文件用于追加。