zoukankan      html  css  js  c++  java
  • python简单入门

    一. 初识python.

    1. 认识计算机
    CPU(大脑) 3GHZ + 内存(DDR4) + 主板 + 电源(心脏)+ 显示器 + 键盘 +鼠标+ 显卡 + 硬盘 80MB/s

    操作系统
    windows 家用
    linux 服务器
    macOS 家用+服务器

    计算机是一个高度集成的电子电路
    高低电平. 二进制
    二进制没有2 -> 0 1
    八进制没有8 -> 0-7
    十进制没有10 -> 0-9
    十六进制没有16 -> 0-9 A-F


    显卡
    1. NAVID 看型号。
    2. AMD 图形处理

    2. python历史
    python是一门弱类型解释型高级编程语言

    编译型, 把写好的程序编译成计算机认识的二进制
    优点:一次编译到处运行。 运行效率高, 开发效率低 0.001s
    解释型,
    缺点:运行慢   0.01s

    优点:开发效率高. 简单

    3. python的版本
    2.x   老版本已经不再更新,2020年已将淘汰
    3.x   学习用这个

    4. 安装

    网址:python.org

     

    选择:3.6.5    mac选择macOS 64-bit installer

     

    安装:

     



    5. 编辑器的选择
    1. 所有的文本编辑器都可以编写代码。记事本,Editplus,sublime, pycharm(收费)
    2. 可以在命令行写代码.

    6. 第一个python程序

    python程序有两种编写方式:

    1. 进入cmd控制台. 输入python进入编辑模式. 这时候我们可以直接编写python程序
    2. 也可以在.py文件中编写python代码. 通过python命令来执行python代码




    7. 变量
    概念: 把程序运行过程中产生的中间值保存在内存. 方便后面使用.
    命名规范:
    1. 数字, 字母, 下划线组成
    2. 不能数字开头, 更不能是纯数字
    3. 不能用关键字
    4. 不要用中文
    5. 要有意义
    6. 不要太长
    7. 区分大小写
    8. 驼峰或者下划线命名

    数据类型:
    1. int 整数 +-*/ % // **
    2. str 字符串 ', ", ''', """ 括起来的内容 +拼接 (用"+"连接的两端必须是字符串),*重复("*"后面必须跟的是数字),

    3. bool 布尔 True, False 

    4.换行:" "表示转移字符,换行. 三个单引号或者三个双引号中的字符串内回车即可换行

    5.类型转换

    int(str)    # 字符串转换成整数

    str(int)    # 整数转换成字符串


    8. 常量
    本质就是变量. 所有字母都大写

    9. 用户交互
    变量 = input(提示语)
    所有的输入的内容都是字符串
    int(变量) 把变量转化成数字

    10. if条件判断
    1.
    if 条件:
    if语句块
    执行流程:判断条件是否为真. 如果真. 执行if语句块

    2.
    if 条件:
    if语句块
    else:
    else语句块
    执行流程:判断条件是否为真. 如果真. 执行if语句块 否则执行else语句块

    3.
    if  条件1:
               if-1
    elif 条件2:
               if-2
    elif 条件3:
              if-3
              ....
    else:
             else语句块
    执行流程:
    判断条件1是否成立, 如果成立执行if-1
    否则如果条件2成立, 执行if-2
    否则如果条件3成立, 执行if-3
    ....
    否则执行else语句块

    4. 嵌套
    if 条件:
           if 条件:
               ..
    else:
          if 条件:
    ...

    11. while循环

    while 条件:
          循环体(break, continue)

    能够让循环退出: 1. break 2. 改变条件

    continue 停止当前本次循环,继续执行下一循环
    break 彻底的干掉一个循环

     

    二.运算符和编码

    1. 格式化输出

      %s就是代表字符串的占位符,可以代替所有

      %d,是数字占位符,只能代替数字

    name = input("请输入你的名字:")
    address = input("你来自哪里:")
    hobby = input("你喜欢什么:")
    #比较繁琐的方式
    print("我叫"+name+",我来自"+address+",我喜欢"+hobby)
    #通用的方式
    print("我叫%s,我来自%s,我喜欢%s" % (name,address,hobby))
    # python的新版本的方式,简单
    print(f"我叫{name},我来自{address},我喜欢{hobby}")

    print("我叫%s,我已经度过了人生的30%%" % "好人") #如果占位时字符串中有%,需要用%%来表示
     

    2. 运算符 and or not (难点)

    1.算数运算符

    2. 比较运算符

    3.赋值运算符

    4.逻辑运算符


    运算顺序: ()=> not => and =>or

    当出现 X or Y 时,判断X是否为0,如果X是0,则输出Y,否则返回X

    当出现 X and Y 时,判断X是否为0,如果X是0,则输出X,否则输出Y

    True相当于非0   ,  False相当于0

    补充:in和not in

        可以判断xxx字符串是否出现在xxxxx字符串中

        content = input("请输入你的评论")

        if "苍老师" in content or '邱老师' in content:

                  print('你输入的内容不合法')

       else:  

                  print("评论成功")

    3. 初识编码 gbk unicode utf-8
    1. ascii 8bit 1byte(字节) 256个码位 只用到了7bit, 用到了前128个 最前面的一位是0
    2. 中国人自己对计算机编码进行统计. 自己设计. 对ascii进行扩展 ANSI 16bit -> 清华同方 -> gbk
    GBK 放的是中文编码. 16bit 2byte 兼容ascii
    3. 对所有编码进行统一. unicode. 万国码. 32bit. 4byte. 够用了但是很浪费

    4. utf-8 可变长度的unicode
    英文: 1byte
    欧洲文字: 2byte
    中文: 3byte
    字节(byte)
    1byte = 8bit
    1kb = 1024byte
    1mb = 1024kb
    1gb = 1024mb
    1tb = 1024gb
    1pb = 1024tb

     三.字符, 列表和元组

    1. 基本数据类型概况
    1, int 整数
    2. str 字符串
    3. bool 布尔值
    4. list 列表. 一般存放大量的数据 ["门神xxxx", "风扇哥xxxx", 元素]
    5. tuple 元组. 只读列表, 只能看啥也不能干. (元素, 元素)
    6. dict 字典. {"风扇哥":"王伟哲", "wlh": "王力宏"}
    7. set 集合 {"风扇哥", "wlh"}. 不重复
    8. bytes 一堆字节. 最小数据单元

    2. int类型的相关操作.
    数字没办法执行其他操作. 操作只有+-*/, //, %, **
    8bit => 1byte
    bit_length() 二进制长度

    3. bool类型的操作. 基本类型转换的问题
    bool类型没有操作.
    类型转换

    结论一: 想把xxx转化成yy类型. yy(xxx)
    结论二: 能够表示False的数据: 0, "", [], {}, set(), tuple(), None, False
    4. str 认识字符串(重点, 多)
    字符: 单一的文字符号
    字符按照固定的顺序连成串
    被' 或者" 或者''' 或者"""括起来的内容
    索引 编号, 顺序
    从0开始

    切片


    s[start:end:step]
    start:开始
    end: 结束 取不到
    step: 步长, 控制方向. 每xx个取一个

    一大波操作.
    字符串是不可变的数据类型. 不论如何操作.对原来的字符串是不会有影响的
    1, upper() 转换成大写. 忽略大小写
    2, strip() 去掉左右两端的空白 空格, . 所有用户输入的内容都要去空白
    3, replace(old, new) 把old替换成new
    4, split() 字符串切割
    5, startswith() 判断是否以xxx开头
    6, find() 查找, 找不到返回-1
    7, isdigit() 判断是否是数字组成
    8, len() 求长度

    for循环遍历字符串
    for 变量 in 可迭代对象:
    循环体

    for c in s: # c: charactor(字符) s: string
    print(c)

    5. 什么是列表
    定义: 能装对象的对象
    在python中使用[]来描述列表, 内部元素用逗号隔开. 对数据类型没有要求

    列表存在索引和切片. 和字符串是一样的.

    6. 相关的增删改查操作(重点)
    添加:
    1. append() 追加
    2. insert(位置, 元素) 插入指定元素到指定位置
    删除:
    1. pop(index) 根据索引删除
    2. remove(元素) 根据元素删除
    修改:
    索引修改
    lst[索引] = 元素
    查询:
    for循环.

    7. 列表的嵌套
    多个列表互相嵌套
    8. 列表的其他操作
    1. count() 计数
    2. sort() 排序,升序 ; sort(reverse = True)降序
    3. reverse() 翻转
    4. len() 求长度

    9. 什么是元组
    能装对象的对象. 不可变. 一旦确认好. 不可更改
    只读列表
    可以迭代

    10. 元组的嵌套
    和列表一样.都可以互相嵌套.
    元组的不可变: 指向不变

    元组不可改,列表可以改

    tu = ruple()  空元组,固定写法

    当元组中只有一个元素时   tu = (1,)  要加","

    tu = (1)  # 不是元组,<class,'int'>

    tu = (1,) # 是元组,<class,'tuple'>

    元组也是可迭代的,可以使用for循环

    关于不可变, 注意: 这里元组的不可变的意思是子元素不可变. 而子元素内部的子元素是可以变, 这取决于子元素是否是可变对象.

    11. range(重点, 难点)
    数数

    range() 可迭代对象
    range(参数) [0, 参数)
    range(参数1,参数2) [参数1, 参数2)
    range(参数1,参数2,step) [参数1,参数2) 每隔step取一个

    # 重点
    for i in range(len(lst)):
             i 索引
             lst[i] 元素

      print(i, lst[i]) 

    四. 字典和集合

    1. 什么是字典
    字典是以key:value的形式来保存数据
    用{}表示. 存储的是key:value
    2. 字典的增删改查(重点)
    1. 添加
    dic[新key] = 值

     

    setdefault()
    2. 删除
    pop(key)

    3. 修改
    dic[老key] = 值
    update() 跟新字典
    4. 查询
    dic[key]
    get(key, 值)
    setdefault(key, value)
    5. 遍历,字典是一个可迭代对象

    3. 字典的相关操作
    1. keys() 获取到所有的键
    2. values() 获取到所有的值
    3. items() 拿到所有的键值对
    4. 字典的嵌套
    字典的嵌套. 字典套字典

    5. 集合(不重要). 去重复
    集合中的元素是不重复的. 必须是可哈希的(不可变), 字典中的key
    空集合:set()
    空元组:tuple()
    空列表:list()
    非空集合: {123}集合, 集合其实就是不存value的字典

    六.小数据池

    1. 小数据池, id()
    小数据池针对的是: int, str, bool
    在py文件中几乎所有的字符串都会缓存.
    id() 查看变量的内存地址
    2. is和==的区别
    is 比较的是内存地址
    == 比较的是内容
    当两个变量指向同一个对象的时候. is是True, ==也是True

    3. 编码
    1. ascii. 有: 数字, 字母, 特殊字符. 8bit 1byte 128 最前面是0
    2. gbk. 包含: ascii, 中文(主要), 日文, 韩文, 繁体文字. 16bit, 2byte.
    3. unicode. 包含gbk,ascii,big5... 32bit, 4byte
    4. utf-8. 可变长度的unicode.
    1. 英文: 8bit,1byte
    2. 欧洲文字: 16bit 2byte
    3. 中文: 24bit 3byte
    不同的编码之间不能随意转换. 中国人gbk和德国人utf-8骂 想要沟通必须通过英文(unicode)(媒介)

    在python3中. 默认的编码是unicode,我们的字符串就是unicode
    在python2中. 默认的编码是ASCII. Cpython.c语言的默认编码是ASCII

    unicode弊端:在存储和传输的时候. 是很浪费的
    在存储和传输的时候不能直接使用unicode. 必须要对字符串进行编码. 编码成bytes类型
    bytes: 字节形式的字符串

    1. encode(编码格式) 编码
    2. decode(编码格式) 解码

    bytes是一种另类的字符串表示形式
    "哈哈哈" => xeexabx13xeexabx13xeexabx13

    七. join,fromkeys和深浅拷贝

    1.  join,fromkeys
    join()
    "*".join("马虎疼") # 马*虎*疼 把传递进去的参数进行迭代. 获取到的每个元素和前面的*进行拼接. 得到的是字符串
    split() 切割. 切割的结果是列表

    列表和字典: 都不能在循环的时候直接删除
    把要删除的内容记录在新列表中然后循环这个新列表. 删除列表(字典)

    fromkeys()
    坑1: 返回新字典. 不会更改老字典
    坑2: 当value是可变的数据类型. 各个key共享同一个可变的数据类型. 其中一个被改变了. 其他都跟着变


    2. 深浅拷贝(重点, 难点)
    1. = 没有创建新对象, 只是把内存地址进行了复制
    2. 浅拷贝 lst.copy() 只拷贝第一层.
    3. 深拷贝
    import copy
    copy.deepcopy() 会把对象内部的所有内容进行拷贝

    八. 文件操作

    1. 文件操作
    open 打开
    f = open(文件路径, mode="模式", encoding="编码格式") 最最底层操作的就是bytes
    打开一个文件的时候获取到的是一个文件句柄.

    绝对路径
    从磁盘根目录开始寻找
    相对路径
    相对于当前程序所在的文件夹
    ../ 上一层文件
    文件夹/ 进入xxx文件夹

    2. mode:

     打开文件的方式: r, w, a, r+, w+, a+, rb, wb, ab, r+b, w+b, a+b 默认使用的是r(只读)模式 
    r: 读取,只读.
      读取文件的相关操作
      1. read()
      默认: 读取文件内容(全部)
      read(n) 读取n个字符
      2. readline() 读取一行
      3. readlines() 读取全部. 返回列表
      (最重要)4. for line in f: 每次读取一行内容
    w:
      写入. 只写
      创建文件
      会清空文件
    a:
      也可以创建文件
      追加写
    r+: 对于文件而言. 应该有的操作就两个:读, 写
      读写操作
    w+:
      写读操作
    a+:
      追加写读

      所有带b的表示直接操作的是bytes, 当处理非文本文件的时候.
    rb
    wb

    ab: 断点续传

    r+b
    w+b
    a+b

     深坑请注意: 在r+模式下. 如果读取了内容. 不论读取内容多少. 光标显示的是多少. 再写入 或者操作文件的时候都是在结尾进行的操作. 

    3. 文件操作中关于文件句柄的相关操作
    seek() 移动光标
      f.seek(0) 移动到开头(最多)
      f.seek(0, 2) 移动到末尾
    seek:两个参数
      1. 表示偏移量
      2. 从xxx开始偏移, 默认0, 开头 1, 当前位置 2, 末尾

    tell:
      返回光标所在的位置

    4. 文件修改, 实际操作(重点)

     

    九. 初识函数

    1. 什么是函数?
    f(x) = x + 1
    y = x + 1
    函数是对功能或者动作的封装
    2. 函数的语法和定义
    def 函数名():
      函数体
    调用:
      函数名()
    3. 关于函数的返回值
    return : 返回
    1. 当程序没写过return, 不返回任何结果. 如果你非要接收. 接受到的是None
    2. 当函数写return 值, 有一个返回值.
    3. 当函数写了return 值1, 值2, 值3.... 返回多个结果. 多个结果打包成元组
    4. 当程序执行到return, 函数结束执行

    4. 函数的参数(部分)
    小括号是什么, 小括号表示调用, 传参
    什么是参数: 参数是给函数传递的信息
    1.形参: 在函数声明的位置写的变量
      1. 位置参数
      2. 默认值
      3. 动态传参 *, **
    2.实参: 在函数调用的时候给函数传递的具体的值
      1. 位置参数
      2. 关键字参数
      3. 混合: 位置, 关键字
    3.传参: 把实参给形参的过程

    4. 动态传参(重点) *, **
    *, ** :
    形参: 聚合
      位置参数* -> 元组
      关键字** -> 字典
    实参: 打散
      列表, 字符串, 元素 -> *
      字典 -> **
    形参顺序(重点):
      位置, *args, 默认值, **kwargs

    无敌传参
      def func(*args, **kwargs): arguments参数 keyword-arguments关键字参数
        pass

    十.函数的进阶

    1. 作用域和名称空间
    名称空间: (用来存放名字(变量, 函数名, 类名, 引入的模块名)的)

      1. 全局名称空间: 我们在py文件中自己写的变量, 函数.....
      2. 内置名称空间: 我们python解释器提供好的一些内置内容(print, input....)
      3. 局部名称空间: 在我们执行函数的时候.会产生一个局部名称空间. 放的是: 函数内部的内容(变量, 函数,类...)

    名称空间可能会有无数个, 局部名称空间而言. 相对是独立的.一般互不干扰

    作用域:
      1. 全局作用域: 内置+全局
      2. 局部作用域: 局部

    globals() 查看全局作用域
    locals() 查看当前作用域

    2. 函数的嵌套
    在函数中声明函数
    在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置

    3. nonlocal和global关键字(重点)
    global: 在局部引入全局变量
    nonlocal: 在局部...内层函数引入外层离他最近的那个变量.

     十一. 第一类对象 闭包 迭代器

    1.第一类对象-> 函数名 -> 变量名
    函数对象对象可以像变量一样进行赋值
    还可以作为列表的元素进行使用
    可以作为返回值返回
    可以作为参数进行传递

    2.闭包 -> 函数的嵌套
    内层函数对外层函数中的变量的使用

    好处:
    1. 保护变量不被侵害
    2. 让一个变量常驻内存

    如何通过代码查看一个闭包
    __closure__: 有东西就是闭包. 没东西就不是闭包

    3.迭代器 -> 固定的思路. for循环
    一个数据类型中包含了__iter__函数表示这个数据是可迭代的
    dir(数据): 返回这个数据可以执行的所有操作

    判断迭代器和可迭代对象的方案(野路子)
            __iter__            可迭代的
    __iter__ __next__    迭代器

    判断迭代器和可迭代对象的方案(官方)
    from collections import Iterable, Iterator
    isinstance(对象, Iterable) 是否是可迭代的
    isinstance(对象, Iterator) 是否是迭代器

    模拟for循环
    lst= []
    # 拿迭代器
    it = lst.__iter__()
    while 1:
      try:

       it.__next__()
      except StopIteration:
       break

    特征:
    1. 省内存(生成器)
    2. 惰性机制
    3. 只能向前. 不能后退

    作用:统一了各种数据类型的遍历

    十二. 生成器和各种推导式

    1. 生成器
    本质就是迭代器.
    一个一个的创建对象
    创建生成器的方式:
    1. 生成器函数
    2. 通过生成器表达式来获取生成器
    3. 类型转换(看不到)
    2. 生成器函数 (重点)
    生成器函数中包含 yield , 返回数据和return差不多.
    return会立即结束这个函数的执行
    yield 可以分段的执行一个函数

    生成器函数在执行的时候返回生成器. 而不是直接执行此函数

    能向下执行的两个条件:
    __next__() :执行到下一个yield
    send() :执行到下一个yield, 给上一个yield位置传值

    所有的生成器都是迭代器都可以直接使用for循环
    都可以使用list()函数来获取到生成器内所有的数据

    生成器中记录的是代码而不是函数的运行
    def func():
      print("我的天哪 ")

      yield "宝宝"

    gen = func() # 创建生成器. 此时运行会把生成器函数中的代码记录在内存
    当执行到__next__(), 运行此空间中的代码, 运行到yield结束.

    优点: 节省内存, 生成器本身就是代码. 几乎不占用内存
    特点: 惰性机制, 只能向前. 不能反复

    3. 各种推导式 (诡异)
    列表推导式 [结果 for循环 if]
    字典推导式 {结果(k:v) for循环 if}
    集合推导式 {结果(k) for循环 if}

    4. 生成器表达式 (重点)
    (结果 for循环 if)

  • 相关阅读:
    使用Acctinfo.dll了解更多AD用户帐号信息
    vue elementUI之Form表单 验证
    vue element-ui 表格筛选,点击筛选数据
    使用Bootstrap + Vue.js实现 添加删除数据
    CSS3过渡效果 兼容IE6、IE7、IE8
    使用Ajax、json实现京东购物车结算界面的数据交互
    JavaScript面向对象,闭包内存图,闭包和作用域
    实现一个宽和高都是100像素的div可以用鼠标拖拽移动的效果
    JavaScript鼠标事件,点击鼠标右键,弹出div
    javascript sort排序
  • 原文地址:https://www.cnblogs.com/python-coder/p/10029125.html
Copyright © 2011-2022 走看看