一、set()

set:类似dict,是一组key的集合,不存储value

本质:无序和无重复元素的集合

1.创建

#创建set需要一个list或者tuple或者dict作为输入集合
#重复元素在set中会自动被过滤
s1 = set([1,2,3,4,5,3,4,5])
print(s1)
s2 = set((1,2,3,3,2,1))
print(s2)
s3 = set({1:"good", 2:"nice"})
print(s3)

2.添加

s4 = set([1,2,3,4,5])
s4.add(6)
s4.add(3) #可以添加重复的,但是不会有效果
#s4.add([7,8,9]) #set的元素不能是列表,因为列表是可变的
s4.add((7,8,9))
#s4.add({1:"a"}) #set的元素不能是字典,因为字典是可变的
print(s4)

3.插入整个list、tuple、字符串,打碎插入

s5 = set([1,2,3,4,5])
s5.update([6,7,8])
s5.update((9,10))
s5.update("sunck")
print(s5)

4.删除

s6 = set([1,2,3,4,5])
s6.remove(3)
print(s6)

5.遍历

s7 = set([1,2,3,4,5])
for i in s7:
    print(i)
#set没有索引的
#print(s7[3])

for index, data in enumerate(s7):
    print(index, data)

s8 = set([1,2,3])
s9 = set([2,3,4])

6.交集

a1 = s8 & s9
print(a1)
print(type(a1))

7.并集

a2 = s8 | s9
print(a2)
print(type(a2))

二、类型转换

1.list去重复

l = [1,2,3,4,3,4,5,6]
'''
s = set(l)
l = list(s)
print(l)
'''

l = list(set(l))
print(l)

2.类型转换

(1)list–>set

l1 = [1,2,3,4,5,3,4,5]
s1 = set(l1)

(2)tuple–>set

t2 = (1,2,3,4,3,2)
s2 = set(t2)

(3)set–>list

s3 = {1,2,3,4}
l3 = list(s3)
print(l3)

(4)set–>tuple

s4 = {2,3,4,5}
t4 = tuple(s4)
print(t4)

三、迭代器

from  collections import Iterable
from  collections import Iterator

可迭代对象:可以直接作用于for循环的对象统称为可迭代对象(Iterable)。可以用isinstance()去判断一个对象是否是Iterable对象

可以直接作用于for的数据类型一般分两种

1、集合数据类型,如list、tuple、dict、set、string

2、是generator,包括生成器和带yield的generator function

print(isinstance([], Iterable))
print(isinstance((), Iterable))
print(isinstance({}, Iterable))
print(isinstance("", Iterable))
print(isinstance((x for x in range(10)), Iterable))
print(isinstance(1, Iterable))

迭代器:不但可以作用于for循环,还可以被next()函数不断调用并返回下一个值,直到最后跑出一个StopIteration错误表示无法继续返回下一个值

可以被next()函数调用并不断返回下一个值的对象称为迭代器(Iterator对象)

可以使用isinstance()函数判断一个对象是否是Iterator对象

print(isinstance([], Iterator))
print(isinstance((), Iterator))
print(isinstance({}, Iterator))
print(isinstance("", Iterator))
print(isinstance((x for x in range(10)), Iterator))


l = (x for x in [23,4,5,64,3435])
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
#print(next(l))

转成Iterator对象

a = iter([1,2,3,4,5])
print(next(a))
print(next(a))

print(isinstance(iter([]), Iterator))
print(isinstance(iter(()), Iterator))
print(isinstance(iter({}), Iterator))
print(isinstance(iter(''), Iterator))

四、函数概述

认识函数:在一个完整的项目中,某些功能会反复的使用。那么会将功能封装成函数,当我们要使用功能的时候直接调用函数即可

本质:函数就是对功能的封装

优点
1、简化代码结构,增加了代码的复用度(重复使用的程度)
2、如果想修改某些功能或者调试某个BUG,还需要修改对应的函数即可

1.定义函数:

格式:
def 函数名(参数列表):
语句
return 表达式

def:函数代码块以def关键字开始

函数名:遵循标识符规则

():是参数列表的开始和结束

参数列表(参数1,参数2,……,参数n):任何传入函数的参数和变量必须放在圆括号之间,用逗号分隔。函数从函数的调用者哪里获取的信息

冒号:函数内容(封装的功能)以冒号开始,并且缩进

语句:函数封装的功能

return:一般用于结束函数,并返回信息给函数的调用者

表达式:即为要返回给函数的调用者的信息,

注意:最后的return 表达式,可以不写,相当于return None

凯 = "帅"
print(凯)

函数的调用

格式:函数名(参数列表)

函数名:是要使用的功能的函数函数名字

参数列表:函数的调用者给函数传递的信息,如果没有参数,小括号也不能省略

函数调用的本质:实参给形参赋值的过程

五、定义了一个无参无返回值的函数

def myPrint():
    print("sunck is a very good man!")
    print("sunck is a nice man!")
    print("sunck is a handsome man!")
     
myPrint()
myPrint()
myPrint()
myPrint()
myPrint()

六、函数的参数

需求:编写一个函数,给函数一个字符串和一个年龄,在函数内部打印出来

形参(形式参数):定义函数时小括号中的变量,本质是变量

参数必须按顺序传递,个数目前要对应

def myPrint(str, age, hoby):
    print(str, age)

def myPrint(str, age):
    print(str, age)

实参(实际参数):调用函数时给函数传递的数据,本质是值

myPrint("sunck is a good man", 18)