集合&函数初识

  • 1.集合
  • 1.1 集合简介
  • 1.3 集合的使用
  • 1.2 集合的运算
  • 2. 函数简介
  • 3. 函数的参数
  • 3.1 形参和实参
  • 3.2 函数的传递方式
  • 4. 不定长参数
  • 5. 参数的解包


1.集合

1.1 集合简介

  • 集合表现形式set 集合和列表非常相似
  • 不同点
  • 集合只能存储不可变对象
  • 集合中存储的对象是无序的
  • 集合不能出现重复元素
  • 使用{}来创建集合
  • 可以通过set()来将序列和字典转换成集合
  • len() 使用len()来获取集合中元素的数量
  • add()像集合中添加元素
  • update()将一个集合中的元素添加到另一个集合当中
  • pop()随机删除集合中的一个元素一般是删除最后一个元素
  • remove() 删除集合中指定的元素
  • clear() 清空集合
# set()函数可以创建集合
# 可以通过set()函数将序列转换为集合
s = set([1,2,3,4,2,2,3,1])
s = set('python')
s = set({'a':1,'b':2}) # 使用set()函数将字典转换为集合时,只包含字典的keys(键)
#
print(s,type(s))

# 创建一个集合
s = {'a','b',1,2,3}
print(s,type(s))
print(s[0]) # TypeError: 'set' object does not support indexing
print(list(s)[0])

1.3 集合的使用

# 创建一个集合
s = {'a','b',1,2,3}
# in 和 not in来检查集合中的元素
print('b' in s)
# len() 获取集合的长度或者元素的数量
print(len(s))
#
# add() 向集合中添加元素
s.add(20)
s.add(50)
#
# update() 将一个集合中的元素添加到当前的集合中
s2 = set('hello')
s.update(s2)
#
#  pop() 随机删除集合中的一个元素 返回值(删除的元素)
{1, 2, 3, 'b', 'l', 50, 'e', 20, 'h', 'a', 'o'}
result = s.pop()
print(result)
#
# remove() 删除集合中指定的元素
s.remove(20)
#
# clear() 清空集合
s.clear()
print(s)

1.2 集合的运算

  • & 交集运算
  • | 并集运算
  • 差集运算
  • ^ 亦或集
  • <= 检查一个集合是否是另一个集合的子集
  • < 检查一个集合是否是另一个集合的真子集
  • >=检查一个集合是否是另一个集合的超集
  • >检查一个集合是否是另一个集合的真超集

2. 函数简介

  • 函数也是一个对象
  • 函数用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次调用
语法
def 函数名([形参1,形参2,形参3....]):
    代码块

注意:
函数名必须符合标识符的规范(可以包含字母、数字、下划线但是不能以数字开头)
print是函数对象 print()是调用函数

# 定义一个函数
# 函数中保存的代码不会立即执行,需要调用函数代码才会执行
def fn():
    print('hahah')
    print('heiheihei')
    print('hello')
print(fn)
print print()

# fn()
# fn()
# fn是函数对象 fn()调用函数

3. 函数的参数

3.1 形参和实参

  • 形参(形式参数) 定义形参就相当于在函数内部声明了变量,但是并不是赋值
  • 实参(实际参数)指定了形参,那么在调用函数时必须传递实参,实参将会赋值给对应的形参,简单来说有几个形参就要有几个实参

3.2 函数的传递方式

  • 定义形参时,可以为形参指定默认值。指定了默认值以后,如果用户传递了参数则默认值不会生效。如果用户没有传递,则默认值就会生效
  • 位置参数:位置参数就是将对应位置的实参赋值给对应位置的形参
  • 关键字参数 : 关键字参数可以不按照形参定义的顺序去传递,而根据参数名进行传递
  • 混合使用位置参数和关键字参数的时候必须将位置参数写到关键字参数前面去
# 定义形参时,可以为形参指定默认值
# 指定了默认值以后,如果用户传递了参数默认值不会生效
# 如果用户没有传递参数,默认值则生效
def fn(a = 5,b =10,c=20):
    print('a =',a)
    print('b =',b)
    print('c =',c)
fn(1,2)
fn(1,2,3)
fn(b=1,c=2,a=3)
# 位置参数和关键字参数可以混合使用
fn(2,c=50)
fn(c=60,1) # SyntaxError: positional argument follows keyword argument
import requests
headers = {}
response = requests.get(headers=headers,'xxxxxx')

4. 不定长参数

  • 定义函数时,可以在形参前面加一个*,这样这个形参可以获取到所有的实参,它会将所有的实参保存到一个元组中
  • 带*号的形参只能有一个,可以和其他参数配合使用
  • *形参只能接受位置参数,不能接受关键字参数
  • **形参可以接收其他的关键字参数,它会将这些参数统一保存到字典当中。字典的key就是参数的名字,字典的value就是参数的值
  • **形参只有一个,并且必须写在所有参数的后面
# *a 处理的是位置参数 **a 是处理的是关键字参数
def fn3(**a):
    print('a =', a)
fn3(b=2,d=1,c=3)

5. 参数的解包

  • 传递实参时,也可以在序列类型的参数前添加星号,这样它会自动的将序列中元素依次作为参数传递
  • 要求序列中的元素的个数必须和形参的个数一致
def fn(a,b,c):
    print('a =', a)
    print('b =', b)
    print('c =', c)

# 创建一个元组
t = (20,30,40,50)
# 传递实参时候,也可以在序列类型的参数前面添加*号,这样它会自动的将序列三种的元素依次作为参数传递

# 创建一个字典
# 可以通过**来对字典进行解包
d = {'a':1,'b':2,'c':3}
fn(**d)