Day76--阶段复习01--编辑器、数据类型、字符编码、闭包函数

1 个人介绍

刘清政,刘老师,老刘 ,Justin

2 关于编辑器

python   : pycharm(收费)、vscode(免费)、sublintext

go       : goland(收费)、vscode、国产的

java     : idea(收费)、eclipse(免费)、MyEclipse(收费)

android  : androidstudio(免费)、eclipse+adt

前端     :  webstorm(收费)

php     :  phpstorm(收费)

数据库   :  datagrip(收费)

    
# 收费的编辑器 基本都是jetbrains公司的
  jetbrains公司出的全家桶,一个注册码,可以都用

  androidstudio:买了jetbrains公司授权,在它基础上,做了它

3 基础串讲

3.1 解释型和编译型

# 你出去之后开发环境:
   windows开发(主流)、Linux、Mac
    
# 但sanic,fastapi等异步框架,windows安装不上(不支持)
# 解决:
  1.装乌班图(linux系统)在上面开发 或 配mac本
  2.或远程连接linux开发,远程连linux内的docker开发


# 编译型:
  -c:c代码写完,需在不同平台上编译  # 导致跨平台运行(差)
      eg: linux上 需源码安装软件,先自行编译,再运行

  -java: 一处编码,处处运行
     java是编译型还是解释型?
        编译型
            
     编译过程:
        把java源代码编译成字节码文件 .class 
          ---> 但该字节码不能直接运行在操作系统之上
          ---> 需借助jvm(java虚拟机 类似于Python的解释器,可以在不同平台上安装,从而解决跨平台性差的问题)
               但jvm运行至少要300m内存 (比较占内存,故Java中,有一个优化问题:jvm调优)
            
      jdk  : Java开发套件 包含jre 和 jvm # 用来开发Java程序
      jre  : Java运行环境 包含jvm        # 用来运行Java程序
      jvm  : Java虚拟机                 # 负责解释执行字节码文件
    
    
      java se : Java基础  # 下载jdk(Java SE Development Kit) 就是 下载Java SE
      java me : 很老手机的Java开发 不是安卓机,是塞班系统的Java游戏  # 基本淘汰了  
      java ee : 企业级做Java web开发
        
        
      JDK的版本   # java原本是sun公司,被甲骨文收购了
         -Oracle JDK  : 商业 收费
         -OpenJDK     : 免费
         -毕昇jdk      : 华为做的  基于OpenJDK定制的  免费

        
  -go: 编译型,跨平台编译(windows平台可以编译出mac平台的可执行文件)
        所有go代码可直接打包成一个可执行文件 # 对比Python的优点
    
    
# 解释型:    
    python: 强类型动态语言 
	别人使用我的Python程序
        要嘛 下载Python解释器
        要嘛我使用框架打包成EXE可执行文件 
          eg:pyinstaller 本质是将Python解释器也打包到exe当中了,且不是很成熟,老出错
        
    js: 只能在浏览器中运行,node.js(js做后端开发)
    
    php: web开发


# 你们将来从从事的方向
1 python后端开发:做网站,前端可以是app/小程序的 python后端

2 自动化运维:收集服务器软硬件信息(cmdb),jumpserver(堡垒机)
            sql审批,监控,日志收集与处理
            devops:ci/di

3 自动化测试:selenium(网站测试),appnium(app测试),pytest
4 数据分析:
5 爬虫:
6 量化交易
7 人工智能,图像处理
8 安全方向:端口扫描,弱口令扫描,sql注入,csrf攻击,xss攻击  #《Python绝技:运用python成为顶级黑客》 提前看看
9 网络方向
10 物联网方向:硬件交互 # 不走http协议,硬件检测数据,用socket编程上传数据

# 申请一个github账号
# 维护一个博客(博客园,自己写的,hexo搭建)

3.2 数据类型

3.2.1 一切皆对象

python中一切皆对象

# type和object的关系
    1 type是object的类  object是由type实例化得到
    2 type继承了object
    3 type是type自己的类
    
总结:type 是所有类(包括自己)的元类,其他类都是由它实例化得到的
      object 是所有类(不包括自己)的父类,其他类都继承于它

a=int(2)
# int是一个类,具体实现是由c语言实现的,如果写了pass,看不到源码,有一部分可以看到
# print(type(1))  # int :数字1 的类是int
# print(type(int))
# print(type(dict))

# int dict  都是type类的对象
# int dict  继承了object
# type和object是什么关系?

# def a():
#    pass
# print(type(a))

print(type(int))  # type
print(type(object))  # type
print(type(type))  # type

3.2.2 深浅copy

# 一切皆对象的好处
不同类型之间的变量直接可以相关赋值
a=100
a='xxx'
其实本质,变量都是指向了一个内存地址,而不是直接指向数据本身  从而实现,变量可以通过赋值(指向其他的内存地址)来改变自己的数据类型

于是 出现了深浅copy问题
# 深浅copy问题

变量----->内存地址----->数据本身

l = [1,2,3,[4,5,6]]
l2 = l  # 赋值 (是新的变量,指向同一个内存地址)
print(l2 is l)  # True

from copy import copy
from copy import deepcopy

l3 = copy(l)
print(l)  # [1,2,3,[4,5,6]]
print(l3)  # [1,2,3,[4,5,6]]
print(l is l3)  # False  浅拷贝 (新的变量,指向了内存地址的一个新浅拷贝地址)

l3[3][1]=999
print(l)  # [1,2,3,[4,999,6]]
print(l3)  # [1,2,3,[4,999,6]]  # 浅拷贝 (新的拷贝地址,只拷贝了表面第一层,所以若是修改拷贝地址或原地址的 深地址第二层或更多层,另一个也会改变)

l4 = deepcopy(l)
l4[3][1] = 999
print(l)  # [1,2,3,[4,5,6]]
print(l4)  # [1,2,3,[4,999,6]]  
print(l4 is l)  # False  深拷贝 (新的变量,指向了内存地址的一个新深拷贝地址,不管原地址有多少层 全部拷贝,全新的,两个相互独立)

3.2.3 可变与不可变类型

# 字典、列表、集合   可变类型
# 数字、字符串、元组  不可变类型

# 字典的key必须用不可变类型,可以hash

# 看一下这篇博客
https://www.cnblogs.com/xiaoyuanqujing/articles/12008689.html
    
# python中的参数传递是值传递还是引用传递?
  python中参数传递都是浅拷贝copy一份传递过去
  由于一切皆对象,传过去都是地址
  python中区分可变和不可变类型,可变类型在函数中修改会影响原来的,不可变类型不会影响原来的

3.3 字符编码

# 计算机的计量单位:
bit比特位:0或者1的一个小格
8个bit位是一个byte,一个字节
1024个字节---》1kb
1024kb---》1mb
1024mb---》1gb

1个字节---》2的8次方 种变化,就可以表示出所有的字符(数字,字母,标点符号)

计算机到了中国---》中国汉字--》gbk编码
但是到了不同国家,不同国家有不同国家编码方式,就会出现乱码问题

Unicode编码统一了,只是规定了字符和数字的对应关系  

具体的存储方式:
    utf-8:目前主流的编码方式 可变动的存储
    	(是不定长的:一个英文字符占1Bytes,一个中文字符占3Bytes,生僻字用更多的Bytes存储)
    utf-16

需要说清楚:assic码,gbk,unicode,utf-8

3.4 闭包函数

# 1 定义在函数内部
# 2 对外部作用域有引用

函数是一等公民:函数可以赋值给一个变量
# 装饰器是闭包函数的典型应用
# python中有装饰器语法糖  @

def wrapper(func):
    def inner(*args,**kwargs):
        # 代码
        res=func(*args,**kwargs)
        # 代码
        return res
    return inner

# 没有语法糖 
def a():
    print("xxx")
    
a=wrapper(a)
a() 

# 有语法糖
@wrapper()
def a():
    print("xxx")
    
# 面向切面编程 AOP
# OOP 面向对象编程

作业

# 前后端传数据三种编码格式(urlencode、formdata、json)
    urlcode: 默认   request.POST
    formdata:文件  普通键值对 放 request.POST   文件 放 request.FILES
    json格式:原生django 放 request.body中 不能从request.POST中取出
    
# 1.用中间件或者装饰器前端不管传json还是其他格式,requests对象中有个data属性
posted @ 2021-11-23 11:52  Edmond辉仔  阅读(41)  评论(0编辑  收藏  举报