python集合&函数上

在这里插入图片描述

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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值