集合&函数上
- 1.集合(set)
- 1.1.集合简介
- 2.函数上
- 2.1.函数简介
- 2.2 函数的参数
- 2.2.1 必须参数(位置参数)
- 2.2.2 关键字参数
- 2.2.3.默认参数
- 2.2.4.可变参数(不定长参数)
- 2.3.参数传递类型
- 2.3.参数的拆包
- 3.作业
- 3.1.第一题
- 3.2.第二题
- 3.3.第三题
1.集合(set)
1.1.集合简介
• 集合表现形式set 集合和列表非常相似;集合数据类型属于Python内置的数据类型,但不被重视,在很多书籍中甚至都看不到一点介绍。其实,集合是一种非常有用的数据结构,它的去重和集合运算是其它内置类型都不具备的功能,在很多场合有着非常重要的作用,比如网络爬虫。
- 没有索引和切片这一说。
- 有成员资格判断in。
• 不同点
• 集合只能存储不可变对象
s1 = {1, 'abc', [1, 2, 3]}
print(s1, type(s1))
s1 = {1, 'abc', [1, 2, 3]}
TypeError: unhashable type: 'list'
• 集合中存储的对象是无序的
s2 = {6, 8, 9, 10}
print(s2)
{8, 9, 10, 6}
• 集合不能出现重复元素
- 定义集合的时候需要注意:如果是空集合,必须使用set()定义,如果包含元素,可以使用花括号定义。
s = {}# s是空字典,不是空集合
- 集合不能出现重复元素 通过这一特性,我们可以来做一个数据去重的效果
s3 = {1, 2, 3, 4, 1, 2, 3, 4}
print(s3)
list1 = [1, 1, 2, 3, 3]
s4 = set(list1)#列表去重
print(s4)
{1,2,3,4}
{1,2,3}
- 强制类型转换
1.字典转换成集合(但是集合不能转换成字典)
dict1 = {'1':'2'}
print(set(dict1))
s = set() # 可以用于强制类型转换
print(s,type(s))
{'1'}
set() <class 'set'>
2.列表互转集合,字符串互转集合。
s = set([1,2,3,1,2,3,4]) # 创建集合,去重
print(s)
s1 = set("hello world") # 创建集合,去重
print(s1)
s2 = set(123) # 注意,需要传入可迭代的对象,而int类型的123并不是,所以报错
print(s2)
lst = list({1, 2, 3, 4})
print(lst)
string = str({'h', 'd', 'o', ' ', 'e', 'l', 'r', 'w'})
print(string[0])
{1, 2, 3, 4}
{'h', 'd', 'o', ' ', 'e', 'l', 'r', 'w'}
TypeError: 'int' object is not iterable
[1, 2, 3, 4]
{
3.总之使用set()强制类型转换,必须是set(iterable)。
- len() 使用len()来获取集合中元素的数量
- 变量名.add()像集合中添加元素
add()像集合中添加元素
s = set()
s.add(1)
s.add(2)
print(s)
- update()将一个集合中的元素添加到另一个集合当中
s1 = {1, 2, 3}
s2 = {4, 5, 6}
s1.update(s2)
print(s1)
s = set([1,2,3,4,5])
s.update("hello") # 将hello拆开放入集合,仍然去重
print(s)
{1, 2, 3, 4, 5, 6}
{1, 2, 3, 4, 5, 'h', 'o', 'e', 'l'}
- pop()随机删除集合中的一个元素一般是删除最开始一个元素,返回删除的元素
s1.pop()
s1.pop()
s1.pop()
s1.pop()
print(s1)
- remove() 删除集合中指定的元素,无返回值
s1.remove(1)
print(s1)
- clear() 清空集合
s1.clear()
print(s1)
set()
- 需要注意的是,集合不能取出某个元素,因为集合既不支持下标索引也不支持字典那样的通过键值对获取。
s1 = {1, 2, 3, 7, 8}
s2 = {4, 5, 6, 7, 8}
# & 交集运算
s3 = s1 & s2
print(s3)
# | 并集运算
s4 = s1 | s2
print(s4)
# - 差集运算
s5 = s1 - s2
print(s5)
# ^ 亦或集
s6 = s1 ^ s2
print(s6)
{8, 7}
{1, 2, 3, 4, 5, 6, 7, 8}
{1, 2, 3}
{1, 2, 3, 4, 5, 6}
- <= 检查一个集合是否是另一个集合的子集
< 检查一个集合是否是另一个集合的真子集
'>='检查一个集合是否是另一个集合的超集
'>'检查一个集合是否是另一个集合的真超集 - 可变类型 :列表 字典 集合 里面的元素改变了,但是他的id还是不会变化
不可变类型 : int float 字符串 元组 里面的元素改变了,那么他的id也就发生了变化
str1 = 'abc'
print(id(str1))
str2 = str1.replace('a', 'b')
print(id(str2))
list1 = [1, 2, 3, 4]
print(id(list1))
list1.remove(4)
print(id(list1))
a = 'abc'
print(id(a))
a = 'bcd'
print(id(a))
2.函数上
2.1.函数简介
- 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
- 函数的作用就是把相对独立的某个功能抽象出来,是之成为一个独立的实体
- 函数的定义
def 函数名(参数1,参数2,......):
function body#缩进四个空格
return value#函数执行完成后返回的值,也可以不返回任何内容,可视为返回“None”
- 注意:
函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头),函数名区分大小写
print是函数对象 print()是调用函数
2.2 函数的参数
- 参数类型:1:必须参数。2:关键字参数。3:默认参数。4:可变参数。5:组合参数。
- 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参 - 在 python 中,类型属于对象,对象有不同类型的区分,变量是没有类型的,变量可以看成是对对象的引用或者是指向对象的指针。但是记住,Python中没有引用和指针的概念。下面代码的a是变量。而[1, 2, 3, 4]是list对象,‘asds’是str对象。
- Python中一切皆对象,在传递参数时我们应该说是传可变对象(list, dict)还是传不可变对象(str, tuple, number(数值类型))
a = [1, 2, 3, 4]
a = 'asds'
2.2.1 必须参数(位置参数)
- 函数定义的参数调用时必须传入,并且在调用的时候,实参数量和顺序必须和形参保持一致,少传多传都会报错
2.2.2 关键字参数
- 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递 python解释器能够根据函数定义时的参数名来匹配参数。
- 注意:不能传入没有定义的参数。
def fun2(a, b, c):
print(a)
print(b)
print(c)
fun2(b=1, a=2, c=3)
- 混合使用 位置传参必须放到关键字传参的前面
def fun2(a, b, c):
print(a)
print(b)
print(c)
fun2(2, c=1, b=2)
2.2.3.默认参数
- 在定义函数时,可以给参数添加默认值,如果调用函数时没有传入参数,函数就会使用默认值,不会像必须参数报错。非默认参数不能跟在默认参数之后。如果有许多地方调用函数,但是部分参数的值又相同,默认参数就非常有用了。
2.2.4.可变参数(不定长参数)
def fun(*a):
print(*a,'\n',a)
fun(1, 2, 3,)
1 2 3
(1, 2, 3)
- *args:元组方式存储。参数获取到的是一个元组。接收必须参数(位置参数)
- *kwargs:字典方式存储。参数获取到的是一个字典。 调用函数时必须使用关键字参数的方式传递参数
- 可变参数(不定长参数)*args必须放在必须参数(位置参数)后面 。否则会报错 ,放到关键字参数前面。
- **kwargs放到必须参数(位置参数)和关键字参数后面。
- 不定长参数只能存在一个,‘’和‘**’ 可以同时存在,但‘’必须放在‘**’ 号之前
2.3.参数传递类型
- 可以传递任何类型
2.3.参数的拆包
#索引方式
def fun(a, b, c):
print(a)
print(b)
print(c)
t = (4, 5, 6)
fun(t[0], t[1], t[2])
#*args方式
fun(*t)
t = {'a':1, 'c':2, 'b':3}
fun(**t)#拆出来的是value值
3.作业
3.1.第一题
def mp(a, b, c):
print("姓名:%s"%a,'\n'
'电话号码:%s'%b,'\n'
'性别:%s'%c)
print( )
print()
print("""
"请按照要求输入信息:"
"控制姓名长度为6-20"
" 电话号码长度11"
"性别只能允许输入男或女"
"每一样信息不允许为空"
""")
name = input("请输入姓名:")
while len(name)<6 or len(name)>20 or name == ' ':
name = input("名字格式错误,请重新输入:")
number = input("请输入电话号码:")
while len(number) != 11 or number == " ":
number = eval(input("请重新输入电话号码:"))
sex = input("性别:")
while sex == " ":
sex = input("请输入性别:")
mp(name, number, sex)
3.2.第二题
def fun(i, n, count):
while count <=20:
result = i + n
print(result, end = ' ')
count+=1
if count%5 == 0:
print('\n')
i = n
n = result
fun(i = 1,n = 0,count = 1)
3.3.第三题
def add(count,sum):
while count<=100:
sum += count
count += 1
print(sum)
sum = 0
count = 1
add(count,sum)