一.迭代器:
https://www.jianshu.com/p/1b0686bc166d
python里面有很多的以__开始和结尾的函数,利用它们可以完成很多复杂的逻辑代码,而且提高了代码的简洁性,本文主要总结了迭代器用到的魔术方法,并且主要以代码例子进行解释。
__iter__ 和 __next__
其实这里需要引入一个概念,叫迭代器,常见的就是我们在使用for语句的时候,python内部其实是把for后面的对象上使用了内建函数iter,比如:
a = [1, 2, 3]for i in a:do_something()
其实在python内部进行了类似如下的转换:
a = [1, 2, 3]for i in iter(a):do_something()
那么iter返回的是什么呢,就是一个迭代对象,它主要映射到了类里面的__iter__函数,此函数返回的是一个实现了__next__的对象。注意理解这句话,比如:
class B(object):def __next__(self):raise StopIterationclass A(object):def __iter__(self):return B()
我们可以看见,A这个类实现了一个__iter__函数,返回的是B()的实例对象,其中B里面实现了__next__这个函数。
下面引入几个概念:
Iterable: 有迭代能力的对象,一个类,实现了__iter__,那么就认为它有迭代能力,通常此函数必须返回一个实现了__next__的对象,如果自己实现了,你可以返回self,当然这个返回值不是必须的;
Iterator: 迭代器(当然也是Iterable),同时实现了__iter__和__next__的对象,缺少任何一个都不算是Iterator,比如上面例子中,A()可以是一个Iterable,但是A()和B()都不能算是和Iterator,因为A只实现了__iter__,而B只实现了__next__()。
我们可以使用collections里面的类型来进行验证:
class B(
RandomState.choice(a, size=None, replace=True, p=None)
–通过给定的一维数组数据产生随机采样
参数:
a:一维数组或者int型变量,如果是数组,就按照里面的范围来进行采样,如果是单个变量,则采用np.arange(a)的形式
size: int或者 tuple of ints, 可选参数
决定了输出的shape. 如果给定的是, (m, n, k), 那么m * n * k 个采样点将会被采样. 默认为零,也就是只有一个采样点会被采样回来。
replace: 布尔参数,可选参数
决定采样中是否有重复值
p:一维数组参数,可选参数
对应着a中每个采样点的概率分布,如果没有标出,则使用标准分布。
返回值:
samples : single item or ndarray
容易引发的错误
Raises:
ValueError
If a is an int and less than zero, if a or p are not 1-dimensional, if a is an array-like of size 0, if p is not a vector of probabilities, if a and p have different lengths, or if replace=False and the sample size is greater than the population size
例子
从 np.arange(5)中产生一个size为3的随机采样:
>>> np.random.choice(5, 3)array([0, 3, 4])>>> #This is equivalent to np.random.randint(0,5,3)
从np.arange(5)中产生一个非标准的 size为 3的随机采样:
>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])array([3, 3, 0])
从 np.arange(5)产生一个标准分布、size为 3、没有重复替换的随机采样
函数:split()
Python中有split()和os.path.split()两个函数,具体作用如下:
split():拆分字符串。通过指定分隔符对字符串进行切片,并返回分割后的字符串列表(list)
os.path.split():按照路径将文件名和路径分割开
一、函数说明
1、split()函数
语法:str.split(str="",num=string.count(str))[n]
参数说明:
str:表示为分隔符,默认为空格,但是不能为空('')。若字符串中没有分隔符,则把整个字符串作为列表的一个元素
num:表示分割次数。如果存在参数num,则仅分隔成 num+1 个子字符串,并且每一个子字符串可以赋给新的变量
注意:当使用空格作为分隔符时,对于中间为空的项会自动忽略
2、os.path.split()函数
语法:os.path.split('PATH')
参数说明:
1.PATH指一个文件的全路径作为参数:
2.如果给出的是一个目录和文件名,则输出路径和文件名
3.如果给出的是一个目录名,则输出路径和为空文件名
二、分离字符串
string = "www.gziscas.com.cn"
1.以'.'为分隔符
print(string.split('.'))['www', 'gziscas', 'com', 'cn']
2.分割两次
print(string.split('.',2))['www', 'gziscas', 'com.cn']
3.分割两次,并取序列为1的项
print(string.split('.',2)[1])gziscas
4.分割两次,并把分割后的三个部分保存到三个文件
u1, u2, u3 =string.split('.',2)print(u1)—— wwwprint(u2)—— gziscasprint(u3) ——com.cn
三、分离文件名和路径
import osprint(os.path.split('/dodo/soft/python/'))('/dodo/soft/python', '')print(os.path
MFC中复选框checkbox控件,至少有三种方法对其进行操作,他们是利用Cbutton成员函数GetCheck和SetCheck,第二种是利用CWnd成员函数IsDlgButtonChecked,最后就是把checkbox复选框控件与BOOL型变量相关联。
MFC中复选框CheckBox的基类是CButton。那么就可以用GetDlgItem来获取复选框的指针,再用Cbutton成员函数GetCheck和SetCheck来获取和设置选中状态。
得到复选框状态的函数:
CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK_MIXI);int state = pBtn->GetCheck();
当state == 0时表示该复选框没有被选中;
当state == 1时表示该复选框被选中;
当state == 2时表示不确定(applies only if the button has the BS_3STATE or BS_AUTO3STATE style);
设置复选框状态的函数:
CButton* pBtn = (CButton*)GetDlgItem(IDC_CHECK_MIXI);pBtn->SetCheck(1);
SetCheck(1)表示设置复选框为“选中”状态;
SetCheck(0)表示设置复选框为“未选中”状态;
SetCheck(2)设置复选框为不确定状态(This value can be used only if the button has the BS_3STATE or BS_AUTO3STATE style.);
CButton是从CWnd继承来,那么就可以用IsDlgButtonChecked来获取和设置check box的状态。另外MSDN上海说明IsDlgButtonChecked还可以用于单选框Radio button。
UINT IsDlgButtonChecked( int nIDButton ) const;
nIDButton为控件ID
函数功能:
该函数可以确定某
(一)自定义dataset
什么是Datasets:
在输入流水线中,我们看到准备数据的代码是这么写的data = datasets.CIFAR10("./data/", transform=transform, train=True, download=True)。datasets.CIFAR10就是一个Datasets子类,data是这个类的一个实例。
为什么要定义Datasets:
PyTorch提供了一个工具函数torch.utils.data.DataLoader。通过这个类,我们在准备mini-batch的时候可以多线程并行处理,这样可以加快准备数据的速度。Datasets就是构建这个类的实例的参数之一。
如何自定义Datasets
下面是一个自定义Datasets的框架
class CustomDataset(data.Dataset):#需要继承data.Dataset,也可以继承object,自定义dataset最主要的是需要重定义__getitem__和__len__def __init__(self):# TODO# 1. Initialize file path or list of file names.passdef __getitem__(self, index):# TODO# 1. Read one data from file (e.g. using numpy.fromfile, PIL.Image.open).# 2. Preprocess the data (e.g. torchvision.Transform).# 3. Return a data pair (e.g. image and label).#这里需要注意的是,第一步:read one data,是一个datapassdef __len__(self):# You should change 0 to the total size of your
博客园参考地址:
https://www.cnblogs.com/oxxxo/p/6129294.html
Python中numpy的where()函数
第一种用法
np.where(conditions,x,y)
if (condituons成立):
数组变x
else:
数组变y
import numpy as npx = np.random.randn(4,4)print(np.where(x>0,2,-2))#试试效果#输出#[[ 2 2 -2 2][-2 -2 2 2][ 2 -2 -2 2][-2 2 -2 2]]xarr = np.array([1.1,1.2,1.3,1.4,1.5])yarr = np.array([2.1,2.2,2.3,2.4,2.5])zarr = np.array([True,False,True,True,False])result = [(x if c else y)for x,y,c in zip(xarr,yarr,zarr)]print(result)#where()函数处理就相当于上面那种方案result = np.where(zarr,xarr,yarr)print(result)#发现个有趣的东西# #处理2组数组# #True and True = 0# #True and False = 1# #False and True = 2# #False and False = 3cond2 = np.array([True,False,True,False])cond1 = np.array([True,True,False,False])#第一种处理 太长太丑result = []for i in range(4):if (cond1[i] & cond2[i]): result.append(0);elif (cond1[i]): result.append(1);elif (cond2[i]): result.append(2);else : result.appen
一、成员函数简介
1、create()
针对不是通过资源文件上拖拉进度条控件生成的进度条,需要用此函数创建一个。
2、SetRange()
设置进度条的起始值和终止值。
3、SetPos()
设置进度条的当前位置。
4、OffSetPos()
移动进度条一段距离
5、SetStep()
设置步长
6、StepIt()
按照步长来更新位置
二、例子
例1:在资源窗口手动增加一个控件IDC_PROGRESS1
CProgressCtrl *myProCtrl2 = (CProgressCtrl *)GetDlgItem(IDC_PROGRESS1);myProCtrl2->SetRange(0,100);for (int i = 0;i<100;i++){//myProCtrl2->OffsetPos(1); //此句代码等同于下两句,以固定步长1更新显示,该功能也可以这样实现:myProCtrl2->SetPos(i);myProCtrl2->SetStep(1);myProCtrl2->StepIt();Sleep(100);}
例2:资源窗口不增加,直接通过代码生成进度条
CProgressCtrl myProCtrl;CRect rect,proRect;GetClientRect(&rect);proRect.left = rect.left + rect.Width()/2 - 100;proRect.top = rect.top + rect.Height()/2 - 20;proRect.right = rect.right - rect.Width()/2 + 100;proRect.bottom = rect.bottom - rect.Height()/2 + 20;//WS_CHILD|WS_VISIBLE|PBS_SMOOTHREVERSEmyProCtrl.Create(WS_VISIBLE,proRect,this,99); //创建位置、大小myProCtrl.SetRange(0,100);int i;for (i = 0; i < 100; i++){myProCtrl.Offs
参考地址:
https://blog.csdn.net/business122/article/details/7541486
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.
sets支持x in set, len(set),和for x in set。作为一个无序的集合,sets不记录元素位置或者插入点。因此,sets不支持 indexing, slicing, 或其它类序列(sequence-like)的操作。
下面来点简单的小例子说明把。
>>> x = set('spam')>>> y = set(['h','a','m'])>>> x, y(set(['a', 'p', 's', 'm']), set(['a', 'h', 'm']))
再来些小应用。
>>> x & y # 交集set(['a', 'm'])>>> x | y # 并集set(['a', 'p', 's', 'h', 'm'])>>> x - y # 差集set(['p', 's'])
记得以前个网友提问怎么去除海量列表里重复元素,用hash来解决也行,只不过感觉在性能上不是很高,用set解决还是很不错的,示例如下:
>>> a = [11,22,33,44,11,22]>>> b = set(a)>>> bset([33, 11, 44, 22])>>> c = [i for i in b]>>> c[33, 11, 44, 22]
很酷把,几行就可以搞定。
1.8 集合
集合用于包含一组无序的对象。要创建集合,可使用set()函数并像下面这样提供一系列的项:
s = set([3,5,9,10]) #创建一个数值集合t = set("Hello") #创建一个唯一字符的集合
与列表和元组不同,集合是无序的,也无法通过数字进行索引。此外,集合中的元素不能重复。例如,如果检查前面代码
一.关于天气的对话:
(1)part 1
Robin:Well,you know what they say—“Time flies when you're having fun. ” You did have fun,didn't you?
Julie:Oh,it was marvelous. B. C. is so beautiful. And it was so nice to get away from this cold,miserable weather.
(2)Part 2
A: It looks like it's going to be sunny.
今天看来像是个晴天。
B: Yes, it's much better than yesterday.
是的,比昨天好多了。
A: They say we're going to get some rain later.
据说待会儿要下雨。
B: Oh, let's just hope it stays[维持某种状态]warm.
哦,我只希望一直暖和下去。
(3)
PART 2
A: I think it's going to be a nice day.
我想今天会是一个好天。
B: It's certainly a big improvement over yesterday.
肯定比昨天大有好转。
A: But it's supposed to get cloudy and windy again this afternoon.
但是,据说今天下午又要转阴刮风了。
B: Well, the worst of the winter should be over.
不过,冬天最糟糕的一段日子总该过去了。
(4)
A:What's the weather like in your city?
B:It's very plessant. The weather is nice. It's not so hot in the summer and it's not so cold in the winter. It's a very go