文章目录
小白自用笔记,文章参考于
https://blog.csdn.net/qq_46126118/article/details/107382073
https://blog.csdn.net/qq_46126118/article/details/107397253
【1】集合
(1)集合没有顺序(无序性),所以不支持下标
(2)集合不可重复性,所以重复的只取一次
(1)创建集合
创建集合使用{} 或 set(),如果要创建空集合只能使用 set(),因为{}用来创建字典
#无序
s1={10,20,30,40,50}
print(s1) #{40, 10, 50, 20, 30}
#不重复
s2={10,20,30,40,10,20}
print(s2) #{40, 10, 20, 30}
s3={'abcabc'}
print(s3) #{'abcabc'}
s4=set()
print(type(s4)) #<class 'set'>
s5={}
print(type(s5)) #<class 'dict'>
(2)查找数据
print(2 in s1)
print(2 not in s1)
#True
#False
(3)增加数据
当向集合内追加数据是已有的数据,则不进行任何操作。
如果追加的是一个列表,或者集合会报错
1.单个添加
s={1,2,3,4}
s.add(3.3)
print(s)
#或
print(s.add(10))
#{1,2,3,4}
2.成组添加
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s1.update(s2)
print(s1)
#{1, 2, 3, 4, 5, 6}
(4)删除数据
根据值删除指定数据
s1 = {1,2,3,4}
s1.remove(2)
print(s1)
#{1, 3, 4}不存在则报错
s1.discard(2)
print(s1)
#不存在则不报错、不做修改
随机删除集合中的数据,返回删除的值
num = s1.pop()
print(f'{s1},num={num}')
#{2, 3, 4},num=1
【2】函数
函数名(参数)
不同的需求,参数可有可无.
在Python中,函数必须先定义后使用
(1)定义函数
1.带参函数
可以用关键字参数控制顺序
注意:函数调用时,如果有位置参数时,位置参数必修在关键字参数的前面,但关键字参数之间不存在先后顺序
def greet_user(first_name,last_name):
print(f'Hi {first_name} {last_name}')
print("welcome aboard!")
greet_user("john","Smith")
#可以用关键字参数控制顺序
greet_user(last_name="Smith",first_name="John")
greet_user(first_name="John","Smith")
'''
三种方法运行结果相同
Hi john Smith
welcome aboard!
'''
缺省参数
缺省参数也为默认参数.用于定义函数,为参数提供默认值。调用函数时可不传该默认参数的值
(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
def user_info(name, age ,gender='man'):
print(f'你的名字是{name},年龄是{age},性别是{gender}')
user_info('TOM',12)
user_info('lily',gender='woman',age=18)
# 你的名字是TOM,年龄是12,性别是man
# 你的名字是lily,年龄是18,性别是woman
不定长参数
不定长参数也叫可变参数。用于不确定调用的时候会传递多少个参数的场景。此时,可以用包裹位置参数或者包裹关键字参数,来进行参数传递.
&包裹位置传递
包裹位置传递:传进的所有参数都会被args变量收集,他会根据传进参数的位置合并为一个元组(tuple),args是元组类型
def user_info(*args):
print(args)
user_info('TOM')
user_info('TOM',18)
user_info()
# ('TOM',)
# ('TOM', 18)
# ()
&包裹关键字传递
根据传递的关键字生成一个字典
def user_info(**kwargs):
print(kwargs)
user_info(age=10,age1=20)
user_info(age=10,age1=20,age2=30)
user_info()
# {'age': 10, 'age1': 20}
# {'age': 10, 'age1': 20, 'age2': 30}
# {}
所以:无论是包裹位置传递还是包裹关键字传递,都是一个组包的过程
2.返回值函数
返回单个数 / 多个数
#单个
def square(number):
return number * number
number = int (input("Please enter a number: "))
print(square(number))
#多个返回值的默认结果为元组
def num():
return 1,2
#(1, 2)
返回列表、元组、字典
def test1():
return [10,20]
num = test1()
print(num)
# [10, 20]
def test2():
return {'age':10,'age1':20}
num = test2()
print(num)
# {'age': 10, 'age1': 20}
习题:输入name、age、sex存入字典并输出
def input_student(dict):
name = input('Name :')
age = input('Age :')
sex = input('Sex :')
dict = {
'name': name,
'age ': age,
'sex' : sex
}
return dict
dict = {}
dict = input_student(dict)
print(dict)
'''
运行结果如下:
Name :xiaoming
Age :19
Sex :male
{'name': 'xiaoming', 'age ': '19', 'sex': 'male'}
'''
3.全局变量的使用
引申:如直接在函数内直接对全局变量进行修改会报错:UnboundLocalError: local variable ‘a’ referenced before assignment
a = 100
def test2():
a*=2
print(a)
test2()
正确修改方法需要用到global,如下
a = 1
def test1():
global a
a = 2
test1()
print(a)
4.函数嵌套定义
a = 1
def plus():
global a
a +=10
def mul():
global a
plus()
a *=10
mul()
print(a)
(2)函数递归
习题:求1-10的加和
def add(num):
if num == 1:
return 1
else:
s = add(num-1)
return num+s
print(add(10))
(3)函数的说明文档
当代码量大时,不容易找到函数功能的注释,此时想要更方便地看到某函数的功能则可以使用 “函数的说明文档”
1.使用方法
help(add_sum)def add_sum(a,b):
'''
:param a: 被求和数1
:param b: 被求和数2
:return a+b: 返回加和
'''
return a+b
print(add_sum(3,4))
help(add_sum)
或
def add_sum(a,b):
"""求和函数"""
return a+b
help(add_sum)
2.使用效果即输出
Help on function add_sum in module __main__:
add_sum(a, b)
:param a: 被求和数1
:param b: 被求和数2
:return a+b: 返回加和
或
Help on function add_sum in module __main__:
add_sum(a, b)
求和函数
3.使用提示
打出’’’ ‘’'后自动出现斜体的,可以根据自己的需求进行下一步更改
:param a:
:param b:
:return :
【3】拆包
(1)元组拆包
def user_info():
return 100,200
num1,num2=user_info()
print(num1,num2)
# 100 200
num3=user_info()
print(num3)
# (100 200)
(2)字典拆包
字典拆出来的是key
dict1={'name':'TOM','age':18}
a,b = dict1
print(a) # name
print(b) # age
print(dict1[a]) # TOM
print(dict1[b]) # 18
(3)交换变量
a,b=1,2
a,b=b,a
print(f'a={a},b={b}')
# a=2,b=1
【4】引用
用id()来判断两个变量是否为同一个值的引用,id可以理解为变量的内存地址
a=1
b=a
print(b) # 1
print(id(a)) # 140718001362592
print(id(b)) # 140718001362592
a=2
print(id(a)) # 140718001362624
可变与不可变类型:数据能够进行修改,如果直接修改就是可变,否则不可变
【1】可变类型:列表,字典,集合
【2】不可变类型:整型,浮点型,字符串,元组
def test1(a):
print(a)# 100
print(id(a))# 140717869441792
a+=a
print(a)# 200
print(id(a))# 140717869444992
b=100 # 整型不可变
test1(b)
c=[11,22] # 列表可变
test1(c)
# [11, 22]# 2181930548096
# [11, 22, 11, 22] # 2181930548096
列表进行添加后,首地址未发生变化
【5】容错处理
try:
age = int (input('Age: '))
income = 20000
risk = income / age
print(age)
except ZeroDivisionError:
print('Age cannot be 0')
except ValueError:
print('Invalid value')