
编程开发
切片copy
当我们需要在Go语言中复制一个切片时,我们可以使用内置的copy函数。copy函数可以将一个切片的元素复制到另一个切片中。下面是一个示例: 在上面的示例中,我们首先创建了一个源切片
#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
devops=["python3","k8s","nginx","mysql"]
wulaoer = iter(devops)
print ("输出迭代的第一个对象:",next(wulaoer))
print ("输出迭代的第二个对象:",next(wulaoer))
输出结果:
输出迭代的第一个对象: python3 输出迭代的第二个对象: k8s迭代器的创建对象有两种分别是iter() 和 next(),上面我们使用的iter()创建的迭代对象,第一次打印的时候是第一个迭代对象"python3",第二次迭代的时候打印的是"k8s"。也可以使用for循环进行打印所有的迭代对象。看下面的例子:
#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
devops=["python3","k8s","nginx","mysql"]
wulaoer = iter(devops)
for i in wulaoer:
print("打印每一个迭代对象:",i)
输出结果:
打印每一个迭代对象: python3 打印每一个迭代对象: k8s 打印每一个迭代对象: nginx 打印每一个迭代对象: mysql这是列表作为一个迭代对象举例的方法,常使用的其他迭代对象还有元祖,字典,字符串,set集合等。如果判断一个对象是否是迭代对象,可以使用collections模块的Iterable类型进行判断。例如:
#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
from collections import Iterable
print("判断字符串是否是迭代对象:",isinstance("python3",Iterable))
print("判断列表是否是迭代对象:",isinstance(["python3","k8s","nginx"],Iterable))
print("判断整数是否是迭代对象:",isinstance(27,Iterable))
输出结果:
判断字符串是否是迭代对象: True 判断列表是否是迭代对象: True 判断整数是否是迭代对象: False返回True就可以判断对象是迭代对象,False就不是迭代对象。我们可以使用迭代器生成一个有规律的数据,而不在使用已有的数据集取数,避免内存资源浪费。下面看个例子:
#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
class Wulaoer:
def __iter__(self):
self.a = 1
return self
def __next__(self):
if self.a <= 10:
x = self.a
self.a += 1
return x
else:
raise StopIteration
wolf = Wulaoer()
myiter = iter(wolf)
for i in myiter:
print("打印可迭代的对象:",i)
输出结果:
打印可迭代的对象: 1 打印可迭代的对象: 2 打印可迭代的对象: 3 打印可迭代的对象: 4 打印可迭代的对象: 5 打印可迭代的对象: 6 打印可迭代的对象: 7 打印可迭代的对象: 8 打印可迭代的对象: 9 打印可迭代的对象: 10完成10次循环后,会触发StopIteration结束迭代。如果我们需要打印10以内的偶数,可以做一个判断,也就能根据我们的需要,打印指定的数据,这就是迭代器的好处。
#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
def wulaoer():
yield 1
yield 2
yield 3
wolf = wulaoer()
print("生成器函数",wolf)
print("打印生成器第一次返回值",wolf.__next__())
print("打印生成器第二次返回值",wolf.__next__())
输出结果:
生成器函数 <generator object wulaoer at 0x1013859e8> 打印生成器第一次返回值 1 打印生成器第二次返回值 2生成器函数中一般包含一个或多个yield,当调用生成器函数时,函数将返回一个对象,但是不回立刻向下执行,像__iter__()和__next__()方法等是自动实现的,所以我嘛可以通过next()方法对对象进行迭代,一旦函数被yield,函数回被暂停,控制权繁华调用者,局部变量和它们的状态会被爆出,直到下一次调用,函数终止的时候,StopIteraion会被自动抛出。下面看生成器的表达式:
#!/usr/bin/python3
#coding:utf-8
#~~~~~~~~~~~~www.wulaoer.org 吴老二个人博客~~~~~~~
egg_list=[]
for i in range(10):
egg_list.append('devops%s' %i)
print(egg_list)
# 使用三元表达式替换如上代码
l=['devops%s' %i for i in range(10)]
print(l)
l1=['devops%s' %i for i in range(10) if i > 5 ]
print(l1)
l3=['devops%s' %i for i in range(10) if i < 5]
print(l3)
输出结果:
['devops0', 'devops1', 'devops2', 'devops3', 'devops4', 'devops5', 'devops6', 'devops7', 'devops8', 'devops9'] ['devops0', 'devops1', 'devops2', 'devops3', 'devops4', 'devops5', 'devops6', 'devops7', 'devops8', 'devops9'] ['devops6', 'devops7', 'devops8', 'devops9'] ['devops0', 'devops1', 'devops2', 'devops3', 'devops4']下面看看生成器和迭代器的区别: 1、语法方面来讲: 生成器是用函数中yield语句来创建的。迭代器的创建首先跟函数无关,可以用iter([1,2])来创建。 2、使用方面来讲: 由于生成器是使用函数的方式创建的,所以生成器里面的所有过程都会被执行,但请注意生成器里面的过程只有在被next()调用或者for循环调用时,里面的过程才会被执行,如同上面的例子只是单纯调用add这个对象时,add里面的过程没有被执行哦 迭代器同样可以被for和next调用但是由于没有其他过程,在被调用时只会返回值,不会有其他动作
评论 0