首页 飞桨领航团 帖子详情
【AI达人养成营】Python入门笔记--Python基础
收藏
快速回复
飞桨领航团 文章AI达人创造营 905 0
【AI达人养成营】Python入门笔记--Python基础
收藏
快速回复
飞桨领航团 文章AI达人创造营 905 0

# 基础环境
## Python环境安装(Windows)
```
1. 直接官网下载: 需要手动安装需要的包
    地址:https://www.python.org/
    安装的时候注意勾选添加环境变量
2. 安装anaconda: 已打包好常用的包
    地址:https://www.anaconda.com/
    安装的时候注意勾选添加环境变量
3. 百度AI Studio: 可以在线用
    地址: https://aistudio.baidu.com/
```
---
## Python环境安装(Linux)
```
    Linux往往会自带Python环境,但要注意版本
    如果没有安装,可以通过软件源安装
    在终端里面,执行“python”会默认调用Python2.x,执行“python3”会调用安装的python3.x
```
---
## 手动安装需要的包
```
    例如:
    python -m pip install -U pip
    python -m pip install -U numpy
    python -m pip install -U matplotlib
    更新包:
    pip install --upgrade package_ name
    Linux环境,如果没有pip,可以手动安装:
    sudo apt install python3-pip
```
---
## Python编辑器
```
1. 交互式命令行
    启动终端,执行命令:python
2. 自带的IDLE
    python自带的编辑器
3. IDE
    Jupyter Notebok
        安装python后,可通过pip命令安装:pip install jupyter
        启动命令:jupyter notebook
    pycharm
    vscode+python插件:可以直接在vscode里面使用jupyter,新建文件扩展名ipynb即可,但功能略有限制
        在程序中,如果导入上级目录出错,需要创建调试配置文件,添加一行:"cwd": "${fileDirname}"
    eclipse+python插件
```
---
## Python程序运行方式
```
    Python是解释执行的程序,不需要编译,一遍解释一边执行,但也会生成字节码文件
    Python的运行类似于java,但有很大不同,最大的不同就是不需要编译
    通常的Python指的是CPython,即底层解释器是用C实现的,也有Java或其他语言的解释器
    Python基本文件是扩展名为 .py 的文本文件,通常称为Python脚本文件
    Python可以进行面向对象的程序设计、函数式编程等等编程范式
    Python可以很容易的粘合其他语言编写的组件
```
---
## 交互式环境
```
    终端里面执行命令 python ,Linux可能需要执行 python3 来启动3.x环境
    或者启动 IDLE SHELL
    交互式环境可以直接敲入python语句
    交互式环境有一个特殊变量:_  该变量用来保存上一次表达式计算的结果
    输入 exit() 退出交互式环境
```
---
## 运行.py文件
```
    命令:python xxx.py
    Linux下,可以将.py文件设置为可执行文件,直接运行,但要注意:.py文件的第一行需要添加相关注释
        #! /usr/bin/env python3
    将上面的注释添加到.py文件的第一行,在Linux 环境下表示以 python3 执行这个文件
```
---
## .py文件的编码问题
```
    默认情况下,.py文件以utf-8进行编码
```
---
## 版本问题
```
    通常情况下向下兼容,但3.x 和 2.x 不兼容,2.7 为2.x最终版
```
---

# 基本语法
## 缩进,代码块,行,注释
```
    python 使用缩进来组织代码块,不需要用大括号
    同一个代码块中的语句要保持缩进量相同,比如4个空格
    缩进可以使用tab或者空格,但是要统一,tab和空格不能混用,推荐使用4个空格
    通常,冒号意味着着后面要有一个缩进的代码块
    paython 每行结束不需要使用分号
    以 # 开头的行表示注释,注释也可以在每行语句的最后,必须以 # 开始
```
---
## 对象,变量
```
    python 中一切都是对象,Object 是所有对象的总类
    变量名即对象名,变量没有类型限制
    变量的内置函数、属性,使用 . 语法来调用
    使用 = 为变量赋值
    变量在第一次赋值时被创建
    变量可以赋值为 None ,类似java的NULL
```
---
## 常见数据类型
```
    str 字符串:"abc" 'abc'
    int 有符号整型:-12
    float 浮点数:12.3344
    list 列表:[1,3,3]
    tuple 元组:(1,2)
    set 集合(集合中的值不可重复):{1,2,3}
    dict 字典:{'a':1,'b':2,'c':3}
    布尔值:True False
```
---
## 模块,导入
```
    模块是以. py 为后缀名并包含 Python 代码的文件
    使用 import ... as ... 来导入模块并赋予一个别名,as 不是必须
    使用导入的模块中的函数、变量,使用:模块名(或别名).对象名
    使用 from ... import as ... 来导入模块中特定的对象
```
---
## 运算符
```
    特殊的运算符:幂运算 ** (2**3 表示2的3次幂) ;整除(不保留小数) // (使用一个 / 的除法会保留小数部分)
    python 没有自增自减运算符(++和--)
    重复:'abc' * 2    #返回'abcabc'
    拼接:'abc' + 'def'    #返回'abcdef'
    相等:== (不等:!=)
```
---
## 可对象,变对象,不可变对象
```
    Python 中的大部分对象,例如列表、字典、NumPy数组都是可变对象,大多数用户定义的类型( 类)也是可变的
    可变对象中包含的对象和值是可以被修改的:
    元组、字符串是不可变对象
```
---

# 字符串
## 字符串基本
字符串|s|t|r|i|n|g
---|:--:|:--:|:--:|:--:|:--:|:--:
索引值|0|1|2|3|4|5
负数索引|-6|-5|-4|-3|-2|-1
```
    字符串字面值用单引号 ' 或 双引号 " 包围
    多行文本可以用三个单引号或者三个双引号包围
    转义字符以 \ 起:a = "12\\12"
    也可以在字符串前面加 r 而不使用转义:a = r'12\\12'
    可以直接使用 + 对两个字符串拼接:s= str1 + str2
    print()函数用来向终端输出一串字符,默认将传入的对象转换为字符串:print([1,2,3])
    但是把用 + 拼接的对象传给print()函数时,需要显式将每个对象转换为字符串:print('a='+str(123))
    可以通过索引值取出字符串中的字符,起始为0,可以为负数,-1表示最后一个字符
```
---
## 字符串切片
```
    基本语法:字符串对象[起始索引:终止索引:步长]
        a[1:5:1]    #从索引号1开始,直到索引号5之前的字符,步长为1
    起始索引、终止索引、步长可以为空,默认为1,a[:] 相当于整个字符串a
    起始索引、终止索引、步长可以取负数
        a='123456'
        print(a[::-1])    #输出为:654321
        print(a[4::-1])    #输出为:54321
        print(a[2:5])    #输出为:345
```
---
## 字符串常用函数
```
    count() 计算给定字符在字符串中的个数:'12345'.count('2')
    find() 给定字符在字符中第一次出现的位置,找不到返回-1:'hello world'.find('o')    #返回4
    index() 给定字符在字符中第一次出现的位置,找不到报错
    split() 按给定字符对字符进行拆分,返回一个列表:'hello world'.split(' ')    #返回['hello', 'world']
    replace() 替换指定字符(或字符串):'hello world'.replace(' ',',')    #返回'hello,world'
    strip() 去除字符串前后的空格、换行:str.strip()
    uper() 全体字符大写
    lower() 全体字符小写
    capitalize() 首字母大写,其他小写:'hello World'.capitalize()    #返回'Hello world'
```
---

# 格式化输出
## % 语法
```
    基本格式:
        print('this is %s' % 'an apple')    #输出:this is an apple
```

格式|描述|备注
---|:--:|---
%%|百分号标记|
%c|字符及其ASCII码|
%s|字符串
%d|有符号整数(十进制)
%u|无符号整数(十进制)已过时
%o|整数(八进制)
%x|整数(十六进制)
%X|整数(十六进制大写字符)
%e|浮点数字(科学计数法)
%E|浮点数字(科学计数法,用E代替e)
%f|浮点数字(用小数点符号)
%g|浮点数字(根据值的大小采用%e 或%f)
%G|浮点数字(类似于%g)
%p|指针(用十六进制打印值的内存地址)
%n|存储输出字符的数量放进参数列表的下一个变量中
```
    print('there are %d %s' % (5,'apples'))    #输出:there are 5 apples
    print('%.2f' % (5/3))    #输出:1.67
```
---
## format 语法
```
    s='{} have {:d} {} and {:.2f} L water'
    print(s.format('we', 5, 'apples', 2.7))    #输出 we have 5 apples and 2.70 L water

    s='{who:} have {q:d} {fruit:}'
    print(s.format(who='we', q=5, fruit='apples'))    #输出 we have 5 apples
```
---
## f-string 语法
```
    3.6版本加入
    who,q = 'we',2.7
    s=f"{who} have {q:.2f} L water"
    print(s)    #输出 we have 2.70 L water
```
---

# list 列表操作
## 索引,切片
```
    和字符串一样,列表支持通过索引获取元素,以及切片操作
```
---
## 常用函数、操作
```
    append() 在结尾添加元素:list1.append('apple')
    extend() 合并两个列表:list1.extend(list2)
    count() 计算某个元素值在列表中出现的次数:list1.count('a')
    index() 查找某个值在列表中第一次出现的索引:list1.index('a')
    判断某个值是否在列表中:'a' in list1    #如果 a 在 list1 中,返回True,否则返回False
    列表推导式:[2**x for x in range(12) if x%2==0]    #返回 [1, 4, 16, 64, 256, 1024]

```
---

# 异常处理
## 异常
```
    程序发生错误时,会引发异常处理
    当没有相应的异常处理方法时,python会跳出执行程序,终止程序运行
   
```
---
## 基本语法
```
    try/except
    try/except/else
    try/except/finally
    try/except/else/finally
   
    可以有多个except,对应不同的异常类型
    else只在没有异常发生时执行
    finally无论是否发生异常都会执行
    异常会层层传递
    raise可以手动引发一个异常
    assert可以有条件的引发一个异常

    def f(x):
        assert x<0, 'x must be negative'
        return x**2
    f(1)    #这会引发一个异常


```
---

# 函数
## 基本语法
```
    以 def 定义,可以有或没有参数
    通过return或yield返回参数
    return并非必须,执行到函数结尾自动退出
    没有定义return则会默认返回None
    可以利用打包拆包功能返回多个值
```
---
## 参数问题
```
    位置参数
    def f(x,y):
        pass
    f(1,2)    #在函数f内部,x=1,y=2

    默认值参数
    def f(x,y=2):
        pass
    f(1)    #在函数内部,x=1,y被赋值为默认值2

    可变参数
    def f(*values):
        for x in values:
            pass
    f(1,2,3)    #可传入0个或多个参数,在函数内部自动组成一个元组

    关键字参数
    def f(x,y,**n):
        print(n)
    f(1,2,m=3,n=4)    #允许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict:{'m': 3, 'n': 4}

    命名关键字参数
    def f(x,y,*,m,n):
        pass
    f(1,2,m=3,n=4)    #调用时必须显式赋值
```
---
## lambda匿名函数
```
    只能写一行,返回的是一个函数

    f=lambda x,y:x+y
    f(1,2)    #结果3
```
---
## 生成器函数
```
def gen_num(value):
    i = 0
    while i <= value:
        yield i    #通过yield 返回值,然后暂停执行,直到下次调用
        i += 1
g=gen_num(12)

print([x for x in g])
```
---

# 类和对象
## 类定义
```
class Vehicle(object):    #object是所有类的父类,在此处可以不必写出
    memo = 'I can move'    #类属性
    def __init__(self,name):    #构造函数(初始化函数),初始化新创建的对象
        self.name = name    #绑定属性到对象
    def get_myname(self):    #定义对象的方法(函数)
        return self.name
    @classmethod    #装饰器
    def get_memo(cls):    #类方法要传入cls
        return cls.memo
car = Vehicle('my car')    #实例化对象
print(car.name)    #访问属性
print(car.get_myname())    #调用方法
print(Vehicle.memo)    #访问类属性
print(car.memo)    #此时访问的是类属性
Vehicle.memo="I have wheels"    #修改类属性
print(Vehicle.memo)    #访问类属性
print(car.memo)    #此时访问的是类属性
car.memo="I can run"    #给实例对象增加了一个不在类内定义的属性
print(car.memo)    #此时访问的是对象附件的属性
print(Vehicle.memo)    #访问类属性,类属性不受实例同名属性的影响
print(Vehicle.get_memo())    #调用类方法

```
---
## 伪私有化
```
class A:
    def __init__(self) -> None:
        self.__a=3    #不能直接通过.语法访问该属性
a=A()
aa=A()
aa._A__a=4    #但仍有办法去访问
print(a._A__a)
```
---
## 继承
```
```
---

 

0
收藏
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户