python入门基础之集合+函数+拆包+引用+容错


小白自用笔记,文章参考于
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')

猜你喜欢

转载自blog.csdn.net/qq_46126258/article/details/107450416