百度飞桨领航团零基础Python速成营学习心得
组织说4756 发布于2021-02 浏览:1216 回复:0
0
收藏
最后编辑于2022-04

课程链接:https://aistudio.baidu.com/aistudio/course/introduce/7073

通过上面的课程的学习,从中收获了不少心得,以下是我总结的一些心得,希望对大家学习Python3有所帮助

温馨提示:

               本课程是通过网页的Notebook进行学习Python3的,目前Notebook Python版本是3.7.4

               若要在本地进行开发,建议使用anaconda3 +  Pycharm 的组合比较友好,其原因是Python本体版本各个库之间存在兼容性冲突的问题,而anaconda3会进行版本兼容性进行调整,避免这种开发困扰。这两个东西是要安装在本地,课程中会提到。

python是一个工具 需要

练习!练习!练习!

应用!应用!应用!

1.手敲代码

2.理解后独立复现

3.学会找BUG、找BUG

正文

Python 作为一门高级的编程语言却与其他编程语言来说入门是简单的,其三大特点就是

  1. 代码量少
  2. 易于理解
  3. 拓展性强(第三方库多)

Python标识符

  • 由英文字母、下划线和数字组成,其余字符不行
  • 开头字符不能是数字
  • 区分英文字母大小写

Python的关键字

注意:前三个是首字母要大写,其余是小写的

Python运算符

Python基本类型

Python在写变量时是不用声明变量类型的,会自动识别对于的基本类型

              举个列子: a = 0

基本数字类型

容量大小分布(优先级):bool(布尔)< int(整型) < float(浮点) < complex(复数)

字符串类型

str

基本容器类型——可以存储各种类型数据

 

Python的基本类型是可以相互转化的,通过以下格式

  • 基本类型()   如str()

值得注意的是:将字符串转换为数字类型,需要先转换成对应最高级别数字类型

举个例子:

num = '1.6'
num = float(num)
num = int(num)

若直接转换成int会报错的

Python的注释

  • #用于单行注释
  • '''

    用一对三个单引号(''')用于多行注释

    '''

Pythont条件判断和循环

注意是半角的冒号(:)和缩进

判断:

  • if and/or语句:
  • elif and/or语句:
  • else:

循环

while and/or语句:

for ... in ... :

else:

循环中常用的关键字有continue,break,pass

 

Python常用内置函数:

  • id():获取对象的内存地址或者说是识别码
  • help():帮助函数,其内容可以是类型也可以是函数名
  • print():打印函数
  • len():获取数据长度
  • range():范围函数 range(start, stop[, step]) 其中stop必填,默认从0开始
  • input():输入函数
  • ...

字符串进阶

索引
       索引支持双向索引(正向递增;反向递减)

     

切片
       字符串[start: end: step] 

注意是左闭右开

以下是str常用的函数

find() 查找功能
         返回从左第一个指定字符的索引,找不到返回-1

count() 计数功能
         无重复从0开始计数对应字符串,找不到会返回0

index() 查找
         返回从左第一个指定字符的索引,找不到报错

split() 字符串的拆分
        按照指定的内容进行分割,缺省时按空格切分成list的多个字符串片,已经去除空字符即('')

        也可以按其他切割符号分割,还可以指定切割次数

replace() 字符串的替换
        从左到右替换指定的元素,可以指定替换的个数,默认全部替换

strip 字符串标准化
        默认去除两边的空格、换行符之类的,去除内容可以指定

upper、lower、capitalize字符串的变形
       upper 英文全大写

       lower 英文全小写

       capitalize 英文首字母大写

字符串的格式化输出
name = 'Molly'

hight = 170.4

score_math = 95

score_english = 89

#C语言风格——适合老程序员(无苦入门)

print('大家好!我叫%s,我的身高是%d cm, 数学成绩%d分,英语成绩%d分' % (name, hight, score_math, score_english))

#python3,6之前的格式化风格

print('大家好!我叫{:s},我的身高是{:d} cm, 数学成绩{:d}分,英语成绩{}分'.format(name, int(hight), score_math, score_english))

#python3.6之后新增的可读性最强的风格(推荐萌新掌握)

print(f"大家好!我叫{name},我的身高是{int(hight)} cm, 数学成绩{score_math}分,英语成绩{score_english}分")

注意 f  别忘啦

list进阶

list索引、切片、count 计数 、 index查找
操作与字符串一样

添加新元素

  1. append(value)——末尾添加元素
  2. insert(index,value)——在指定位置添加元素,如果指定的下标不存在,那么就是在末尾添加
  3. list1.extend(list2) ——合并两个list

删除元素
            pop() 默认弹出删除末尾的元素,也可输入参数弹出指定位置的元素

            remove() 指定删除元素

列表生成式
            通过一个list简洁地衍生出所需的list

            […for…]

1.通过基于for表达式

            list1 = ['a','b','a','d','a','f']

            [f'app_{n}' for n in range(10)]

2.再由if进行list过滤

            list_1 = [1,2,3,4,5]

            [n for n in list_1 if n%2==0]

3.双重循环(可忽略,几乎用不到)

生成器(适用大数据)
            通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

第一种方法:类似列表生成式
            (…for…)

            g = (x * x for x in range(10))

next(g)

第二种方法:基于函数
def factor(form):

yield

函数

      是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

函数是支持多个返回值的,返回类型是 tuple 元组

可用 x,y = f(x) 来获取相应返回值——这和元组赋值是一致的即 x,y  = (1,2)

参数传递

函数的参数分这五类:位置参数,缺省参数,可变参数,关键字参数,命名关键字参数
位置参数 a,b
           位置参数是最简单的一种函数调用的方式。位置参数须以正确的顺序传入函数、数量必须和声明时的一样。

缺省参数 =default
           调用函数时,缺省参数的值如果没有传入,则被认为是默认值。

可变参数 *x
           可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。

           可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple(元组)。

关键字参数 **x
           关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict(字典)。

命名关键字参数 *,x,y
           如果要限制关键字参数的名字,就可以用命名关键字参数

           规范限定参数,更新API时检查错误使用!

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。

但是请注意,参数定义的顺序必须是:位置参数、缺省(默认)参数、可变参数、命名关键字参数和关键字参数。

PS:建议不要多组合

lambda匿名函数

lambda 只是一个表达式,函数体比 def 简单很多。

lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。

lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

举个例子:add = lambda arg1, arg2: arg1 + arg2

高阶函数

map / reduce
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

 

reduce: 用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,依此类推,最后得到一个结果。

from functools import reduce
# 从python3开始,reduce函数移动到了functools这个包,每次使用前要先import
 

排序函数sorted

排序也是在程序中经常用到的算法。无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小。如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的,因此,比较的过程必须通过函数抽象出来。默认是从小到大排列,可以通过reserve参数(布尔型)改变排列

装饰器
函数可以作为返回值!!

装饰器最大的优势是用于解决重复性的操作,其主要使用的场景有如下几个:

  • 计算函数运行时间
  • 给函数打日志
  • 类型检查

当然,如果遇到其他重复操作的场景也可以类比使用装饰器

def print_working(func):
    def wrapper():
        print(f'{func.__name__} is working...')
        func()
    return wrapper
@print_working
def worker1():
    print('我是一个勤劳的工作者!')

 

通过语法糖@装饰器名可以简单的调用

闭包
python中的闭包从表现形式上定义(解释)为:如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包(closure).

返回闭包时牢记一点:返回函数不要引用任何循环变量,或者后续会发生变化的变量。

偏函数
通过设定参数的默认值,降低函数调用的难度

from functools import partial

f_n = partial(x,y,z=default)

模块导入

import numpy as np

import pandas as pd

安装/卸载第三方模块

pip install / uninstall
conda install / uninstall

为了创建数据和函数的直接联系,利于维护代码就引入类的概念

构造方法、实例化、类属性、类方法、私有化

创建一个类
格式如下:

class 类名:

   def  __init__(self):   

      #类体

      …

其中,__init__是构造方法,用于初始化成员变量

其余的可以是实例方法、类方法

方法的定义参数的规则和函数是一致的只不过前面要加上self,

实例化
         对象名 = 类名(参数) #self是不写的

类方法

         方法定义时,使用@classmethod标记

调用:

         类名.类方法

         对象.类方法

私用的属性和方法

         在属性和方法名前加 __ 两个下划线

继承
创造一个具有原先存在类的所有内容的类

我们将原来的类称作父类,继承下来的类成为子类

定义
class 子类名(父类名):

①子类新增属性,需写__init__构造方法,调用父类__init__即:

class Father:
    def __init__(self,x,y):
        self.x = x
        self.y = y
class Child(Father):
    def __init__(self,x,y,z):
        Athlete.__init__(self,x,y)
        self.z = z

②子类没有新增属性可省略构造方法

使用:
对象名 = 子类名(参数)

继承的好处:
代码重用,升级功能(重写),新增功能(新的方法)

重写
子类方法与父类方法完全相同,子类若重写了父类的方法,则子类对象调用方法时就是调用的自己类中重新的方法。

多继承
python是支持有多个父类

注意:多个父类有相同的属性或方法名,这种情况应该避免

收藏
点赞
0
个赞
TOP
切换版块