• Python 学习笔记(更新中)


    Python 学习笔记

    温故而知新,可以为师矣。
    在之前的学习和工作中,很多零碎的知识拼凑起来的,知识体系不完整,因此重新复习一次python,加深对该工具的理解。笔记仅记录一些python的知识与方法,而不包含具体的实现方式。根据这些知识和方法,可以帮助我们了解python能够完成什么任务。如果需要代码,可以根据这些知识点去百度或者谷歌去找到相应的实现方式。或者查看全套教学视频的链接:
    https://www.bilibili.com/video/BV1rN4y1F7AU?p=1&vd_source=e13ed5ec556f20f3f3c29fffcc596924

    input

    提示输入一个字符串,然后继续运行程序。

    列表

    列表的切片取值:

    通过索引可以取到任意一个值或者几个值。
    可以正向取,也可以反向取。
    可以间隔取值(步长)。

    del $ append 删除和增加

    定义的列表可以删除,使用del方法。如已经定义了一个列表a=[], 通过del a可以直接删除a。此时如果打印a,会报错,显示a未定义。

    此外,del a[xxx],xxx表示索引,通过该方法可以删除a中指定位置的元素。

    可以增加变量,append方法,该方法添加元素到列表的末尾。

    insert$ clear 插值和清空

    insert方法可以插入元素,在任意位置(参数1),插入多种形式的数据(参数2)。

    clear方法可以清空列表。创建列表之后,如果想清空,可以直接使用list.clear()方法。

    remove& pop

    remove可以移除列表指定内容的元素。默认移除第一次出现的元素。
    pop可以移除列表指定索引的元素。如果不给参数,默认移除列表中最后一个元素。pop可以返回值,返回值为移除的元素内容。

    index&reverse 索引和反向排列

    index()可以返回字符第一次出现的位置。参数2,和参数3可以表示起止索引。
    reverse可以反向排列列表中的元素。

    extend

    extend函数可以在列表后添加一个列表。但附加的列表会被拆开,而不是被当作一个整体被插入。效果相当于列表的加法,但是更加节省内存空间。

    extend如果后面添加一个字符串,则字符串会被拆开为单个字符,而不是被当作一个字符串被插入。

    copy

    copy用于创建列表的副本。通过等号复制给另一个变量。
    如list2 = list1.copy()。此时对list1操作不会影响list2的变量。但如果直接进行赋值操作,如list2 = list1,则如果对list1操作,list2也会变化。

    sort

    sort方法可以排序字符串,或数字。根据首字母,或者字符大小进行排序。字符串常见的排序规则是ASCII码,也就是0-9 不同类型的元素,无法进行排序。数字和数字排序,字符串和字符串进行排序,如果元素中混合数字和字符串,则报错。
    参数可选择reverse=Ture,则从大到小。

    count

    count用于统计元素在列表中出现的次数。如果没用出现过,则返回0.

    元组 Tuple

    元组也是一种数据容器,使用小括号表示。使用场景与列表相似。元组中的元素类型可以不统一。元组和列表不同之处是,元组的元素不可变。

    元组的拼接与更改

    元组和元组可以拼接。此外,元组中的元素无法更改,但是元组中的列表中的元素是可以更改的。

    元组的注意事项以及乘法

    元组中只出现一个数据时,需要在数据后面加逗号,否则,该变量不是元组。如 tuble = (10,)
    元组可以使用乘法,如
    tuble = (1,)
    tuble * 10 = (1, 1, 1 ,…1,1)共十个1.

    集合的创建

    set

    set()用于集合的创建,集合是无序的。set

    去重

    直接使用set函数可以实现去重。如a = set([1,1,2,1,2,2,1,1,])。则a = {1,2}。此时a的数据类型为set,可以通过list()转换为元组。
    也可以进行字符串的去重,元组的去重,字典键值的去重。

    集合添加元素的方法:add & update

    add函数可以往集合中添加元素,数字/字符串/元组 note:无法添加列表。
    update()方法可以合并两个集合。如set1.update(set2),则set1被改变,set2是不变的,set1合并了之前的set1和set2.

    remove & pop & discard

    remove 删除指定元素。元素不存在则报错。
    pop随机删除一个元素。
    discard 删除指定元素。元素不存在则不进行任何操作也不会报错。

    集合的交集和并集

    ‘&’符号连接多个集合,返回值为交集,
    ‘|’符号连接多个集合,返回并集。
    要知道set()本身就是去重的,所以,交集和并集不会存在相同元素。

    字典Dictionary

    字典是一种映射类型,元素为键值对。键为不可变类型,且不能重复。
    字典的创建可以直接使用dict()。或者用大括号{}
    注意:集合用大括号{},但是无法创建空集合。创建空集合用set(),创建空字典直接用大括号{}

    字典可以进行增删改查

    增加:增加键值可以直接使用 D[‘key_name’]=key_value. 可以增加关键字‘key_name’,值为key_value
    删除:直接使用del关键字, del D[‘key_name’]
    修改:直接选择相应键值,通过等号进行更改。D[‘key_name’] = new_value
    查询:直接D[‘key_name’]

    get$ keys

    get可以进行取值。D.get(‘key_name’) 如果没有返回None。# 个人感觉有点鸡肋。不知道有啥用。
    keys可以以列表的形式返回字典中所有的键的名字。

    items&values

    items可以返回所有键值对,以列表的形式
    values返回所有的值。

    clear©

    clear用于清空字典。
    copy用于副本的创建。可以与列表的copy方法进行对比。同样,修改原对象不会影响其副本。

    fromkeys & pop

    fromkeys()有两个参数,第一个参数是键,可以是一个列表,元组,集合。
    第二个参数是值,可以是任何类型的数据,作为每个键的值。
    pop函数可以移除指定的键值对。参数为键的名字。同时该函数会返回被删除的键的值,如果需要该键值,可以用变量进行接收。

    popitem & setdefault

    popitem自动删除最后一条键值对。返回值是被删除的键值对。(元组格式)。可以用变量接收。
    setdefault()可以添加一条键值对。如果该键已经存在,则无法添加。如果该键不存在,则添加。
    Note: 如果一个字典存在两个相同的键,则后一个键值会覆盖上一个键值。

    update

    update可以更新字典。可以用于字典的合并。如d1.update(d2)则将d2中的键值对,覆盖到d1中。也就是说,键存在的情况下,覆盖其键值,键不存在的话,则进行添加。

    关键字 in

    用于成员检测。使用in或者not in运算符来判断某个对象是否为序列的成员。
    in 判断对象是否存在与序列中(字符、列表、元组、字典(键))中。 存在返回true
    not in 判断对象是否不在与序列中(字符、列表、元组、字典(键))中。 不在返回true

    关键字 is & is not

    用于判断两个字符串或者数字或者元组是否相同。
    a is b 相同返回true
    a is not b 不相同返回true
    a和b是数字,字符串,元组。如果是列表,或者字典,或者集合,则不能用is进行判断是否相同。
    总结:数字,字符串,元组 表面一样,完全一样。
    列表,或者字典,或者集合 表面一样,其实不一样,不是同一个对象。

    流程控制if&for&while

    if…elif…else 语句

    用于判断条件是否满足。如果满足,则运行if内对语句。
    从上往下判断,满足一个时候,下面不再运行。if可以单独存在,elif可以有多个
    可以直接写if True: 直接执行 或者 if False: 直接跳过。

    for

    for 循环可以直接遍历序列。通过不使用下表的方式,实现对序列中每一个元素的访问。如 for i in …列表,元组,字符串,字典,集合。
    如果想遍历数字,使用range(N)函数。从0开始取,到N-1结束
    如果想遍历字典里的键和值,可以使用for i in dict.items():返回一个元组,包括键和值。

    range

    range可以设置步长。range()可以传不同参数,一个参数时,从0取到N-1,两个参数时,从N1取到N2-1,三个参数时,第三个参数是步长。

    while

    while用于循环。可以配合else使用。

    break&continue

    break语句可以跳出整个for或者while循环,运行for语句或者while语句的下一个代码块。
    continue只挑出当前这一次的循环剩余的语句。也就是说下面的语句不运行了,进行下一次循环。
    在这里需要注意一个问题是:如果你使用计数器,比如a=a+1,a+=1等,你要特别注意逻辑关系。如果不注意,可能会导致计数器失败。

    pass

    pass是空语句,为了保持结构的完整性而设计的占位语句。
    比如if …:后面你不想做任何事情,但不写东西会报错,就相当于占位一个语句,保持if语句的结构完整。

    查看数据类型与数据类型强制转换

    type

    type()返回变量类型。

    str

    str()强制将数字转换为字符串类型,也可以转换布尔值。直接将True转换为‘True’的字符串。将列表[1,2,3]转换为’[1,2,3]'。

    int &float

    int()强制转换为整型数字。也可以将纯数字的字符串转化为整型数字.小数的字符串无法转换,因为包含了点 ‘.’ 而且也无法用float强制转换。

    int 向下取整。如3.14 转换为3,-3.14转换为-3。可以转换布尔值。True=1, False=0
    float()强制转换为浮点型数字。

    bool

    bool可以强制转换其他类型为布尔值。
    当转换空列表、空字符串、空集合、空字典、空元组、0、0.0,为False
    其他转换为True

    list

    无法转数字类型,因为数字不是容器
    字符串转列表时,每一个字符当一个元素。
    元组转列表时,元组每一个元素当为字符串中的元素。
    字典转列表时,只保留字典的键。
    集合转列表时,保留每一个元素,然而会出现无序的情况,因为集合本身是无序的。

    tuple

    性质与list相同,可参考list的转换。(上一条)
    无法转数字类型,因为数字不是容器

    set

    与list和tuple相似,可参考list。然而,set本身是无序的,因此转换后,输出结果是无序的。

    dict

    无法转数字类型为字典,因为数字不是容器
    字符串无法转换为字典类型,因为字符串不是二级容器
    列表转字典时,列表必须是二级容器。而且子元素为2。如[[1,2],[3,4]]转换后,{1:2,3:4}.
    同理,元组转字典时,元组必须是二级容器。而且子元素为2。如((1,2),(3,4))转换后,{1:2,3:4}.
    集合不能转换为字典。

    isinstance

    判断变量是否为已知类型。比如:isinstance(‘abc’, str) 则会返回True

    函数

    def定义函数

    def后面定义一个函数名字,注意命名规则,与变量定义规则相同。最好不要起一些与系统函数相同的函数名,否则很容易引发错误。函数的参数可以自己定义,是否需要返回值也可以自己决定。不同的函数的参数的名字可以相同,不会互相影响。但同一个函数的多个参数,不要取相同的参数名。

    定义参数

    调用函数时,参数要与定义参数一一对应,否则会报错。传入的参数可以是任何的数据类型。

    默认参数

    默认参数是指定义时候,具有默认值的参数,对该函数调用时,可以不必给该参数传递值,而不会报错。默认参数最好使用不可变类型的数据(数字,布尔值,元组),否则多次调用,会存储上次调用时的值。

    关键字参数

    关键字参数是指调用时候,对指定的参数进行传值。推荐使用关键字传参。

    可变参数*args,**kargs

    可变参数使用定义。如 def func(p1, * args):
    则args是指可变参数,也就是说,对于 * args,可以传参数,也可以不传。当不传参数的时候,指向一个空元组,所有未匹配的参数,都会收集到这个空元组中。
    注意:args是习惯性拼写,你可以写 * b, * c都可以。只是写程序中,习惯使用
    args表示可变参数。
    ** kargs 两个星号* * 也可以表示可变参数,会指向一个空字典。既然是字典,那传的就是键值对。
    注意:** kargs是习惯性拼写,你可以写 ** b, ** c都可以。只是写程序中,习惯使用**kargs表示可变参数。必须使用关键字传递参数,其中,关键字与参数会转换为键和值。

    参数的解包

    使用*传递的参数可以进行解包。什么意思?举个例子:

    s='123'
    def func(a,b,c):
    	print(a,b,c)
    func(*s)
    
    • 1
    • 2
    • 3
    • 4

    此时可以打印出1,2,3。也就是说,字符串s中的三个元素,被自动拆解成三个参数。注意,s可以是字符串,元组,列表,字典,或集合。但是当s是字典时,一个星号*只能拆解出字符串的键,两个星号**s才可以将字典的键值都拆解。
    注意:使用两个星号进行字典的键值拆解时,要注意关键字参数的一个法则。也就是说,字典的键名,与参数的名字要一一对应。

    d = {"名字": 123, "b": 1,"c_":2,}
    def func(名字,b,c_):
    	print(名字,b,c_)
    func(**d)
    
    • 1
    • 2
    • 3
    • 4

    如果关键字与字典键名不对应,则会报错。这一点在写代码的时候,确实比较常用。尤其是参数众多的时候,一般使用字典来进行参数传递。

    参数解包和可变参数的配合使用

    通过可变参数进行穿参,然后再进行参数解包,来使用所传递的参数。

    d = {"名字": 123, "年龄": 18}
    def func(a,**kwargs):
        print(a)
        print(kwargs)
    func(1,**d)
    #打印:1
    #打印:{'名字': 123, '年龄': 18}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    参数的排列顺序
    1. 可变参数必须顶立在普通参数以及默认参数的后面
    2. 定义函数时,如果可变参数存在* args和 ** kwargs,则先写* args,再写**kwargs,
    3. **kwarg使用的是关键字传参,也就是说,不写变量名的可变参数,会传到*args里, 因为 * args指向一个空列表。写了变量名的可变参数,如 func(1,2,3,… ,name = ‘xxx’,age=xx),则name,age会转换为字典,存到 **kwargs里面。因为 ** kwargs指向一个空字典。
    4. 通常工程中用以下方式取参数:
    d = {"名字": 123, "年龄": 18}
    def func(**kwargs):
        for key, value in kwargs.items():
            print(key, value)
    func(**d)
    #名字 123
    #年龄 18
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    关键字Return

    函数的返回值可以用变量接收。如果函数没有reture,默认返回的是None。也就是说,拿变量接受时,变量接受了一个None。

    函数返回函数

    函数里面可以嵌套函数。函数的return也可以返回函数。如果返回函数的话,就是返回一个函数名,拿变量接受的就是这个函数。如果想调用的话,还需要重新调用这个函数。(目前还不知道有什么用)。

  • 相关阅读:
    leetcode_1402 做菜顺序
    Halo 开源项目学习(二):实体类与数据表
    学习笔记-Suricata
    MySQL到底有没有解决幻读问题?这篇文章彻底给你解答
    java计算机毕业设计河东街摊位管理系统源码+mysql数据库+系统+LW文档+部署
    SpringMVC 学习(九)之拦截器
    Hack The Box-Rebound-Insane
    Unity 热更--AssetBundle学习笔记 0.7
    Vue复习4:收集表单数据,过滤器,v-text,v-html,v-cloak,v-once,v-pre
    记一次阿里云日志导致的服务宕机
  • 原文地址:https://blog.csdn.net/Dongjiuqing/article/details/128182350