day77——基础知识复习1

一、编辑器

  • python开发:pycharm(收费),vscode(免费),sublime text,
  • go开发:goland(收费),vscode,国产的
  • java:idea(收费),eclipse(免费),MyEclipse(收费)
  • android:androidstudio(免费),eclipse+adt
  • 前端:webstorm(收费)
  • php:phpstorm(收费)

数据库开发:data

二、编译型、解释型

开发的系统环境:

一般是使用windows系统作为作为主流的开发环境,但是有些框架像sanic、fastapi框架在windows上面装不上,只能用mac或者linux作为开发环境,或者在电脑上面装其他系统的虚拟环境,还可以远程连接linux系统进行开发, 或者远程联linux内的docker进行开发。

编译型:

  • c

    c代码写完,编译(不同平台),跨平台运行,linux上源码安装软件,自行编译,运行

  • java

    java是编译型还是解释型有争议,它能做到一处编译处处都可以运行,java其实是有编译过程的,将java的源代码编译成字节文件,xxx.class,而且不能直接运行在操作系统上,需要有个java的虚拟机(jvm) ,jvm运行至少要300m的内存。

    • jdk
    • jre
    • jvm
    • javaas/javaee/javame
  • go

    跨平台编译(windows平台可以编译成mac平台的可执行文件),所有的go代码打包成一个可执行文件

解释型:

  • python

    强类型动态语言

  • js

    只能在浏览器中运行,借助node.js可以将代码运行到后端服务器上

  • php

    web开发

三、python就业方向

  • python后端开发

    做网站,前端可以是app,小程序的python后端

  • 自动化运维

    收集服务器软硬件信息(cmdb),jumpserver(堡垒机),sql审批/监控,日志收集/处理

    devops:ci/di

  • 自动化测试

    selenium,appnium,pytest

  • 数据分析

  • 爬虫

  • 量化交易

  • 人工智能,图像处理

  • 安全方向:端口扫描,弱口令扫描,sql注入,csrf攻击、xss攻击(书籍推荐:《利用python成为顶级黑客》)

  • 网络方向

  • 物联网方向

四、数据类型

python中一切皆对象,

  • type是object的类
  • type继承object
  • type是自己的类
  • object是有type实例化得到的
  • 在python3中所有的类默认都继承object类,包括type,除了object本身
a=int(2)
print(type(a))
"""
<class 'int'>  int是一个类,具体实现是由c语言实现的,如果一个类的源代码方法里写的全是pass,那么就是用c写的,看不到具体的源码"""

print(type(int))
print(type(dict))
"""
<class 'type'>
<class 'type'>
int/dict..都是type类的对象,并且他们都继承了object
"""

# type与object的关系
print(type(object))
print(type(type))
"""
<class 'type'>
<class 'type'>
object是type的对象,type是type自己的对象,具体用c来实现"""

# 函数的类
def a():
    pass

print(type(a))
"""
<class 'function'>
函数是function类的对象"""

五 、深浅拷贝

一切皆对象的优点:

不同类型之间的变量可以直接相关赋值

a = 66
a = 'xxx'
"""
本质就是变量都指向了一个内存地址,由此会出现深浅拷贝的问题"""

l1 = [1, 2, 3, [4, 5, 6]]
l2 = l1
l2[2] = 'aa'
print(l1)
print(l2)
print(l2 is l1)
"""
[1, 2, 'aa', [4, 5, 6]]
[1, 2, 'aa', [4, 5, 6]]
True
"""

# 浅拷贝
from copy import copy

l3 = copy(l1)
print(l1)
print(l3)
print(l1 is l3)
l3[3][1] = 999
print(l1)
print(l3
"""
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 5, 6]]
False
[1, 2, 3, [4, 999, 6]]
[1, 2, 3, [4, 999, 6]]"""
      
# 深拷贝
l=[1,2,3,[4,5,6]]

from copy import copy
from copy import deepcopy

l4=deepcopy(l1)
l4[3][1]=999
print(l4 is l1)
print(l1)
print(l4)      
"""
False
[1, 2, 3, [4, 5, 6]]
[1, 2, 3, [4, 999, 6]]"""

六、可变不可变

可变不可变是在python中才有的个概念

  • 可变类型:

    • 字典(字典的key必须用不可变类型,可以hash)
    • 列表
    • 集合
  • 不可变类型:

    • 数字
    • 字符串
    • 元组

字典底层原理

python中参数传递都是copy一份传递过去,由于一切皆对象的,传过去的都是内存地址,python中区分可变与不可变类型,可变类型在函数中修改会影响原理的,而不可变则不会影响原来的。

七、字符编码

# 计算机的计量单位;
bit比特位:0或者1的一个小格
八个bit是一个byte,一个字节
1024byte = 1KB
1024KB = 1GB
1024Gb = 1TB
...

ascii码:一个字节有2的八次方种变化,可以表示所有的字符(数字,字母,标点符号)
gbk:中国的编码方式,可以表示汉字,GBK是采用单双字节变长编码,英文使用单字节编码,完全兼容ASCII字符编码,中文部分采用双字节编码。
计算机到了不同国家,不同国家有不同国家编码方式,就会出现乱码问题
Unicode:统一各国的编码方式,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

utf-8/utf-16/utf-32

八、闭包函数

  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 面向对象编程

作业:

作业一:

前后端传数据三种编码格式,传json格式,原生django不能从POST中取出字典,用中间件或者装饰器前端不管传json还是其他格式,requests对象中有个data属性

from django.utils.deprecation import MiddlewareMixin
import json
class DataMiddleware(MiddlewareMixin):
    def process_request(self, request):
        meta = request.META  # 请求信息
        print(meta.get('CONTENT_TYPE'))  # 通过请求信息获取数据的类型:application/json
        request.data = {}
        try:
            request.data = json.loads(request.body)
        except Exception as e:
            if request.POST:
                request.data = request.POST.copy()
                """
                request.POST数据不可以,这里的赋值仅仅是指向了同一内存地址,
                所以无法接下来修改操操作,因此要copy一份,生成新的内存地址"""
            if request.FILES:
                for key in request.FILES:
                    request.data[key] =request.FILES.get(key)
        print('data:',request.data)

作业二:

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

posted @ 2020-07-01 23:13  风起千寻  阅读(167)  评论(0编辑  收藏  举报